PageSourceSearch

https://afag.no/_Resources/Static/Packages/Teha.Site/Javascripts/site.js?v2

js afag.no collected 2026-10-06 15:02:03 UTC 2,459,639 bytes, 52,116 lines download raw bytes

vendor: 17,344 bytes, lines 1-685
1/*!
2 * jQuery JavaScript Library v3.1.1
3 * https://jquery.com/
4 *
5 * Includes Sizzle.js
6 * https://sizzlejs.com/
7 *
8 * Copyright jQuery Foundation and other contributors
9 * Released under the MIT license
10 * https://jquery.org/license
11 *
12 * Date: 2016-09-22T22:30Z
13 */
14( function( global, factory ) {
15
16	"use strict";
17
18	if ( typeof module === "object" && typeof module.exports === "object" ) {
19
20		// For CommonJS and CommonJS-like environments where a proper `window`
21		// is present, execute the factory and get jQuery.
22		// For environments that do not have a `window` with a `document`
23		// (such as Node.js), expose a factory as module.exports.
24		// This accentuates the need for the creation of a real `window`.
25		// e.g. var jQuery = require("jquery")(window);
26		// See ticket #14549 for more info.
27		module.exports = global.document ?
28			factory( global, true ) :
29			function( w ) {
30				if ( !w.document ) {
31					throw new Error( "jQuery requires a window with a document" );
32				}
33				return factory( w );
34			};
35	} else {
36		factory( global );
37	}
38
39// Pass this if window is not defined yet
40} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
41
42// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
43// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
44// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
45// enough that all such attempts are guarded in a try block.
46"use strict";
47
48var arr = [];
49
50var document = window.document;
51
52var getProto = Object.getPrototypeOf;
53
54var slice = arr.slice;
55
56var concat = arr.concat;
57
58var push = arr.push;
59
60var indexOf = arr.indexOf;
61
62var class2type = {};
63
64var toString = class2type.toString;
65
66var hasOwn = class2type.hasOwnProperty;
67
68var fnToString = hasOwn.toString;
69
70var ObjectFunctionString = fnToString.call( Object );
71
72var support = {};
73
74
75
76	function DOMEval( code, doc ) {
77		doc = doc || document;
78
79		var script = doc.createElement( "script" );
80
81		script.text = code;
82		doc.head.appendChild( script ).parentNode.removeChild( script );
83	}
84/* global Symbol */
85// Defining this global in .eslintrc.json would create a danger of using the global
86// unguarded in another place, it seems safer to define global only for this module
87
88
89
90var
91	version = "3.1.1",
92
93	// Define a local copy of jQuery
94	jQuery = function( selector, context ) {
95
96		// The jQuery object is actually just the init constructor 'enhanced'
97		// Need init if jQuery is called (just allow error to be thrown if not included)
98		return new jQuery.fn.init( selector, context );
99	},
100
101	// Support: Android <=4.0 only
102	// Make sure we trim BOM and NBSP
103	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
104
105	// Matches dashed string for camelizing
106	rmsPrefix = /^-ms-/,
107	rdashAlpha = /-([a-z])/g,
108
109	// Used by jQuery.camelCase as callback to replace()
110	fcamelCase = function( all, letter ) {
111		return letter.toUpperCase();
112	};
113
114jQuery.fn = jQuery.prototype = {
115
116	// The current version of jQuery being used
117	jquery: version,
118
119	constructor: jQuery,
120
121	// The default length of a jQuery object is 0
122	length: 0,
123
124	toArray: function() {
125		return slice.call( this );
126	},
127
128	// Get the Nth element in the matched element set OR
129	// Get the whole matched element set as a clean array
130	get: function( num ) {
131
132		// Return all the elements in a clean array
133		if ( num == null ) {
134			return slice.call( this );
135		}
136
137		// Return just the one element from the set
138		return num < 0 ? this[ num + this.length ] : this[ num ];
139	},
140
141	// Take an array of elements and push it onto the stack
142	// (returning the new matched element set)
143	pushStack: function( elems ) {
144
145		// Build a new jQuery matched element set
146		var ret = jQuery.merge( this.constructor(), elems );
147
148		// Add the old object onto the stack (as a reference)
149		ret.prevObject = this;
150
151		// Return the newly-formed element set
152		return ret;
153	},
154
155	// Execute a callback for every element in the matched set.
156	each: function( callback ) {
157		return jQuery.each( this, callback );
158	},
159
160	map: function( callback ) {
161		return this.pushStack( jQuery.map( this, function( elem, i ) {
162			return callback.call( elem, i, elem );
163		} ) );
164	},
165
166	slice: function() {
167		return this.pushStack( slice.apply( this, arguments ) );
168	},
169
170	first: function() {
171		return this.eq( 0 );
172	},
173
174	last: function() {
175		return this.eq( -1 );
176	},
177
178	eq: function( i ) {
179		var len = this.length,
180			j = +i + ( i < 0 ? len : 0 );
181		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
182	},
183
184	end: function() {
185		return this.prevObject || this.constructor();
186	},
187
188	// For internal use only.
189	// Behaves like an Array's method, not like a jQuery method.
190	push: push,
191	sort: arr.sort,
192	splice: arr.splice
193};
194
195jQuery.extend = jQuery.fn.extend = function() {
196	var options, name, src, copy, copyIsArray, clone,
197		target = arguments[ 0 ] || {},
198		i = 1,
199		length = arguments.length,
200		deep = false;
201
202	// Handle a deep copy situation
203	if ( typeof target === "boolean" ) {
204		deep = target;
205
206		// Skip the boolean and the target
207		target = arguments[ i ] || {};
208		i++;
209	}
210
211	// Handle case when target is a string or something (possible in deep copy)
212	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
213		target = {};
214	}
215
216	// Extend jQuery itself if only one argument is passed
217	if ( i === length ) {
218		target = this;
219		i--;
220	}
221
222	for ( ; i < length; i++ ) {
223
224		// Only deal with non-null/undefined values
225		if ( ( options = arguments[ i ] ) != null ) {
226
227			// Extend the base object
228			for ( name in options ) {
229				src = target[ name ];
230				copy = options[ name ];
231
232				// Prevent never-ending loop
233				if ( target === copy ) {
234					continue;
235				}
236
237				// Recurse if we're merging plain objects or arrays
238				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
239					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
240
241					if ( copyIsArray ) {
242						copyIsArray = false;
243						clone = src && jQuery.isArray( src ) ? src : [];
244
245					} else {
246						clone = src && jQuery.isPlainObject( src ) ? src : {};
247					}
248
249					// Never move original objects, clone them
250					target[ name ] = jQuery.extend( deep, clone, copy );
251
252				// Don't bring in undefined values
253				} else if ( copy !== undefined ) {
254					target[ name ] = copy;
255				}
256			}
257		}
258	}
259
260	// Return the modified object
261	return target;
262};
263
264jQuery.extend( {
265
266	// Unique for each copy of jQuery on the page
267	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
268
269	// Assume jQuery is ready without the ready module
270	isReady: true,
271
272	error: function( msg ) {
273		throw new Error( msg );
274	},
275
276	noop: function() {},
277
278	isFunction: function( obj ) {
279		return jQuery.type( obj ) === "function";
280	},
281
282	isArray: Array.isArray,
283
284	isWindow: function( obj ) {
285		return obj != null && obj === obj.window;
286	},
287
288	isNumeric: function( obj ) {
289
290		// As of jQuery 3.0, isNumeric is limited to
291		// strings and numbers (primitives or objects)
292		// that can be coerced to finite numbers (gh-2662)
293		var type = jQuery.type( obj );
294		return ( type === "number" || type === "string" ) &&
295
296			// parseFloat NaNs numeric-cast false positives ("")
297			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
298			// subtraction forces infinities to NaN
299			!isNaN( obj - parseFloat( obj ) );
300	},
301
302	isPlainObject: function( obj ) {
303		var proto, Ctor;
304
305		// Detect obvious negatives
306		// Use toString instead of jQuery.type to catch host objects
307		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
308			return false;
309		}
310
311		proto = getProto( obj );
312
313		// Objects with no prototype (e.g., `Object.create( null )`) are plain
314		if ( !proto ) {
315			return true;
316		}
317
318		// Objects with prototype are plain iff they were constructed by a global Object function
319		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
320		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
321	},
322
323	isEmptyObject: function( obj ) {
324
325		/* eslint-disable no-unused-vars */
326		// See https://github.com/eslint/eslint/issues/6125
327		var name;
328
329		for ( name in obj ) {
330			return false;
331		}
332		return true;
333	},
334
335	type: function( obj ) {
336		if ( obj == null ) {
337			return obj + "";
338		}
339
340		// Support: Android <=2.3 only (functionish RegExp)
341		return typeof obj === "object" || typeof obj === "function" ?
342			class2type[ toString.call( obj ) ] || "object" :
343			typeof obj;
344	},
345
346	// Evaluates a script in a global context
347	globalEval: function( code ) {
348		DOMEval( code );
349	},
350
351	// Convert dashed to camelCase; used by the css and data modules
352	// Support: IE <=9 - 11, Edge 12 - 13
353	// Microsoft forgot to hump their vendor prefix (#9572)
354	camelCase: function( string ) {
355		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
356	},
357
358	nodeName: function( elem, name ) {
359		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
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			"" :
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	// Bind a function to a context, optionally partially applying any
483	// arguments.
484	proxy: function( fn, context ) {
485		var tmp, args, proxy;
486
487		if ( typeof context === "string" ) {
488			tmp = fn[ context ];
489			context = fn;
490			fn = tmp;
491		}
492
493		// Quick check to determine if target is callable, in the spec
494		// this throws a TypeError, but we will just return undefined.
495		if ( !jQuery.isFunction( fn ) ) {
496			return undefined;
497		}
498
499		// Simulated bind
500		args = slice.call( arguments, 2 );
501		proxy = function() {
502			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
503		};
504
505		// Set the guid of unique handler to the same of original handler, so it can be removed
506		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
507
508		return proxy;
509	},
510
511	now: Date.now,
512
513	// jQuery.support is not used in Core but other projects attach their
514	// properties to it so it needs to exist.
515	support: support
516} );
517
518if ( typeof Symbol === "function" ) {
519	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
520}
521
522// Populate the class2type map
523jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
524function( i, name ) {
525	class2type[ "[object " + name + "]" ] = name.toLowerCase();
526} );
527
528function isArrayLike( obj ) {
529
530	// Support: real iOS 8.2 only (not reproducible in simulator)
531	// `in` check used to prevent JIT error (gh-2145)
532	// hasOwn isn't used here due to false negatives
533	// regarding Nodelist length in IE
534	var length = !!obj && "length" in obj && obj.length,
535		type = jQuery.type( obj );
536
537	if ( type === "function" || jQuery.isWindow( obj ) ) {
538		return false;
539	}
540
541	return type === "array" || length === 0 ||
542		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
543}
544var Sizzle =
545/*!
546 * Sizzle CSS Selector Engine v2.3.3
547 * https://sizzlejs.com/
548 *
549 * Copyright jQuery Foundation and other contributors
550 * Released under the MIT license
551 * http://jquery.org/license
552 *
553 * Date: 2016-08-08
554 */
555(function( window ) {
556
557var i,
558	support,
559	Expr,
560	getText,
561	isXML,
562	tokenize,
563	compile,
564	select,
565	outermostContext,
566	sortInput,
567	hasDuplicate,
568
569	// Local document vars
570	setDocument,
571	document,
572	docElem,
573	documentIsHTML,
574	rbuggyQSA,
575	rbuggyMatches,
576	matches,
577	contains,
578
579	// Instance-specific data
580	expando = "sizzle" + 1 * new Date(),
581	preferredDoc = window.document,
582	dirruns = 0,
583	done = 0,
584	classCache = createCache(),
585	tokenCache = createCache(),
586	compilerCache = createCache(),
587	sortOrder = function( a, b ) {
588		if ( a === b ) {
589			hasDuplicate = true;
590		}
591		return 0;
592	},
593
594	// Instance methods
595	hasOwn = ({}).hasOwnProperty,
596	arr = [],
597	pop = arr.pop,
598	push_native = arr.push,
599	push = arr.push,
600	slice = arr.slice,
601	// Use a stripped-down indexOf as it's faster than native
602	// https://jsperf.com/thor-indexof-vs-for/5
603	indexOf = function( list, elem ) {
604		var i = 0,
605			len = list.length;
606		for ( ; i < len; i++ ) {
607			if ( list[i] === elem ) {
608				return i;
609			}
610		}
611		return -1;
612	},
613
614	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
615
616	// Regular expressions
617
618	// http://www.w3.org/TR/css3-selectors/#whitespace
619	whitespace = "[\\x20\\t\\r\\n\\f]",
620
621	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
622	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
623
624	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
625	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
626		// Operator (capture 2)
627		"*([*^$|!~]?=)" + whitespace +
628		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
629		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
630		"*\\]",
631
632	pseudos = ":(" + identifier + ")(?:\\((" +
633		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
634		// 1. quoted (capture 3; capture 4 or capture 5)
635		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
636		// 2. simple (capture 6)
637		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
638		// 3. anything else (capture 2)
639		".*" +
640		")\\)|)",
641
642	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
643	rwhitespace = new RegExp( whitespace + "+", "g" ),
644	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
645
646	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
647	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
648
649	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
650
651	rpseudo = new RegExp( pseudos ),
652	ridentifier = new RegExp( "^" + identifier + "$" ),
653
654	matchExpr = {
655		"ID": new RegExp( "^#(" + identifier + ")" ),
656		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
657		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
658		"ATTR": new RegExp( "^" + attributes ),
659		"PSEUDO": new RegExp( "^" + pseudos ),
660		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
661			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
662			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
663		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
664		// For use in libraries implementing .is()
665		// We use this for POS matching in `select`
666		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
667			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
668	},
669
670	rinputs = /^(?:input|select|textarea|button)$/i,
671	rheader = /^h\d$/i,
672
673	rnative = /^[^{]+\{\s*\[native \w/,
674
675	// Easily-parseable/retrievable ID or TAG or CLASS selectors
676	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
677
678	rsibling = /[+~]/,
679
680	// CSS escapes
681	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
682	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
683	funescape = function( _, escaped, escapedWhitespace ) {
684		var high = "0x" + escaped - 0x10000;
685		// NaN means non-codepoint
vendor: 18,941 bytes, lines 686-1334
686		// Support: Firefox<24
687		// Workaround erroneous numeric interpretation of +"0x"
688		return high !== high || escapedWhitespace ?
689			escaped :
690			high < 0 ?
691				// BMP codepoint
692				String.fromCharCode( high + 0x10000 ) :
693				// Supplemental Plane codepoint (surrogate pair)
694				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
695	},
696
697	// CSS string/identifier serialization
698	// https://drafts.csswg.org/cssom/#common-serializing-idioms
699	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
700	fcssescape = function( ch, asCodePoint ) {
701		if ( asCodePoint ) {
702
703			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
704			if ( ch === "\0" ) {
705				return "\uFFFD";
706			}
707
708			// Control characters and (dependent upon position) numbers get escaped as code points
709			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
710		}
711
712		// Other potentially-special ASCII characters get backslash-escaped
713		return "\\" + ch;
714	},
715
716	// Used for iframes
717	// See setDocument()
718	// Removing the function wrapper causes a "Permission Denied"
719	// error in IE
720	unloadHandler = function() {
721		setDocument();
722	},
723
724	disabledAncestor = addCombinator(
725		function( elem ) {
726			return elem.disabled === true && ("form" in elem || "label" in elem);
727		},
728		{ dir: "parentNode", next: "legend" }
729	);
730
731// Optimize for push.apply( _, NodeList )
732try {
733	push.apply(
734		(arr = slice.call( preferredDoc.childNodes )),
735		preferredDoc.childNodes
736	);
737	// Support: Android<4.0
738	// Detect silently failing push.apply
739	arr[ preferredDoc.childNodes.length ].nodeType;
740} catch ( e ) {
741	push = { apply: arr.length ?
742
743		// Leverage slice if possible
744		function( target, els ) {
745			push_native.apply( target, slice.call(els) );
746		} :
747
748		// Support: IE<9
749		// Otherwise append directly
750		function( target, els ) {
751			var j = target.length,
752				i = 0;
753			// Can't trust NodeList.length
754			while ( (target[j++] = els[i++]) ) {}
755			target.length = j - 1;
756		}
757	};
758}
759
760function Sizzle( selector, context, results, seed ) {
761	var m, i, elem, nid, match, groups, newSelector,
762		newContext = context && context.ownerDocument,
763
764		// nodeType defaults to 9, since context defaults to document
765		nodeType = context ? context.nodeType : 9;
766
767	results = results || [];
768
769	// Return early from calls with invalid selector or context
770	if ( typeof selector !== "string" || !selector ||
771		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
772
773		return results;
774	}
775
776	// Try to shortcut find operations (as opposed to filters) in HTML documents
777	if ( !seed ) {
778
779		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
780			setDocument( context );
781		}
782		context = context || document;
783
784		if ( documentIsHTML ) {
785
786			// If the selector is sufficiently simple, try using a "get*By*" DOM method
787			// (excepting DocumentFragment context, where the methods don't exist)
788			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
789
790				// ID selector
791				if ( (m = match[1]) ) {
792
793					// Document context
794					if ( nodeType === 9 ) {
795						if ( (elem = context.getElementById( m )) ) {
796
797							// Support: IE, Opera, Webkit
798							// TODO: identify versions
799							// getElementById can match elements by name instead of ID
800							if ( elem.id === m ) {
801								results.push( elem );
802								return results;
803							}
804						} else {
805							return results;
806						}
807
808					// Element context
809					} else {
810
811						// Support: IE, Opera, Webkit
812						// TODO: identify versions
813						// getElementById can match elements by name instead of ID
814						if ( newContext && (elem = newContext.getElementById( m )) &&
815							contains( context, elem ) &&
816							elem.id === m ) {
817
818							results.push( elem );
819							return results;
820						}
821					}
822
823				// Type selector
824				} else if ( match[2] ) {
825					push.apply( results, context.getElementsByTagName( selector ) );
826					return results;
827
828				// Class selector
829				} else if ( (m = match[3]) && support.getElementsByClassName &&
830					context.getElementsByClassName ) {
831
832					push.apply( results, context.getElementsByClassName( m ) );
833					return results;
834				}
835			}
836
837			// Take advantage of querySelectorAll
838			if ( support.qsa &&
839				!compilerCache[ selector + " " ] &&
840				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
841
842				if ( nodeType !== 1 ) {
843					newContext = context;
844					newSelector = selector;
845
846				// qSA looks outside Element context, which is not what we want
847				// Thanks to Andrew Dupont for this workaround technique
848				// Support: IE <=8
849				// Exclude object elements
850				} else if ( context.nodeName.toLowerCase() !== "object" ) {
851
852					// Capture the context ID, setting it first if necessary
853					if ( (nid = context.getAttribute( "id" )) ) {
854						nid = nid.replace( rcssescape, fcssescape );
855					} else {
856						context.setAttribute( "id", (nid = expando) );
857					}
858
859					// Prefix every selector in the list
860					groups = tokenize( selector );
861					i = groups.length;
862					while ( i-- ) {
863						groups[i] = "#" + nid + " " + toSelector( groups[i] );
864					}
865					newSelector = groups.join( "," );
866
867					// Expand context for sibling selectors
868					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
869						context;
870				}
871
872				if ( newSelector ) {
873					try {
874						push.apply( results,
875							newContext.querySelectorAll( newSelector )
876						);
877						return results;
878					} catch ( qsaError ) {
879					} finally {
880						if ( nid === expando ) {
881							context.removeAttribute( "id" );
882						}
883					}
884				}
885			}
886		}
887	}
888
889	// All others
890	return select( selector.replace( rtrim, "$1" ), context, results, seed );
891}
892
893/**
894 * Create key-value caches of limited size
895 * @returns {function(string, object)} Returns the Object data after storing it on itself with
896 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
897 *	deleting the oldest entry
898 */
899function createCache() {
900	var keys = [];
901
902	function cache( key, value ) {
903		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
904		if ( keys.push( key + " " ) > Expr.cacheLength ) {
905			// Only keep the most recent entries
906			delete cache[ keys.shift() ];
907		}
908		return (cache[ key + " " ] = value);
909	}
910	return cache;
911}
912
913/**
914 * Mark a function for special use by Sizzle
915 * @param {Function} fn The function to mark
916 */
917function markFunction( fn ) {
918	fn[ expando ] = true;
919	return fn;
920}
921
922/**
923 * Support testing using an element
924 * @param {Function} fn Passed the created element and returns a boolean result
925 */
926function assert( fn ) {
927	var el = document.createElement("fieldset");
928
929	try {
930		return !!fn( el );
931	} catch (e) {
932		return false;
933	} finally {
934		// Remove from its parent by default
935		if ( el.parentNode ) {
936			el.parentNode.removeChild( el );
937		}
938		// release memory in IE
939		el = null;
940	}
941}
942
943/**
944 * Adds the same handler for all of the specified attrs
945 * @param {String} attrs Pipe-separated list of attributes
946 * @param {Function} handler The method that will be applied
947 */
948function addHandle( attrs, handler ) {
949	var arr = attrs.split("|"),
950		i = arr.length;
951
952	while ( i-- ) {
953		Expr.attrHandle[ arr[i] ] = handler;
954	}
955}
956
957/**
958 * Checks document order of two siblings
959 * @param {Element} a
960 * @param {Element} b
961 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
962 */
963function siblingCheck( a, b ) {
964	var cur = b && a,
965		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
966			a.sourceIndex - b.sourceIndex;
967
968	// Use IE sourceIndex if available on both nodes
969	if ( diff ) {
970		return diff;
971	}
972
973	// Check if b follows a
974	if ( cur ) {
975		while ( (cur = cur.nextSibling) ) {
976			if ( cur === b ) {
977				return -1;
978			}
979		}
980	}
981
982	return a ? 1 : -1;
983}
984
985/**
986 * Returns a function to use in pseudos for input types
987 * @param {String} type
988 */
989function createInputPseudo( type ) {
990	return function( elem ) {
991		var name = elem.nodeName.toLowerCase();
992		return name === "input" && elem.type === type;
993	};
994}
995
996/**
997 * Returns a function to use in pseudos for buttons
998 * @param {String} type
999 */
1000function createButtonPseudo( type ) {
1001	return function( elem ) {
1002		var name = elem.nodeName.toLowerCase();
1003		return (name === "input" || name === "button") && elem.type === type;
1004	};
1005}
1006
1007/**
1008 * Returns a function to use in pseudos for :enabled/:disabled
1009 * @param {Boolean} disabled true for :disabled; false for :enabled
1010 */
1011function createDisabledPseudo( disabled ) {
1012
1013	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1014	return function( elem ) {
1015
1016		// Only certain elements can match :enabled or :disabled
1017		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
1018		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
1019		if ( "form" in elem ) {
1020
1021			// Check for inherited disabledness on relevant non-disabled elements:
1022			// * listed form-associated elements in a disabled fieldset
1023			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
1024			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
1025			// * option elements in a disabled optgroup
1026			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
1027			// All such elements have a "form" property.
1028			if ( elem.parentNode && elem.disabled === false ) {
1029
1030				// Option elements defer to a parent optgroup if present
1031				if ( "label" in elem ) {
1032					if ( "label" in elem.parentNode ) {
1033						return elem.parentNode.disabled === disabled;
1034					} else {
1035						return elem.disabled === disabled;
1036					}
1037				}
1038
1039				// Support: IE 6 - 11
1040				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
1041				return elem.isDisabled === disabled ||
1042
1043					// Where there is no isDisabled, check manually
1044					/* jshint -W018 */
1045					elem.isDisabled !== !disabled &&
1046						disabledAncestor( elem ) === disabled;
1047			}
1048
1049			return elem.disabled === disabled;
1050
1051		// Try to winnow out elements that can't be disabled before trusting the disabled property.
1052		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
1053		// even exist on them, let alone have a boolean value.
1054		} else if ( "label" in elem ) {
1055			return elem.disabled === disabled;
1056		}
1057
1058		// Remaining elements are neither :enabled nor :disabled
1059		return false;
1060	};
1061}
1062
1063/**
1064 * Returns a function to use in pseudos for positionals
1065 * @param {Function} fn
1066 */
1067function createPositionalPseudo( fn ) {
1068	return markFunction(function( argument ) {
1069		argument = +argument;
1070		return markFunction(function( seed, matches ) {
1071			var j,
1072				matchIndexes = fn( [], seed.length, argument ),
1073				i = matchIndexes.length;
1074
1075			// Match elements found at the specified indexes
1076			while ( i-- ) {
1077				if ( seed[ (j = matchIndexes[i]) ] ) {
1078					seed[j] = !(matches[j] = seed[j]);
1079				}
1080			}
1081		});
1082	});
1083}
1084
1085/**
1086 * Checks a node for validity as a Sizzle context
1087 * @param {Element|Object=} context
1088 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1089 */
1090function testContext( context ) {
1091	return context && typeof context.getElementsByTagName !== "undefined" && context;
1092}
1093
1094// Expose support vars for convenience
1095support = Sizzle.support = {};
1096
1097/**
1098 * Detects XML nodes
1099 * @param {Element|Object} elem An element or a document
1100 * @returns {Boolean} True iff elem is a non-HTML XML node
1101 */
1102isXML = Sizzle.isXML = function( elem ) {
1103	// documentElement is verified for cases where it doesn't yet exist
1104	// (such as loading iframes in IE - #4833)
1105	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
1106	return documentElement ? documentElement.nodeName !== "HTML" : false;
1107};
1108
1109/**
1110 * Sets document-related variables once based on the current document
1111 * @param {Element|Object} [doc] An element or document object to use to set the document
1112 * @returns {Object} Returns the current document
1113 */
1114setDocument = Sizzle.setDocument = function( node ) {
1115	var hasCompare, subWindow,
1116		doc = node ? node.ownerDocument || node : preferredDoc;
1117
1118	// Return early if doc is invalid or already selected
1119	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
1120		return document;
1121	}
1122
1123	// Update global variables
1124	document = doc;
1125	docElem = document.documentElement;
1126	documentIsHTML = !isXML( document );
1127
1128	// Support: IE 9-11, Edge
1129	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
1130	if ( preferredDoc !== document &&
1131		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
1132
1133		// Support: IE 11, Edge
1134		if ( subWindow.addEventListener ) {
1135			subWindow.addEventListener( "unload", unloadHandler, false );
1136
1137		// Support: IE 9 - 10 only
1138		} else if ( subWindow.attachEvent ) {
1139			subWindow.attachEvent( "onunload", unloadHandler );
1140		}
1141	}
1142
1143	/* Attributes
1144	---------------------------------------------------------------------- */
1145
1146	// Support: IE<8
1147	// Verify that getAttribute really returns attributes and not properties
1148	// (excepting IE8 booleans)
1149	support.attributes = assert(function( el ) {
1150		el.className = "i";
1151		return !el.getAttribute("className");
1152	});
1153
1154	/* getElement(s)By*
1155	---------------------------------------------------------------------- */
1156
1157	// Check if getElementsByTagName("*") returns only elements
1158	support.getElementsByTagName = assert(function( el ) {
1159		el.appendChild( document.createComment("") );
1160		return !el.getElementsByTagName("*").length;
1161	});
1162
1163	// Support: IE<9
1164	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
1165
1166	// Support: IE<10
1167	// Check if getElementById returns elements by name
1168	// The broken getElementById methods don't pick up programmatically-set names,
1169	// so use a roundabout getElementsByName test
1170	support.getById = assert(function( el ) {
1171		docElem.appendChild( el ).id = expando;
1172		return !document.getElementsByName || !document.getElementsByName( expando ).length;
1173	});
1174
1175	// ID filter and find
1176	if ( support.getById ) {
1177		Expr.filter["ID"] = function( id ) {
1178			var attrId = id.replace( runescape, funescape );
1179			return function( elem ) {
1180				return elem.getAttribute("id") === attrId;
1181			};
1182		};
1183		Expr.find["ID"] = function( id, context ) {
1184			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1185				var elem = context.getElementById( id );
1186				return elem ? [ elem ] : [];
1187			}
1188		};
1189	} else {
1190		Expr.filter["ID"] =  function( id ) {
1191			var attrId = id.replace( runescape, funescape );
1192			return function( elem ) {
1193				var node = typeof elem.getAttributeNode !== "undefined" &&
1194					elem.getAttributeNode("id");
1195				return node && node.value === attrId;
1196			};
1197		};
1198
1199		// Support: IE 6 - 7 only
1200		// getElementById is not reliable as a find shortcut
1201		Expr.find["ID"] = function( id, context ) {
1202			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1203				var node, i, elems,
1204					elem = context.getElementById( id );
1205
1206				if ( elem ) {
1207
1208					// Verify the id attribute
1209					node = elem.getAttributeNode("id");
1210					if ( node && node.value === id ) {
1211						return [ elem ];
1212					}
1213
1214					// Fall back on getElementsByName
1215					elems = context.getElementsByName( id );
1216					i = 0;
1217					while ( (elem = elems[i++]) ) {
1218						node = elem.getAttributeNode("id");
1219						if ( node && node.value === id ) {
1220							return [ elem ];
1221						}
1222					}
1223				}
1224
1225				return [];
1226			}
1227		};
1228	}
1229
1230	// Tag
1231	Expr.find["TAG"] = support.getElementsByTagName ?
1232		function( tag, context ) {
1233			if ( typeof context.getElementsByTagName !== "undefined" ) {
1234				return context.getElementsByTagName( tag );
1235
1236			// DocumentFragment nodes don't have gEBTN
1237			} else if ( support.qsa ) {
1238				return context.querySelectorAll( tag );
1239			}
1240		} :
1241
1242		function( tag, context ) {
1243			var elem,
1244				tmp = [],
1245				i = 0,
1246				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1247				results = context.getElementsByTagName( tag );
1248
1249			// Filter out possible comments
1250			if ( tag === "*" ) {
1251				while ( (elem = results[i++]) ) {
1252					if ( elem.nodeType === 1 ) {
1253						tmp.push( elem );
1254					}
1255				}
1256
1257				return tmp;
1258			}
1259			return results;
1260		};
1261
1262	// Class
1263	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
1264		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
1265			return context.getElementsByClassName( className );
1266		}
1267	};
1268
1269	/* QSA/matchesSelector
1270	---------------------------------------------------------------------- */
1271
1272	// QSA and matchesSelector support
1273
1274	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1275	rbuggyMatches = [];
1276
1277	// qSa(:focus) reports false when true (Chrome 21)
1278	// We allow this because of a bug in IE8/9 that throws an error
1279	// whenever `document.activeElement` is accessed on an iframe
1280	// So, we allow :focus to pass through QSA all the time to avoid the IE error
1281	// See https://bugs.jquery.com/ticket/13378
1282	rbuggyQSA = [];
1283
1284	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
1285		// Build QSA regex
1286		// Regex strategy adopted from Diego Perini
1287		assert(function( el ) {
1288			// Select is set to empty string on purpose
1289			// This is to test IE's treatment of not explicitly
1290			// setting a boolean content attribute,
1291			// since its presence should be enough
1292			// https://bugs.jquery.com/ticket/12359
1293			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
1294				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
1295				"<option selected=''></option></select>";
1296
1297			// Support: IE8, Opera 11-12.16
1298			// Nothing should be selected when empty strings follow ^= or $= or *=
1299			// The test attribute must be unknown in Opera but "safe" for WinRT
1300			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1301			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
1302				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1303			}
1304
1305			// Support: IE8
1306			// Boolean attributes and "value" are not treated correctly
1307			if ( !el.querySelectorAll("[selected]").length ) {
1308				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1309			}
1310
1311			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
1312			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1313				rbuggyQSA.push("~=");
1314			}
1315
1316			// Webkit/Opera - :checked should return selected option elements
1317			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1318			// IE8 throws error here and will not see later tests
1319			if ( !el.querySelectorAll(":checked").length ) {
1320				rbuggyQSA.push(":checked");
1321			}
1322
1323			// Support: Safari 8+, iOS 8+
1324			// https://bugs.webkit.org/show_bug.cgi?id=136851
1325			// In-page `selector#id sibling-combinator selector` fails
1326			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
1327				rbuggyQSA.push(".#.+[+~]");
1328			}
1329		});
1330
1331		assert(function( el ) {
1332			el.innerHTML = "<a href='' disabled='disabled'></a>" +
1333				"<select disabled='disabled'><option/></select>";
1334
vendor: 6,849 bytes, lines 1335-1582
1335			// Support: Windows 8 Native Apps
1336			// The type and name attributes are restricted during .innerHTML assignment
1337			var input = document.createElement("input");
1338			input.setAttribute( "type", "hidden" );
1339			el.appendChild( input ).setAttribute( "name", "D" );
1340
1341			// Support: IE8
1342			// Enforce case-sensitivity of name attribute
1343			if ( el.querySelectorAll("[name=d]").length ) {
1344				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1345			}
1346
1347			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1348			// IE8 throws error here and will not see later tests
1349			if ( el.querySelectorAll(":enabled").length !== 2 ) {
1350				rbuggyQSA.push( ":enabled", ":disabled" );
1351			}
1352
1353			// Support: IE9-11+
1354			// IE's :disabled selector does not pick up the children of disabled fieldsets
1355			docElem.appendChild( el ).disabled = true;
1356			if ( el.querySelectorAll(":disabled").length !== 2 ) {
1357				rbuggyQSA.push( ":enabled", ":disabled" );
1358			}
1359
1360			// Opera 10-11 does not throw on post-comma invalid pseudos
1361			el.querySelectorAll("*,:x");
1362			rbuggyQSA.push(",.*:");
1363		});
1364	}
1365
1366	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
1367		docElem.webkitMatchesSelector ||
1368		docElem.mozMatchesSelector ||
1369		docElem.oMatchesSelector ||
1370		docElem.msMatchesSelector) )) ) {
1371
1372		assert(function( el ) {
1373			// Check to see if it's possible to do matchesSelector
1374			// on a disconnected node (IE 9)
1375			support.disconnectedMatch = matches.call( el, "*" );
1376
1377			// This should fail with an exception
1378			// Gecko does not error, returns false instead
1379			matches.call( el, "[s!='']:x" );
1380			rbuggyMatches.push( "!=", pseudos );
1381		});
1382	}
1383
1384	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
1385	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
1386
1387	/* Contains
1388	---------------------------------------------------------------------- */
1389	hasCompare = rnative.test( docElem.compareDocumentPosition );
1390
1391	// Element contains another
1392	// Purposefully self-exclusive
1393	// As in, an element does not contain itself
1394	contains = hasCompare || rnative.test( docElem.contains ) ?
1395		function( a, b ) {
1396			var adown = a.nodeType === 9 ? a.documentElement : a,
1397				bup = b && b.parentNode;
1398			return a === bup || !!( bup && bup.nodeType === 1 && (
1399				adown.contains ?
1400					adown.contains( bup ) :
1401					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1402			));
1403		} :
1404		function( a, b ) {
1405			if ( b ) {
1406				while ( (b = b.parentNode) ) {
1407					if ( b === a ) {
1408						return true;
1409					}
1410				}
1411			}
1412			return false;
1413		};
1414
1415	/* Sorting
1416	---------------------------------------------------------------------- */
1417
1418	// Document order sorting
1419	sortOrder = hasCompare ?
1420	function( a, b ) {
1421
1422		// Flag for duplicate removal
1423		if ( a === b ) {
1424			hasDuplicate = true;
1425			return 0;
1426		}
1427
1428		// Sort on method existence if only one input has compareDocumentPosition
1429		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
1430		if ( compare ) {
1431			return compare;
1432		}
1433
1434		// Calculate position if both inputs belong to the same document
1435		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
1436			a.compareDocumentPosition( b ) :
1437
1438			// Otherwise we know they are disconnected
1439			1;
1440
1441		// Disconnected nodes
1442		if ( compare & 1 ||
1443			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
1444
1445			// Choose the first element that is related to our preferred document
1446			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
1447				return -1;
1448			}
1449			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
1450				return 1;
1451			}
1452
1453			// Maintain original order
1454			return sortInput ?
1455				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1456				0;
1457		}
1458
1459		return compare & 4 ? -1 : 1;
1460	} :
1461	function( a, b ) {
1462		// Exit early if the nodes are identical
1463		if ( a === b ) {
1464			hasDuplicate = true;
1465			return 0;
1466		}
1467
1468		var cur,
1469			i = 0,
1470			aup = a.parentNode,
1471			bup = b.parentNode,
1472			ap = [ a ],
1473			bp = [ b ];
1474
1475		// Parentless nodes are either documents or disconnected
1476		if ( !aup || !bup ) {
1477			return a === document ? -1 :
1478				b === document ? 1 :
1479				aup ? -1 :
1480				bup ? 1 :
1481				sortInput ?
1482				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1483				0;
1484
1485		// If the nodes are siblings, we can do a quick check
1486		} else if ( aup === bup ) {
1487			return siblingCheck( a, b );
1488		}
1489
1490		// Otherwise we need full lists of their ancestors for comparison
1491		cur = a;
1492		while ( (cur = cur.parentNode) ) {
1493			ap.unshift( cur );
1494		}
1495		cur = b;
1496		while ( (cur = cur.parentNode) ) {
1497			bp.unshift( cur );
1498		}
1499
1500		// Walk down the tree looking for a discrepancy
1501		while ( ap[i] === bp[i] ) {
1502			i++;
1503		}
1504
1505		return i ?
1506			// Do a sibling check if the nodes have a common ancestor
1507			siblingCheck( ap[i], bp[i] ) :
1508
1509			// Otherwise nodes in our document sort first
1510			ap[i] === preferredDoc ? -1 :
1511			bp[i] === preferredDoc ? 1 :
1512			0;
1513	};
1514
1515	return document;
1516};
1517
1518Sizzle.matches = function( expr, elements ) {
1519	return Sizzle( expr, null, null, elements );
1520};
1521
1522Sizzle.matchesSelector = function( elem, expr ) {
1523	// Set document vars if needed
1524	if ( ( elem.ownerDocument || elem ) !== document ) {
1525		setDocument( elem );
1526	}
1527
1528	// Make sure that attribute selectors are quoted
1529	expr = expr.replace( rattributeQuotes, "='$1']" );
1530
1531	if ( support.matchesSelector && documentIsHTML &&
1532		!compilerCache[ expr + " " ] &&
1533		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1534		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
1535
1536		try {
1537			var ret = matches.call( elem, expr );
1538
1539			// IE 9's matchesSelector returns false on disconnected nodes
1540			if ( ret || support.disconnectedMatch ||
1541					// As well, disconnected nodes are said to be in a document
1542					// fragment in IE 9
1543					elem.document && elem.document.nodeType !== 11 ) {
1544				return ret;
1545			}
1546		} catch (e) {}
1547	}
1548
1549	return Sizzle( expr, document, null, [ elem ] ).length > 0;
1550};
1551
1552Sizzle.contains = function( context, elem ) {
1553	// Set document vars if needed
1554	if ( ( context.ownerDocument || context ) !== document ) {
1555		setDocument( context );
1556	}
1557	return contains( context, elem );
1558};
1559
1560Sizzle.attr = function( elem, name ) {
1561	// Set document vars if needed
1562	if ( ( elem.ownerDocument || elem ) !== document ) {
1563		setDocument( elem );
1564	}
1565
1566	var fn = Expr.attrHandle[ name.toLowerCase() ],
1567		// Don't get fooled by Object.prototype properties (jQuery #13807)
1568		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1569			fn( elem, name, !documentIsHTML ) :
1570			undefined;
1571
1572	return val !== undefined ?
1573		val :
1574		support.attributes || !documentIsHTML ?
1575			elem.getAttribute( name ) :
1576			(val = elem.getAttributeNode(name)) && val.specified ?
1577				val.value :
1578				null;
1579};
1580
1581Sizzle.escape = function( sel ) {
1582	return (sel + "").replace( rcssescape, fcssescape )
vendor: 13,124 bytes, lines 1582-2033
1582;
1583};
1584
1585Sizzle.error = function( msg ) {
1586	throw new Error( "Syntax error, unrecognized expression: " + msg );
1587};
1588
1589/**
1590 * Document sorting and removing duplicates
1591 * @param {ArrayLike} results
1592 */
1593Sizzle.uniqueSort = function( results ) {
1594	var elem,
1595		duplicates = [],
1596		j = 0,
1597		i = 0;
1598
1599	// Unless we *know* we can detect duplicates, assume their presence
1600	hasDuplicate = !support.detectDuplicates;
1601	sortInput = !support.sortStable && results.slice( 0 );
1602	results.sort( sortOrder );
1603
1604	if ( hasDuplicate ) {
1605		while ( (elem = results[i++]) ) {
1606			if ( elem === results[ i ] ) {
1607				j = duplicates.push( i );
1608			}
1609		}
1610		while ( j-- ) {
1611			results.splice( duplicates[ j ], 1 );
1612		}
1613	}
1614
1615	// Clear input after sorting to release objects
1616	// See https://github.com/jquery/sizzle/pull/225
1617	sortInput = null;
1618
1619	return results;
1620};
1621
1622/**
1623 * Utility function for retrieving the text value of an array of DOM nodes
1624 * @param {Array|Element} elem
1625 */
1626getText = Sizzle.getText = function( elem ) {
1627	var node,
1628		ret = "",
1629		i = 0,
1630		nodeType = elem.nodeType;
1631
1632	if ( !nodeType ) {
1633		// If no nodeType, this is expected to be an array
1634		while ( (node = elem[i++]) ) {
1635			// Do not traverse comment nodes
1636			ret += getText( node );
1637		}
1638	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1639		// Use textContent for elements
1640		// innerText usage removed for consistency of new lines (jQuery #11153)
1641		if ( typeof elem.textContent === "string" ) {
1642			return elem.textContent;
1643		} else {
1644			// Traverse its children
1645			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1646				ret += getText( elem );
1647			}
1648		}
1649	} else if ( nodeType === 3 || nodeType === 4 ) {
1650		return elem.nodeValue;
1651	}
1652	// Do not include comment or processing instruction nodes
1653
1654	return ret;
1655};
1656
1657Expr = Sizzle.selectors = {
1658
1659	// Can be adjusted by the user
1660	cacheLength: 50,
1661
1662	createPseudo: markFunction,
1663
1664	match: matchExpr,
1665
1666	attrHandle: {},
1667
1668	find: {},
1669
1670	relative: {
1671		">": { dir: "parentNode", first: true },
1672		" ": { dir: "parentNode" },
1673		"+": { dir: "previousSibling", first: true },
1674		"~": { dir: "previousSibling" }
1675	},
1676
1677	preFilter: {
1678		"ATTR": function( match ) {
1679			match[1] = match[1].replace( runescape, funescape );
1680
1681			// Move the given value to match[3] whether quoted or unquoted
1682			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
1683
1684			if ( match[2] === "~=" ) {
1685				match[3] = " " + match[3] + " ";
1686			}
1687
1688			return match.slice( 0, 4 );
1689		},
1690
1691		"CHILD": function( match ) {
1692			/* matches from matchExpr["CHILD"]
1693				1 type (only|nth|...)
1694				2 what (child|of-type)
1695				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
1696				4 xn-component of xn+y argument ([+-]?\d*n|)
1697				5 sign of xn-component
1698				6 x of xn-component
1699				7 sign of y-component
1700				8 y of y-component
1701			*/
1702			match[1] = match[1].toLowerCase();
1703
1704			if ( match[1].slice( 0, 3 ) === "nth" ) {
1705				// nth-* requires argument
1706				if ( !match[3] ) {
1707					Sizzle.error( match[0] );
1708				}
1709
1710				// numeric x and y parameters for Expr.filter.CHILD
1711				// remember that false/true cast respectively to 0/1
1712				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
1713				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
1714
1715			// other types prohibit arguments
1716			} else if ( match[3] ) {
1717				Sizzle.error( match[0] );
1718			}
1719
1720			return match;
1721		},
1722
1723		"PSEUDO": function( match ) {
1724			var excess,
1725				unquoted = !match[6] && match[2];
1726
1727			if ( matchExpr["CHILD"].test( match[0] ) ) {
1728				return null;
1729			}
1730
1731			// Accept quoted arguments as-is
1732			if ( match[3] ) {
1733				match[2] = match[4] || match[5] || "";
1734
1735			// Strip excess characters from unquoted arguments
1736			} else if ( unquoted && rpseudo.test( unquoted ) &&
1737				// Get excess from tokenize (recursively)
1738				(excess = tokenize( unquoted, true )) &&
1739				// advance to the next closing parenthesis
1740				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
1741
1742				// excess is a negative index
1743				match[0] = match[0].slice( 0, excess );
1744				match[2] = unquoted.slice( 0, excess );
1745			}
1746
1747			// Return only captures needed by the pseudo filter method (type and argument)
1748			return match.slice( 0, 3 );
1749		}
1750	},
1751
1752	filter: {
1753
1754		"TAG": function( nodeNameSelector ) {
1755			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1756			return nodeNameSelector === "*" ?
1757				function() { return true; } :
1758				function( elem ) {
1759					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1760				};
1761		},
1762
1763		"CLASS": function( className ) {
1764			var pattern = classCache[ className + " " ];
1765
1766			return pattern ||
1767				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
1768				classCache( className, function( elem ) {
1769					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
1770				});
1771		},
1772
1773		"ATTR": function( name, operator, check ) {
1774			return function( elem ) {
1775				var result = Sizzle.attr( elem, name );
1776
1777				if ( result == null ) {
1778					return operator === "!=";
1779				}
1780				if ( !operator ) {
1781					return true;
1782				}
1783
1784				result += "";
1785
1786				return operator === "=" ? result === check :
1787					operator === "!=" ? result !== check :
1788					operator === "^=" ? check && result.indexOf( check ) === 0 :
1789					operator === "*=" ? check && result.indexOf( check ) > -1 :
1790					operator === "$=" ? check && result.slice( -check.length ) === check :
1791					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1792					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1793					false;
1794			};
1795		},
1796
1797		"CHILD": function( type, what, argument, first, last ) {
1798			var simple = type.slice( 0, 3 ) !== "nth",
1799				forward = type.slice( -4 ) !== "last",
1800				ofType = what === "of-type";
1801
1802			return first === 1 && last === 0 ?
1803
1804				// Shortcut for :nth-*(n)
1805				function( elem ) {
1806					return !!elem.parentNode;
1807				} :
1808
1809				function( elem, context, xml ) {
1810					var cache, uniqueCache, outerCache, node, nodeIndex, start,
1811						dir = simple !== forward ? "nextSibling" : "previousSibling",
1812						parent = elem.parentNode,
1813						name = ofType && elem.nodeName.toLowerCase(),
1814						useCache = !xml && !ofType,
1815						diff = false;
1816
1817					if ( parent ) {
1818
1819						// :(first|last|only)-(child|of-type)
1820						if ( simple ) {
1821							while ( dir ) {
1822								node = elem;
1823								while ( (node = node[ dir ]) ) {
1824									if ( ofType ?
1825										node.nodeName.toLowerCase() === name :
1826										node.nodeType === 1 ) {
1827
1828										return false;
1829									}
1830								}
1831								// Reverse direction for :only-* (if we haven't yet done so)
1832								start = dir = type === "only" && !start && "nextSibling";
1833							}
1834							return true;
1835						}
1836
1837						start = [ forward ? parent.firstChild : parent.lastChild ];
1838
1839						// non-xml :nth-child(...) stores cache data on `parent`
1840						if ( forward && useCache ) {
1841
1842							// Seek `elem` from a previously-cached index
1843
1844							// ...in a gzip-friendly way
1845							node = parent;
1846							outerCache = node[ expando ] || (node[ expando ] = {});
1847
1848							// Support: IE <9 only
1849							// Defend against cloned attroperties (jQuery gh-1709)
1850							uniqueCache = outerCache[ node.uniqueID ] ||
1851								(outerCache[ node.uniqueID ] = {});
1852
1853							cache = uniqueCache[ type ] || [];
1854							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1855							diff = nodeIndex && cache[ 2 ];
1856							node = nodeIndex && parent.childNodes[ nodeIndex ];
1857
1858							while ( (node = ++nodeIndex && node && node[ dir ] ||
1859
1860								// Fallback to seeking `elem` from the start
1861								(diff = nodeIndex = 0) || start.pop()) ) {
1862
1863								// When found, cache indexes on `parent` and break
1864								if ( node.nodeType === 1 && ++diff && node === elem ) {
1865									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
1866									break;
1867								}
1868							}
1869
1870						} else {
1871							// Use previously-cached element index if available
1872							if ( useCache ) {
1873								// ...in a gzip-friendly way
1874								node = elem;
1875								outerCache = node[ expando ] || (node[ expando ] = {});
1876
1877								// Support: IE <9 only
1878								// Defend against cloned attroperties (jQuery gh-1709)
1879								uniqueCache = outerCache[ node.uniqueID ] ||
1880									(outerCache[ node.uniqueID ] = {});
1881
1882								cache = uniqueCache[ type ] || [];
1883								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1884								diff = nodeIndex;
1885							}
1886
1887							// xml :nth-child(...)
1888							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
1889							if ( diff === false ) {
1890								// Use the same loop as above to seek `elem` from the start
1891								while ( (node = ++nodeIndex && node && node[ dir ] ||
1892									(diff = nodeIndex = 0) || start.pop()) ) {
1893
1894									if ( ( ofType ?
1895										node.nodeName.toLowerCase() === name :
1896										node.nodeType === 1 ) &&
1897										++diff ) {
1898
1899										// Cache the index of each encountered element
1900										if ( useCache ) {
1901											outerCache = node[ expando ] || (node[ expando ] = {});
1902
1903											// Support: IE <9 only
1904											// Defend against cloned attroperties (jQuery gh-1709)
1905											uniqueCache = outerCache[ node.uniqueID ] ||
1906												(outerCache[ node.uniqueID ] = {});
1907
1908											uniqueCache[ type ] = [ dirruns, diff ];
1909										}
1910
1911										if ( node === elem ) {
1912											break;
1913										}
1914									}
1915								}
1916							}
1917						}
1918
1919						// Incorporate the offset, then check against cycle size
1920						diff -= last;
1921						return diff === first || ( diff % first === 0 && diff / first >= 0 );
1922					}
1923				};
1924		},
1925
1926		"PSEUDO": function( pseudo, argument ) {
1927			// pseudo-class names are case-insensitive
1928			// http://www.w3.org/TR/selectors/#pseudo-classes
1929			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
1930			// Remember that setFilters inherits from pseudos
1931			var args,
1932				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
1933					Sizzle.error( "unsupported pseudo: " + pseudo );
1934
1935			// The user may use createPseudo to indicate that
1936			// arguments are needed to create the filter function
1937			// just as Sizzle does
1938			if ( fn[ expando ] ) {
1939				return fn( argument );
1940			}
1941
1942			// But maintain support for old signatures
1943			if ( fn.length > 1 ) {
1944				args = [ pseudo, pseudo, "", argument ];
1945				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
1946					markFunction(function( seed, matches ) {
1947						var idx,
1948							matched = fn( seed, argument ),
1949							i = matched.length;
1950						while ( i-- ) {
1951							idx = indexOf( seed, matched[i] );
1952							seed[ idx ] = !( matches[ idx ] = matched[i] );
1953						}
1954					}) :
1955					function( elem ) {
1956						return fn( elem, 0, args );
1957					};
1958			}
1959
1960			return fn;
1961		}
1962	},
1963
1964	pseudos: {
1965		// Potentially complex pseudos
1966		"not": markFunction(function( selector ) {
1967			// Trim the selector passed to compile
1968			// to avoid treating leading and trailing
1969			// spaces as combinators
1970			var input = [],
1971				results = [],
1972				matcher = compile( selector.replace( rtrim, "$1" ) );
1973
1974			return matcher[ expando ] ?
1975				markFunction(function( seed, matches, context, xml ) {
1976					var elem,
1977						unmatched = matcher( seed, null, xml, [] ),
1978						i = seed.length;
1979
1980					// Match elements unmatched by `matcher`
1981					while ( i-- ) {
1982						if ( (elem = unmatched[i]) ) {
1983							seed[i] = !(matches[i] = elem);
1984						}
1985					}
1986				}) :
1987				function( elem, context, xml ) {
1988					input[0] = elem;
1989					matcher( input, null, xml, results );
1990					// Don't keep the element (issue #299)
1991					input[0] = null;
1992					return !results.pop();
1993				};
1994		}),
1995
1996		"has": markFunction(function( selector ) {
1997			return function( elem ) {
1998				return Sizzle( selector, elem ).length > 0;
1999			};
2000		}),
2001
2002		"contains": markFunction(function( text ) {
2003			text = text.replace( runescape, funescape );
2004			return function( elem ) {
2005				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
2006			};
2007		}),
2008
2009		// "Whether an element is represented by a :lang() selector
2010		// is based solely on the element's language value
2011		// being equal to the identifier C,
2012		// or beginning with the identifier C immediately followed by "-".
2013		// The matching of C against the element's language value is performed case-insensitively.
2014		// The identifier C does not have to be a valid language name."
2015		// http://www.w3.org/TR/selectors/#lang-pseudo
2016		"lang": markFunction( function( lang ) {
2017			// lang value must be a valid identifier
2018			if ( !ridentifier.test(lang || "") ) {
2019				Sizzle.error( "unsupported lang: " + lang );
2020			}
2021			lang = lang.replace( runescape, funescape ).toLowerCase();
2022			return function( elem ) {
2023				var elemLang;
2024				do {
2025					if ( (elemLang = documentIsHTML ?
2026						elem.lang :
2027						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
2028
2029						elemLang = elemLang.toLowerCase();
2030						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
2031					}
2032				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
2033				return false;
vendor: 22,514 bytes, lines 2034-2845
2034			};
2035		}),
2036
2037		// Miscellaneous
2038		"target": function( elem ) {
2039			var hash = window.location && window.location.hash;
2040			return hash && hash.slice( 1 ) === elem.id;
2041		},
2042
2043		"root": function( elem ) {
2044			return elem === docElem;
2045		},
2046
2047		"focus": function( elem ) {
2048			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
2049		},
2050
2051		// Boolean properties
2052		"enabled": createDisabledPseudo( false ),
2053		"disabled": createDisabledPseudo( true ),
2054
2055		"checked": function( elem ) {
2056			// In CSS3, :checked should return both checked and selected elements
2057			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2058			var nodeName = elem.nodeName.toLowerCase();
2059			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
2060		},
2061
2062		"selected": function( elem ) {
2063			// Accessing this property makes selected-by-default
2064			// options in Safari work properly
2065			if ( elem.parentNode ) {
2066				elem.parentNode.selectedIndex;
2067			}
2068
2069			return elem.selected === true;
2070		},
2071
2072		// Contents
2073		"empty": function( elem ) {
2074			// http://www.w3.org/TR/selectors/#empty-pseudo
2075			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2076			//   but not by others (comment: 8; processing instruction: 7; etc.)
2077			// nodeType < 6 works because attributes (2) do not appear as children
2078			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2079				if ( elem.nodeType < 6 ) {
2080					return false;
2081				}
2082			}
2083			return true;
2084		},
2085
2086		"parent": function( elem ) {
2087			return !Expr.pseudos["empty"]( elem );
2088		},
2089
2090		// Element/input types
2091		"header": function( elem ) {
2092			return rheader.test( elem.nodeName );
2093		},
2094
2095		"input": function( elem ) {
2096			return rinputs.test( elem.nodeName );
2097		},
2098
2099		"button": function( elem ) {
2100			var name = elem.nodeName.toLowerCase();
2101			return name === "input" && elem.type === "button" || name === "button";
2102		},
2103
2104		"text": function( elem ) {
2105			var attr;
2106			return elem.nodeName.toLowerCase() === "input" &&
2107				elem.type === "text" &&
2108
2109				// Support: IE<8
2110				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
2111				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
2112		},
2113
2114		// Position-in-collection
2115		"first": createPositionalPseudo(function() {
2116			return [ 0 ];
2117		}),
2118
2119		"last": createPositionalPseudo(function( matchIndexes, length ) {
2120			return [ length - 1 ];
2121		}),
2122
2123		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
2124			return [ argument < 0 ? argument + length : argument ];
2125		}),
2126
2127		"even": createPositionalPseudo(function( matchIndexes, length ) {
2128			var i = 0;
2129			for ( ; i < length; i += 2 ) {
2130				matchIndexes.push( i );
2131			}
2132			return matchIndexes;
2133		}),
2134
2135		"odd": createPositionalPseudo(function( matchIndexes, length ) {
2136			var i = 1;
2137			for ( ; i < length; i += 2 ) {
2138				matchIndexes.push( i );
2139			}
2140			return matchIndexes;
2141		}),
2142
2143		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2144			var i = argument < 0 ? argument + length : argument;
2145			for ( ; --i >= 0; ) {
2146				matchIndexes.push( i );
2147			}
2148			return matchIndexes;
2149		}),
2150
2151		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2152			var i = argument < 0 ? argument + length : argument;
2153			for ( ; ++i < length; ) {
2154				matchIndexes.push( i );
2155			}
2156			return matchIndexes;
2157		})
2158	}
2159};
2160
2161Expr.pseudos["nth"] = Expr.pseudos["eq"];
2162
2163// Add button/input type pseudos
2164for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2165	Expr.pseudos[ i ] = createInputPseudo( i );
2166}
2167for ( i in { submit: true, reset: true } ) {
2168	Expr.pseudos[ i ] = createButtonPseudo( i );
2169}
2170
2171// Easy API for creating new setFilters
2172function setFilters() {}
2173setFilters.prototype = Expr.filters = Expr.pseudos;
2174Expr.setFilters = new setFilters();
2175
2176tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2177	var matched, match, tokens, type,
2178		soFar, groups, preFilters,
2179		cached = tokenCache[ selector + " " ];
2180
2181	if ( cached ) {
2182		return parseOnly ? 0 : cached.slice( 0 );
2183	}
2184
2185	soFar = selector;
2186	groups = [];
2187	preFilters = Expr.preFilter;
2188
2189	while ( soFar ) {
2190
2191		// Comma and first run
2192		if ( !matched || (match = rcomma.exec( soFar )) ) {
2193			if ( match ) {
2194				// Don't consume trailing commas as valid
2195				soFar = soFar.slice( match[0].length ) || soFar;
2196			}
2197			groups.push( (tokens = []) );
2198		}
2199
2200		matched = false;
2201
2202		// Combinators
2203		if ( (match = rcombinators.exec( soFar )) ) {
2204			matched = match.shift();
2205			tokens.push({
2206				value: matched,
2207				// Cast descendant combinators to space
2208				type: match[0].replace( rtrim, " " )
2209			});
2210			soFar = soFar.slice( matched.length );
2211		}
2212
2213		// Filters
2214		for ( type in Expr.filter ) {
2215			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
2216				(match = preFilters[ type ]( match ))) ) {
2217				matched = match.shift();
2218				tokens.push({
2219					value: matched,
2220					type: type,
2221					matches: match
2222				});
2223				soFar = soFar.slice( matched.length );
2224			}
2225		}
2226
2227		if ( !matched ) {
2228			break;
2229		}
2230	}
2231
2232	// Return the length of the invalid excess
2233	// if we're just parsing
2234	// Otherwise, throw an error or return tokens
2235	return parseOnly ?
2236		soFar.length :
2237		soFar ?
2238			Sizzle.error( selector ) :
2239			// Cache the tokens
2240			tokenCache( selector, groups ).slice( 0 );
2241};
2242
2243function toSelector( tokens ) {
2244	var i = 0,
2245		len = tokens.length,
2246		selector = "";
2247	for ( ; i < len; i++ ) {
2248		selector += tokens[i].value;
2249	}
2250	return selector;
2251}
2252
2253function addCombinator( matcher, combinator, base ) {
2254	var dir = combinator.dir,
2255		skip = combinator.next,
2256		key = skip || dir,
2257		checkNonElements = base && key === "parentNode",
2258		doneName = done++;
2259
2260	return combinator.first ?
2261		// Check against closest ancestor/preceding element
2262		function( elem, context, xml ) {
2263			while ( (elem = elem[ dir ]) ) {
2264				if ( elem.nodeType === 1 || checkNonElements ) {
2265					return matcher( elem, context, xml );
2266				}
2267			}
2268			return false;
2269		} :
2270
2271		// Check against all ancestor/preceding elements
2272		function( elem, context, xml ) {
2273			var oldCache, uniqueCache, outerCache,
2274				newCache = [ dirruns, doneName ];
2275
2276			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
2277			if ( xml ) {
2278				while ( (elem = elem[ dir ]) ) {
2279					if ( elem.nodeType === 1 || checkNonElements ) {
2280						if ( matcher( elem, context, xml ) ) {
2281							return true;
2282						}
2283					}
2284				}
2285			} else {
2286				while ( (elem = elem[ dir ]) ) {
2287					if ( elem.nodeType === 1 || checkNonElements ) {
2288						outerCache = elem[ expando ] || (elem[ expando ] = {});
2289
2290						// Support: IE <9 only
2291						// Defend against cloned attroperties (jQuery gh-1709)
2292						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
2293
2294						if ( skip && skip === elem.nodeName.toLowerCase() ) {
2295							elem = elem[ dir ] || elem;
2296						} else if ( (oldCache = uniqueCache[ key ]) &&
2297							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2298
2299							// Assign to newCache so results back-propagate to previous elements
2300							return (newCache[ 2 ] = oldCache[ 2 ]);
2301						} else {
2302							// Reuse newcache so results back-propagate to previous elements
2303							uniqueCache[ key ] = newCache;
2304
2305							// A match means we're done; a fail means we have to keep checking
2306							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
2307								return true;
2308							}
2309						}
2310					}
2311				}
2312			}
2313			return false;
2314		};
2315}
2316
2317function elementMatcher( matchers ) {
2318	return matchers.length > 1 ?
2319		function( elem, context, xml ) {
2320			var i = matchers.length;
2321			while ( i-- ) {
2322				if ( !matchers[i]( elem, context, xml ) ) {
2323					return false;
2324				}
2325			}
2326			return true;
2327		} :
2328		matchers[0];
2329}
2330
2331function multipleContexts( selector, contexts, results ) {
2332	var i = 0,
2333		len = contexts.length;
2334	for ( ; i < len; i++ ) {
2335		Sizzle( selector, contexts[i], results );
2336	}
2337	return results;
2338}
2339
2340function condense( unmatched, map, filter, context, xml ) {
2341	var elem,
2342		newUnmatched = [],
2343		i = 0,
2344		len = unmatched.length,
2345		mapped = map != null;
2346
2347	for ( ; i < len; i++ ) {
2348		if ( (elem = unmatched[i]) ) {
2349			if ( !filter || filter( elem, context, xml ) ) {
2350				newUnmatched.push( elem );
2351				if ( mapped ) {
2352					map.push( i );
2353				}
2354			}
2355		}
2356	}
2357
2358	return newUnmatched;
2359}
2360
2361function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
2362	if ( postFilter && !postFilter[ expando ] ) {
2363		postFilter = setMatcher( postFilter );
2364	}
2365	if ( postFinder && !postFinder[ expando ] ) {
2366		postFinder = setMatcher( postFinder, postSelector );
2367	}
2368	return markFunction(function( seed, results, context, xml ) {
2369		var temp, i, elem,
2370			preMap = [],
2371			postMap = [],
2372			preexisting = results.length,
2373
2374			// Get initial elements from seed or context
2375			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
2376
2377			// Prefilter to get matcher input, preserving a map for seed-results synchronization
2378			matcherIn = preFilter && ( seed || !selector ) ?
2379				condense( elems, preMap, preFilter, context, xml ) :
2380				elems,
2381
2382			matcherOut = matcher ?
2383				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2384				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2385
2386					// ...intermediate processing is necessary
2387					[] :
2388
2389					// ...otherwise use results directly
2390					results :
2391				matcherIn;
2392
2393		// Find primary matches
2394		if ( matcher ) {
2395			matcher( matcherIn, matcherOut, context, xml );
2396		}
2397
2398		// Apply postFilter
2399		if ( postFilter ) {
2400			temp = condense( matcherOut, postMap );
2401			postFilter( temp, [], context, xml );
2402
2403			// Un-match failing elements by moving them back to matcherIn
2404			i = temp.length;
2405			while ( i-- ) {
2406				if ( (elem = temp[i]) ) {
2407					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
2408				}
2409			}
2410		}
2411
2412		if ( seed ) {
2413			if ( postFinder || preFilter ) {
2414				if ( postFinder ) {
2415					// Get the final matcherOut by condensing this intermediate into postFinder contexts
2416					temp = [];
2417					i = matcherOut.length;
2418					while ( i-- ) {
2419						if ( (elem = matcherOut[i]) ) {
2420							// Restore matcherIn since elem is not yet a final match
2421							temp.push( (matcherIn[i] = elem) );
2422						}
2423					}
2424					postFinder( null, (matcherOut = []), temp, xml );
2425				}
2426
2427				// Move matched elements from seed to results to keep them synchronized
2428				i = matcherOut.length;
2429				while ( i-- ) {
2430					if ( (elem = matcherOut[i]) &&
2431						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
2432
2433						seed[temp] = !(results[temp] = elem);
2434					}
2435				}
2436			}
2437
2438		// Add elements to results, through postFinder if defined
2439		} else {
2440			matcherOut = condense(
2441				matcherOut === results ?
2442					matcherOut.splice( preexisting, matcherOut.length ) :
2443					matcherOut
2444			);
2445			if ( postFinder ) {
2446				postFinder( null, results, matcherOut, xml );
2447			} else {
2448				push.apply( results, matcherOut );
2449			}
2450		}
2451	});
2452}
2453
2454function matcherFromTokens( tokens ) {
2455	var checkContext, matcher, j,
2456		len = tokens.length,
2457		leadingRelative = Expr.relative[ tokens[0].type ],
2458		implicitRelative = leadingRelative || Expr.relative[" "],
2459		i = leadingRelative ? 1 : 0,
2460
2461		// The foundational matcher ensures that elements are reachable from top-level context(s)
2462		matchContext = addCombinator( function( elem ) {
2463			return elem === checkContext;
2464		}, implicitRelative, true ),
2465		matchAnyContext = addCombinator( function( elem ) {
2466			return indexOf( checkContext, elem ) > -1;
2467		}, implicitRelative, true ),
2468		matchers = [ function( elem, context, xml ) {
2469			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2470				(checkContext = context).nodeType ?
2471					matchContext( elem, context, xml ) :
2472					matchAnyContext( elem, context, xml ) );
2473			// Avoid hanging onto element (issue #299)
2474			checkContext = null;
2475			return ret;
2476		} ];
2477
2478	for ( ; i < len; i++ ) {
2479		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
2480			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
2481		} else {
2482			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
2483
2484			// Return special upon seeing a positional matcher
2485			if ( matcher[ expando ] ) {
2486				// Find the next relative operator (if any) for proper handling
2487				j = ++i;
2488				for ( ; j < len; j++ ) {
2489					if ( Expr.relative[ tokens[j].type ] ) {
2490						break;
2491					}
2492				}
2493				return setMatcher(
2494					i > 1 && elementMatcher( matchers ),
2495					i > 1 && toSelector(
2496						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
2497						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
2498					).replace( rtrim, "$1" ),
2499					matcher,
2500					i < j && matcherFromTokens( tokens.slice( i, j ) ),
2501					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
2502					j < len && toSelector( tokens )
2503				);
2504			}
2505			matchers.push( matcher );
2506		}
2507	}
2508
2509	return elementMatcher( matchers );
2510}
2511
2512function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2513	var bySet = setMatchers.length > 0,
2514		byElement = elementMatchers.length > 0,
2515		superMatcher = function( seed, context, xml, results, outermost ) {
2516			var elem, j, matcher,
2517				matchedCount = 0,
2518				i = "0",
2519				unmatched = seed && [],
2520				setMatched = [],
2521				contextBackup = outermostContext,
2522				// We must always have either seed elements or outermost context
2523				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
2524				// Use integer dirruns iff this is the outermost matcher
2525				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
2526				len = elems.length;
2527
2528			if ( outermost ) {
2529				outermostContext = context === document || context || outermost;
2530			}
2531
2532			// Add elements passing elementMatchers directly to results
2533			// Support: IE<9, Safari
2534			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2535			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
2536				if ( byElement && elem ) {
2537					j = 0;
2538					if ( !context && elem.ownerDocument !== document ) {
2539						setDocument( elem );
2540						xml = !documentIsHTML;
2541					}
2542					while ( (matcher = elementMatchers[j++]) ) {
2543						if ( matcher( elem, context || document, xml) ) {
2544							results.push( elem );
2545							break;
2546						}
2547					}
2548					if ( outermost ) {
2549						dirruns = dirrunsUnique;
2550					}
2551				}
2552
2553				// Track unmatched elements for set filters
2554				if ( bySet ) {
2555					// They will have gone through all possible matchers
2556					if ( (elem = !matcher && elem) ) {
2557						matchedCount--;
2558					}
2559
2560					// Lengthen the array for every element, matched or not
2561					if ( seed ) {
2562						unmatched.push( elem );
2563					}
2564				}
2565			}
2566
2567			// `i` is now the count of elements visited above, and adding it to `matchedCount`
2568			// makes the latter nonnegative.
2569			matchedCount += i;
2570
2571			// Apply set filters to unmatched elements
2572			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
2573			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
2574			// no element matchers and no seed.
2575			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
2576			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
2577			// numerically zero.
2578			if ( bySet && i !== matchedCount ) {
2579				j = 0;
2580				while ( (matcher = setMatchers[j++]) ) {
2581					matcher( unmatched, setMatched, context, xml );
2582				}
2583
2584				if ( seed ) {
2585					// Reintegrate element matches to eliminate the need for sorting
2586					if ( matchedCount > 0 ) {
2587						while ( i-- ) {
2588							if ( !(unmatched[i] || setMatched[i]) ) {
2589								setMatched[i] = pop.call( results );
2590							}
2591						}
2592					}
2593
2594					// Discard index placeholder values to get only actual matches
2595					setMatched = condense( setMatched );
2596				}
2597
2598				// Add matches to results
2599				push.apply( results, setMatched );
2600
2601				// Seedless set matches succeeding multiple successful matchers stipulate sorting
2602				if ( outermost && !seed && setMatched.length > 0 &&
2603					( matchedCount + setMatchers.length ) > 1 ) {
2604
2605					Sizzle.uniqueSort( results );
2606				}
2607			}
2608
2609			// Override manipulation of globals by nested matchers
2610			if ( outermost ) {
2611				dirruns = dirrunsUnique;
2612				outermostContext = contextBackup;
2613			}
2614
2615			return unmatched;
2616		};
2617
2618	return bySet ?
2619		markFunction( superMatcher ) :
2620		superMatcher;
2621}
2622
2623compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2624	var i,
2625		setMatchers = [],
2626		elementMatchers = [],
2627		cached = compilerCache[ selector + " " ];
2628
2629	if ( !cached ) {
2630		// Generate a function of recursive functions that can be used to check each element
2631		if ( !match ) {
2632			match = tokenize( selector );
2633		}
2634		i = match.length;
2635		while ( i-- ) {
2636			cached = matcherFromTokens( match[i] );
2637			if ( cached[ expando ] ) {
2638				setMatchers.push( cached );
2639			} else {
2640				elementMatchers.push( cached );
2641			}
2642		}
2643
2644		// Cache the compiled function
2645		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
2646
2647		// Save selector and tokenization
2648		cached.selector = selector;
2649	}
2650	return cached;
2651};
2652
2653/**
2654 * A low-level selection function that works with Sizzle's compiled
2655 *  selector functions
2656 * @param {String|Function} selector A selector or a pre-compiled
2657 *  selector function built with Sizzle.compile
2658 * @param {Element} context
2659 * @param {Array} [results]
2660 * @param {Array} [seed] A set of elements to match against
2661 */
2662select = Sizzle.select = function( selector, context, results, seed ) {
2663	var i, tokens, token, type, find,
2664		compiled = typeof selector === "function" && selector,
2665		match = !seed && tokenize( (selector = compiled.selector || selector) );
2666
2667	results = results || [];
2668
2669	// Try to minimize operations if there is only one selector in the list and no seed
2670	// (the latter of which guarantees us context)
2671	if ( match.length === 1 ) {
2672
2673		// Reduce context if the leading compound selector is an ID
2674		tokens = match[0] = match[0].slice( 0 );
2675		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
2676				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
2677
2678			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
2679			if ( !context ) {
2680				return results;
2681
2682			// Precompiled matchers will still verify ancestry, so step up a level
2683			} else if ( compiled ) {
2684				context = context.parentNode;
2685			}
2686
2687			selector = selector.slice( tokens.shift().value.length );
2688		}
2689
2690		// Fetch a seed set for right-to-left matching
2691		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
2692		while ( i-- ) {
2693			token = tokens[i];
2694
2695			// Abort if we hit a combinator
2696			if ( Expr.relative[ (type = token.type) ] ) {
2697				break;
2698			}
2699			if ( (find = Expr.find[ type ]) ) {
2700				// Search, expanding context for leading sibling combinators
2701				if ( (seed = find(
2702					token.matches[0].replace( runescape, funescape ),
2703					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
2704				)) ) {
2705
2706					// If seed is empty or no tokens remain, we can return early
2707					tokens.splice( i, 1 );
2708					selector = seed.length && toSelector( tokens );
2709					if ( !selector ) {
2710						push.apply( results, seed );
2711						return results;
2712					}
2713
2714					break;
2715				}
2716			}
2717		}
2718	}
2719
2720	// Compile and execute a filtering function if one is not provided
2721	// Provide `match` to avoid retokenization if we modified the selector above
2722	( compiled || compile( selector, match ) )(
2723		seed,
2724		context,
2725		!documentIsHTML,
2726		results,
2727		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
2728	);
2729	return results;
2730};
2731
2732// One-time assignments
2733
2734// Sort stability
2735support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
2736
2737// Support: Chrome 14-35+
2738// Always assume duplicates if they aren't passed to the comparison function
2739support.detectDuplicates = !!hasDuplicate;
2740
2741// Initialize against the default document
2742setDocument();
2743
2744// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2745// Detached nodes confoundingly follow *each other*
2746support.sortDetached = assert(function( el ) {
2747	// Should return 1, but returns 4 (following)
2748	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
2749});
2750
2751// Support: IE<8
2752// Prevent attribute/property "interpolation"
2753// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2754if ( !assert(function( el ) {
2755	el.innerHTML = "<a href='#'></a>";
2756	return el.firstChild.getAttribute("href") === "#" ;
2757}) ) {
2758	addHandle( "type|href|height|width", function( elem, name, isXML ) {
2759		if ( !isXML ) {
2760			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2761		}
2762	});
2763}
2764
2765// Support: IE<9
2766// Use defaultValue in place of getAttribute("value")
2767if ( !support.attributes || !assert(function( el ) {
2768	el.innerHTML = "<input/>";
2769	el.firstChild.setAttribute( "value", "" );
2770	return el.firstChild.getAttribute( "value" ) === "";
2771}) ) {
2772	addHandle( "value", function( elem, name, isXML ) {
2773		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2774			return elem.defaultValue;
2775		}
2776	});
2777}
2778
2779// Support: IE<9
2780// Use getAttributeNode to fetch booleans when getAttribute lies
2781if ( !assert(function( el ) {
2782	return el.getAttribute("disabled") == null;
2783}) ) {
2784	addHandle( booleans, function( elem, name, isXML ) {
2785		var val;
2786		if ( !isXML ) {
2787			return elem[ name ] === true ? name.toLowerCase() :
2788					(val = elem.getAttributeNode( name )) && val.specified ?
2789					val.value :
2790				null;
2791		}
2792	});
2793}
2794
2795return Sizzle;
2796
2797})( window );
2798
2799
2800
2801jQuery.find = Sizzle;
2802jQuery.expr = Sizzle.selectors;
2803
2804// Deprecated
2805jQuery.expr[ ":" ] = jQuery.expr.pseudos;
2806jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
2807jQuery.text = Sizzle.getText;
2808jQuery.isXMLDoc = Sizzle.isXML;
2809jQuery.contains = Sizzle.contains;
2810jQuery.escapeSelector = Sizzle.escape;
2811
2812
2813
2814
2815var dir = function( elem, dir, until ) {
2816	var matched = [],
2817		truncate = until !== undefined;
2818
2819	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
2820		if ( elem.nodeType === 1 ) {
2821			if ( truncate && jQuery( elem ).is( until ) ) {
2822				break;
2823			}
2824			matched.push( elem );
2825		}
2826	}
2827	return matched;
2828};
2829
2830
2831var siblings = function( n, elem ) {
2832	var matched = [];
2833
2834	for ( ; n; n = n.nextSibling ) {
2835		if ( n.nodeType === 1 && n !== elem ) {
2836			matched.push( n );
2837		}
2838	}
2839
2840	return matched;
2841};
2842
2843
2844var rneedsContext = jQuery.expr.match.needsContext;
2845
2846var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
2847
2848
2849
2850var risSimple = /^.[^:#\[\.,]*$/;
2851
2852// Implement the identical functionality for filter and not
2853function winnow( elements, qualifier, not ) {
2854	if ( jQuery.isFunction( qualifier ) ) {
2855		return jQuery.grep( elements, function( elem, i ) {
2856			return !!qualifier.call( elem, i, elem ) !== not;
2857		} );
2858	}
2859
2860	// Single element
2861	if ( qualifier.nodeType ) {
2862		return jQuery.grep( elements, function( elem ) {
2863			return ( elem === qualifier ) !== not;
2864		} );
2865	}
2866
2867	// Arraylike of elements (jQuery, arguments, Array)
2868	if ( typeof qualifier !== "string" ) {
2869		return jQuery.grep( elements, function( elem ) {
2870			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
2871		} );
2872	}
2873
2874	// Simple selector that can be filtered directly, removing non-Elements
2875	if ( risSimple.test( qualifier ) ) {
2876		return jQuery.filter( qualifier, elements, not );
2877	}
2878
2879	// Complex selector, compare the two sets, removing non-Elements
2880	qualifier = jQuery.filter( qualifier, elements );
2881	return jQuery.grep( elements, function( elem ) {
2882		return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
2883	} );
2884}
2885
2886jQuery.filter = function( expr, elems, not ) {
2887	var elem = elems[ 0 ];
2888
2889	if ( not ) {
2890		expr = ":not(" + expr + ")";
2891	}
2892
2893	if ( elems.length === 1 && elem.nodeType === 1 ) {
2894		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
2895	}
2896
2897	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
2898		return elem.nodeType === 1;
vendor: 8,116 bytes, lines 2899-3227
2899	} ) );
2900};
2901
2902jQuery.fn.extend( {
2903	find: function( selector ) {
2904		var i, ret,
2905			len = this.length,
2906			self = this;
2907
2908		if ( typeof selector !== "string" ) {
2909			return this.pushStack( jQuery( selector ).filter( function() {
2910				for ( i = 0; i < len; i++ ) {
2911					if ( jQuery.contains( self[ i ], this ) ) {
2912						return true;
2913					}
2914				}
2915			} ) );
2916		}
2917
2918		ret = this.pushStack( [] );
2919
2920		for ( i = 0; i < len; i++ ) {
2921			jQuery.find( selector, self[ i ], ret );
2922		}
2923
2924		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
2925	},
2926	filter: function( selector ) {
2927		return this.pushStack( winnow( this, selector || [], false ) );
2928	},
2929	not: function( selector ) {
2930		return this.pushStack( winnow( this, selector || [], true ) );
2931	},
2932	is: function( selector ) {
2933		return !!winnow(
2934			this,
2935
2936			// If this is a positional/relative selector, check membership in the returned set
2937			// so $("p:first").is("p:last") won't return true for a doc with two "p".
2938			typeof selector === "string" && rneedsContext.test( selector ) ?
2939				jQuery( selector ) :
2940				selector || [],
2941			false
2942		).length;
2943	}
2944} );
2945
2946
2947// Initialize a jQuery object
2948
2949
2950// A central reference to the root jQuery(document)
2951var rootjQuery,
2952
2953	// A simple way to check for HTML strings
2954	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
2955	// Strict HTML recognition (#11290: must start with <)
2956	// Shortcut simple #id case for speed
2957	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
2958
2959	init = jQuery.fn.init = function( selector, context, root ) {
2960		var match, elem;
2961
2962		// HANDLE: $(""), $(null), $(undefined), $(false)
2963		if ( !selector ) {
2964			return this;
2965		}
2966
2967		// Method init() accepts an alternate rootjQuery
2968		// so migrate can support jQuery.sub (gh-2101)
2969		root = root || rootjQuery;
2970
2971		// Handle HTML strings
2972		if ( typeof selector === "string" ) {
2973			if ( selector[ 0 ] === "<" &&
2974				selector[ selector.length - 1 ] === ">" &&
2975				selector.length >= 3 ) {
2976
2977				// Assume that strings that start and end with <> are HTML and skip the regex check
2978				match = [ null, selector, null ];
2979
2980			} else {
2981				match = rquickExpr.exec( selector );
2982			}
2983
2984			// Match html or make sure no context is specified for #id
2985			if ( match && ( match[ 1 ] || !context ) ) {
2986
2987				// HANDLE: $(html) -> $(array)
2988				if ( match[ 1 ] ) {
2989					context = context instanceof jQuery ? context[ 0 ] : context;
2990
2991					// Option to run scripts is true for back-compat
2992					// Intentionally let the error be thrown if parseHTML is not present
2993					jQuery.merge( this, jQuery.parseHTML(
2994						match[ 1 ],
2995						context && context.nodeType ? context.ownerDocument || context : document,
2996						true
2997					) );
2998
2999					// HANDLE: $(html, props)
3000					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
3001						for ( match in context ) {
3002
3003							// Properties of context are called as methods if possible
3004							if ( jQuery.isFunction( this[ match ] ) ) {
3005								this[ match ]( context[ match ] );
3006
3007							// ...and otherwise set as attributes
3008							} else {
3009								this.attr( match, context[ match ] );
3010							}
3011						}
3012					}
3013
3014					return this;
3015
3016				// HANDLE: $(#id)
3017				} else {
3018					elem = document.getElementById( match[ 2 ] );
3019
3020					if ( elem ) {
3021
3022						// Inject the element directly into the jQuery object
3023						this[ 0 ] = elem;
3024						this.length = 1;
3025					}
3026					return this;
3027				}
3028
3029			// HANDLE: $(expr, $(...))
3030			} else if ( !context || context.jquery ) {
3031				return ( context || root ).find( selector );
3032
3033			// HANDLE: $(expr, context)
3034			// (which is just equivalent to: $(context).find(expr)
3035			} else {
3036				return this.constructor( context ).find( selector );
3037			}
3038
3039		// HANDLE: $(DOMElement)
3040		} else if ( selector.nodeType ) {
3041			this[ 0 ] = selector;
3042			this.length = 1;
3043			return this;
3044
3045		// HANDLE: $(function)
3046		// Shortcut for document ready
3047		} else if ( jQuery.isFunction( selector ) ) {
3048			return root.ready !== undefined ?
3049				root.ready( selector ) :
3050
3051				// Execute immediately if ready is not present
3052				selector( jQuery );
3053		}
3054
3055		return jQuery.makeArray( selector, this );
3056	};
3057
3058// Give the init function the jQuery prototype for later instantiation
3059init.prototype = jQuery.fn;
3060
3061// Initialize central reference
3062rootjQuery = jQuery( document );
3063
3064
3065var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3066
3067	// Methods guaranteed to produce a unique set when starting from a unique set
3068	guaranteedUnique = {
3069		children: true,
3070		contents: true,
3071		next: true,
3072		prev: true
3073	};
3074
3075jQuery.fn.extend( {
3076	has: function( target ) {
3077		var targets = jQuery( target, this ),
3078			l = targets.length;
3079
3080		return this.filter( function() {
3081			var i = 0;
3082			for ( ; i < l; i++ ) {
3083				if ( jQuery.contains( this, targets[ i ] ) ) {
3084					return true;
3085				}
3086			}
3087		} );
3088	},
3089
3090	closest: function( selectors, context ) {
3091		var cur,
3092			i = 0,
3093			l = this.length,
3094			matched = [],
3095			targets = typeof selectors !== "string" && jQuery( selectors );
3096
3097		// Positional selectors never match, since there's no _selection_ context
3098		if ( !rneedsContext.test( selectors ) ) {
3099			for ( ; i < l; i++ ) {
3100				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
3101
3102					// Always skip document fragments
3103					if ( cur.nodeType < 11 && ( targets ?
3104						targets.index( cur ) > -1 :
3105
3106						// Don't pass non-elements to Sizzle
3107						cur.nodeType === 1 &&
3108							jQuery.find.matchesSelector( cur, selectors ) ) ) {
3109
3110						matched.push( cur );
3111						break;
3112					}
3113				}
3114			}
3115		}
3116
3117		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
3118	},
3119
3120	// Determine the position of an element within the set
3121	index: function( elem ) {
3122
3123		// No argument, return index in parent
3124		if ( !elem ) {
3125			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
3126		}
3127
3128		// Index in selector
3129		if ( typeof elem === "string" ) {
3130			return indexOf.call( jQuery( elem ), this[ 0 ] );
3131		}
3132
3133		// Locate the position of the desired element
3134		return indexOf.call( this,
3135
3136			// If it receives a jQuery object, the first element is used
3137			elem.jquery ? elem[ 0 ] : elem
3138		);
3139	},
3140
3141	add: function( selector, context ) {
3142		return this.pushStack(
3143			jQuery.uniqueSort(
3144				jQuery.merge( this.get(), jQuery( selector, context ) )
3145			)
3146		);
3147	},
3148
3149	addBack: function( selector ) {
3150		return this.add( selector == null ?
3151			this.prevObject : this.prevObject.filter( selector )
3152		);
3153	}
3154} );
3155
3156function sibling( cur, dir ) {
3157	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
3158	return cur;
3159}
3160
3161jQuery.each( {
3162	parent: function( elem ) {
3163		var parent = elem.parentNode;
3164		return parent && parent.nodeType !== 11 ? parent : null;
3165	},
3166	parents: function( elem ) {
3167		return dir( elem, "parentNode" );
3168	},
3169	parentsUntil: function( elem, i, until ) {
3170		return dir( elem, "parentNode", until );
3171	},
3172	next: function( elem ) {
3173		return sibling( elem, "nextSibling" );
3174	},
3175	prev: function( elem ) {
3176		return sibling( elem, "previousSibling" );
3177	},
3178	nextAll: function( elem ) {
3179		return dir( elem, "nextSibling" );
3180	},
3181	prevAll: function( elem ) {
3182		return dir( elem, "previousSibling" );
3183	},
3184	nextUntil: function( elem, i, until ) {
3185		return dir( elem, "nextSibling", until );
3186	},
3187	prevUntil: function( elem, i, until ) {
3188		return dir( elem, "previousSibling", until );
3189	},
3190	siblings: function( elem ) {
3191		return siblings( ( elem.parentNode || {} ).firstChild, elem );
3192	},
3193	children: function( elem ) {
3194		return siblings( elem.firstChild );
3195	},
3196	contents: function( elem ) {
3197		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
3198	}
3199}, function( name, fn ) {
3200	jQuery.fn[ name ] = function( until, selector ) {
3201		var matched = jQuery.map( this, fn, until );
3202
3203		if ( name.slice( -5 ) !== "Until" ) {
3204			selector = until;
3205		}
3206
3207		if ( selector && typeof selector === "string" ) {
3208			matched = jQuery.filter( selector, matched );
3209		}
3210
3211		if ( this.length > 1 ) {
3212
3213			// Remove duplicates
3214			if ( !guaranteedUnique[ name ] ) {
3215				jQuery.uniqueSort( matched );
3216			}
3217
3218			// Reverse order for parents* and prev-derivatives
3219			if ( rparentsprev.test( name ) ) {
3220				matched.reverse();
3221			}
3222		}
3223
3224		return this.pushStack( matched );
3225	};
3226} );
3227var rnot
vendor: 6,300 bytes, lines 3227-3488
3227htmlwhite = ( /[^\x20\t\r\n\f]+/g );
3228
3229
3230
3231// Convert String-formatted options into Object-formatted ones
3232function createOptions( options ) {
3233	var object = {};
3234	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
3235		object[ flag ] = true;
3236	} );
3237	return object;
3238}
3239
3240/*
3241 * Create a callback list using the following parameters:
3242 *
3243 *	options: an optional list of space-separated options that will change how
3244 *			the callback list behaves or a more traditional option object
3245 *
3246 * By default a callback list will act like an event callback list and can be
3247 * "fired" multiple times.
3248 *
3249 * Possible options:
3250 *
3251 *	once:			will ensure the callback list can only be fired once (like a Deferred)
3252 *
3253 *	memory:			will keep track of previous values and will call any callback added
3254 *					after the list has been fired right away with the latest "memorized"
3255 *					values (like a Deferred)
3256 *
3257 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
3258 *
3259 *	stopOnFalse:	interrupt callings when a callback returns false
3260 *
3261 */
3262jQuery.Callbacks = function( options ) {
3263
3264	// Convert options from String-formatted to Object-formatted if needed
3265	// (we check in cache first)
3266	options = typeof options === "string" ?
3267		createOptions( options ) :
3268		jQuery.extend( {}, options );
3269
3270	var // Flag to know if list is currently firing
3271		firing,
3272
3273		// Last fire value for non-forgettable lists
3274		memory,
3275
3276		// Flag to know if list was already fired
3277		fired,
3278
3279		// Flag to prevent firing
3280		locked,
3281
3282		// Actual callback list
3283		list = [],
3284
3285		// Queue of execution data for repeatable lists
3286		queue = [],
3287
3288		// Index of currently firing callback (modified by add/remove as needed)
3289		firingIndex = -1,
3290
3291		// Fire callbacks
3292		fire = function() {
3293
3294			// Enforce single-firing
3295			locked = options.once;
3296
3297			// Execute callbacks for all pending executions,
3298			// respecting firingIndex overrides and runtime changes
3299			fired = firing = true;
3300			for ( ; queue.length; firingIndex = -1 ) {
3301				memory = queue.shift();
3302				while ( ++firingIndex < list.length ) {
3303
3304					// Run callback and check for early termination
3305					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
3306						options.stopOnFalse ) {
3307
3308						// Jump to end and forget the data so .add doesn't re-fire
3309						firingIndex = list.length;
3310						memory = false;
3311					}
3312				}
3313			}
3314
3315			// Forget the data if we're done with it
3316			if ( !options.memory ) {
3317				memory = false;
3318			}
3319
3320			firing = false;
3321
3322			// Clean up if we're done firing for good
3323			if ( locked ) {
3324
3325				// Keep an empty list if we have data for future add calls
3326				if ( memory ) {
3327					list = [];
3328
3329				// Otherwise, this object is spent
3330				} else {
3331					list = "";
3332				}
3333			}
3334		},
3335
3336		// Actual Callbacks object
3337		self = {
3338
3339			// Add a callback or a collection of callbacks to the list
3340			add: function() {
3341				if ( list ) {
3342
3343					// If we have memory from a past run, we should fire after adding
3344					if ( memory && !firing ) {
3345						firingIndex = list.length - 1;
3346						queue.push( memory );
3347					}
3348
3349					( function add( args ) {
3350						jQuery.each( args, function( _, arg ) {
3351							if ( jQuery.isFunction( arg ) ) {
3352								if ( !options.unique || !self.has( arg ) ) {
3353									list.push( arg );
3354								}
3355							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
3356
3357								// Inspect recursively
3358								add( arg );
3359							}
3360						} );
3361					} )( arguments );
3362
3363					if ( memory && !firing ) {
3364						fire();
3365					}
3366				}
3367				return this;
3368			},
3369
3370			// Remove a callback from the list
3371			remove: function() {
3372				jQuery.each( arguments, function( _, arg ) {
3373					var index;
3374					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
3375						list.splice( index, 1 );
3376
3377						// Handle firing indexes
3378						if ( index <= firingIndex ) {
3379							firingIndex--;
3380						}
3381					}
3382				} );
3383				return this;
3384			},
3385
3386			// Check if a given callback is in the list.
3387			// If no argument is given, return whether or not list has callbacks attached.
3388			has: function( fn ) {
3389				return fn ?
3390					jQuery.inArray( fn, list ) > -1 :
3391					list.length > 0;
3392			},
3393
3394			// Remove all callbacks from the list
3395			empty: function() {
3396				if ( list ) {
3397					list = [];
3398				}
3399				return this;
3400			},
3401
3402			// Disable .fire and .add
3403			// Abort any current/pending executions
3404			// Clear all callbacks and values
3405			disable: function() {
3406				locked = queue = [];
3407				list = memory = "";
3408				return this;
3409			},
3410			disabled: function() {
3411				return !list;
3412			},
3413
3414			// Disable .fire
3415			// Also disable .add unless we have memory (since it would have no effect)
3416			// Abort any pending executions
3417			lock: function() {
3418				locked = queue = [];
3419				if ( !memory && !firing ) {
3420					list = memory = "";
3421				}
3422				return this;
3423			},
3424			locked: function() {
3425				return !!locked;
3426			},
3427
3428			// Call all callbacks with the given context and arguments
3429			fireWith: function( context, args ) {
3430				if ( !locked ) {
3431					args = args || [];
3432					args = [ context, args.slice ? args.slice() : args ];
3433					queue.push( args );
3434					if ( !firing ) {
3435						fire();
3436					}
3437				}
3438				return this;
3439			},
3440
3441			// Call all the callbacks with the given arguments
3442			fire: function() {
3443				self.fireWith( this, arguments );
3444				return this;
3445			},
3446
3447			// To know if the callbacks have already been called at least once
3448			fired: function() {
3449				return !!fired;
3450			}
3451		};
3452
3453	return self;
3454};
3455
3456
3457function Identity( v ) {
3458	return v;
3459}
3460function Thrower( ex ) {
3461	throw ex;
3462}
3463
3464function adoptValue( value, resolve, reject ) {
3465	var method;
3466
3467	try {
3468
3469		// Check for promise aspect first to privilege synchronous behavior
3470		if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
3471			method.call( value ).done( resolve ).fail( reject );
3472
3473		// Other thenables
3474		} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
3475			method.call( value, resolve, reject );
3476
3477		// Other non-thenables
3478		} else {
3479
3480			// Support: Android 4.0 only
3481			// Strict mode functions invoked without .call/.apply get global-object context
3482			resolve.call( undefined, value );
3483		}
3484
3485	// For Promises/A+, convert exceptions into rejections
3486	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
3487	// Deferred#then to conditionally suppress rejection.
3488	} catch (
vendor: 10,289 bytes, lines 3488-3852
3488 value ) {
3489
3490		// Support: Android 4.0 only
3491		// Strict mode functions invoked without .call/.apply get global-object context
3492		reject.call( undefined, value );
3493	}
3494}
3495
3496jQuery.extend( {
3497
3498	Deferred: function( func ) {
3499		var tuples = [
3500
3501				// action, add listener, callbacks,
3502				// ... .then handlers, argument index, [final state]
3503				[ "notify", "progress", jQuery.Callbacks( "memory" ),
3504					jQuery.Callbacks( "memory" ), 2 ],
3505				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
3506					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
3507				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
3508					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
3509			],
3510			state = "pending",
3511			promise = {
3512				state: function() {
3513					return state;
3514				},
3515				always: function() {
3516					deferred.done( arguments ).fail( arguments );
3517					return this;
3518				},
3519				"catch": function( fn ) {
3520					return promise.then( null, fn );
3521				},
3522
3523				// Keep pipe for back-compat
3524				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
3525					var fns = arguments;
3526
3527					return jQuery.Deferred( function( newDefer ) {
3528						jQuery.each( tuples, function( i, tuple ) {
3529
3530							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
3531							var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
3532
3533							// deferred.progress(function() { bind to newDefer or newDefer.notify })
3534							// deferred.done(function() { bind to newDefer or newDefer.resolve })
3535							// deferred.fail(function() { bind to newDefer or newDefer.reject })
3536							deferred[ tuple[ 1 ] ]( function() {
3537								var returned = fn && fn.apply( this, arguments );
3538								if ( returned && jQuery.isFunction( returned.promise ) ) {
3539									returned.promise()
3540										.progress( newDefer.notify )
3541										.done( newDefer.resolve )
3542										.fail( newDefer.reject );
3543								} else {
3544									newDefer[ tuple[ 0 ] + "With" ](
3545										this,
3546										fn ? [ returned ] : arguments
3547									);
3548								}
3549							} );
3550						} );
3551						fns = null;
3552					} ).promise();
3553				},
3554				then: function( onFulfilled, onRejected, onProgress ) {
3555					var maxDepth = 0;
3556					function resolve( depth, deferred, handler, special ) {
3557						return function() {
3558							var that = this,
3559								args = arguments,
3560								mightThrow = function() {
3561									var returned, then;
3562
3563									// Support: Promises/A+ section 2.3.3.3.3
3564									// https://promisesaplus.com/#point-59
3565									// Ignore double-resolution attempts
3566									if ( depth < maxDepth ) {
3567										return;
3568									}
3569
3570									returned = handler.apply( that, args );
3571
3572									// Support: Promises/A+ section 2.3.1
3573									// https://promisesaplus.com/#point-48
3574									if ( returned === deferred.promise() ) {
3575										throw new TypeError( "Thenable self-resolution" );
3576									}
3577
3578									// Support: Promises/A+ sections 2.3.3.1, 3.5
3579									// https://promisesaplus.com/#point-54
3580									// https://promisesaplus.com/#point-75
3581									// Retrieve `then` only once
3582									then = returned &&
3583
3584										// Support: Promises/A+ section 2.3.4
3585										// https://promisesaplus.com/#point-64
3586										// Only check objects and functions for thenability
3587										( typeof returned === "object" ||
3588											typeof returned === "function" ) &&
3589										returned.then;
3590
3591									// Handle a returned thenable
3592									if ( jQuery.isFunction( then ) ) {
3593
3594										// Special processors (notify) just wait for resolution
3595										if ( special ) {
3596											then.call(
3597												returned,
3598												resolve( maxDepth, deferred, Identity, special ),
3599												resolve( maxDepth, deferred, Thrower, special )
3600											);
3601
3602										// Normal processors (resolve) also hook into progress
3603										} else {
3604
3605											// ...and disregard older resolution values
3606											maxDepth++;
3607
3608											then.call(
3609												returned,
3610												resolve( maxDepth, deferred, Identity, special ),
3611												resolve( maxDepth, deferred, Thrower, special ),
3612												resolve( maxDepth, deferred, Identity,
3613													deferred.notifyWith )
3614											);
3615										}
3616
3617									// Handle all other returned values
3618									} else {
3619
3620										// Only substitute handlers pass on context
3621										// and multiple values (non-spec behavior)
3622										if ( handler !== Identity ) {
3623											that = undefined;
3624											args = [ returned ];
3625										}
3626
3627										// Process the value(s)
3628										// Default process is resolve
3629										( special || deferred.resolveWith )( that, args );
3630									}
3631								},
3632
3633								// Only normal processors (resolve) catch and reject exceptions
3634								process = special ?
3635									mightThrow :
3636									function() {
3637										try {
3638											mightThrow();
3639										} catch ( e ) {
3640
3641											if ( jQuery.Deferred.exceptionHook ) {
3642												jQuery.Deferred.exceptionHook( e,
3643													process.stackTrace );
3644											}
3645
3646											// Support: Promises/A+ section 2.3.3.3.4.1
3647											// https://promisesaplus.com/#point-61
3648											// Ignore post-resolution exceptions
3649											if ( depth + 1 >= maxDepth ) {
3650
3651												// Only substitute handlers pass on context
3652												// and multiple values (non-spec behavior)
3653												if ( handler !== Thrower ) {
3654													that = undefined;
3655													args = [ e ];
3656												}
3657
3658												deferred.rejectWith( that, args );
3659											}
3660										}
3661									};
3662
3663							// Support: Promises/A+ section 2.3.3.3.1
3664							// https://promisesaplus.com/#point-57
3665							// Re-resolve promises immediately to dodge false rejection from
3666							// subsequent errors
3667							if ( depth ) {
3668								process();
3669							} else {
3670
3671								// Call an optional hook to record the stack, in case of exception
3672								// since it's otherwise lost when execution goes async
3673								if ( jQuery.Deferred.getStackHook ) {
3674									process.stackTrace = jQuery.Deferred.getStackHook();
3675								}
3676								window.setTimeout( process );
3677							}
3678						};
3679					}
3680
3681					return jQuery.Deferred( function( newDefer ) {
3682
3683						// progress_handlers.add( ... )
3684						tuples[ 0 ][ 3 ].add(
3685							resolve(
3686								0,
3687								newDefer,
3688								jQuery.isFunction( onProgress ) ?
3689									onProgress :
3690									Identity,
3691								newDefer.notifyWith
3692							)
3693						);
3694
3695						// fulfilled_handlers.add( ... )
3696						tuples[ 1 ][ 3 ].add(
3697							resolve(
3698								0,
3699								newDefer,
3700								jQuery.isFunction( onFulfilled ) ?
3701									onFulfilled :
3702									Identity
3703							)
3704						);
3705
3706						// rejected_handlers.add( ... )
3707						tuples[ 2 ][ 3 ].add(
3708							resolve(
3709								0,
3710								newDefer,
3711								jQuery.isFunction( onRejected ) ?
3712									onRejected :
3713									Thrower
3714							)
3715						);
3716					} ).promise();
3717				},
3718
3719				// Get a promise for this deferred
3720				// If obj is provided, the promise aspect is added to the object
3721				promise: function( obj ) {
3722					return obj != null ? jQuery.extend( obj, promise ) : promise;
3723				}
3724			},
3725			deferred = {};
3726
3727		// Add list-specific methods
3728		jQuery.each( tuples, function( i, tuple ) {
3729			var list = tuple[ 2 ],
3730				stateString = tuple[ 5 ];
3731
3732			// promise.progress = list.add
3733			// promise.done = list.add
3734			// promise.fail = list.add
3735			promise[ tuple[ 1 ] ] = list.add;
3736
3737			// Handle state
3738			if ( stateString ) {
3739				list.add(
3740					function() {
3741
3742						// state = "resolved" (i.e., fulfilled)
3743						// state = "rejected"
3744						state = stateString;
3745					},
3746
3747					// rejected_callbacks.disable
3748					// fulfilled_callbacks.disable
3749					tuples[ 3 - i ][ 2 ].disable,
3750
3751					// progress_callbacks.lock
3752					tuples[ 0 ][ 2 ].lock
3753				);
3754			}
3755
3756			// progress_handlers.fire
3757			// fulfilled_handlers.fire
3758			// rejected_handlers.fire
3759			list.add( tuple[ 3 ].fire );
3760
3761			// deferred.notify = function() { deferred.notifyWith(...) }
3762			// deferred.resolve = function() { deferred.resolveWith(...) }
3763			// deferred.reject = function() { deferred.rejectWith(...) }
3764			deferred[ tuple[ 0 ] ] = function() {
3765				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
3766				return this;
3767			};
3768
3769			// deferred.notifyWith = list.fireWith
3770			// deferred.resolveWith = list.fireWith
3771			// deferred.rejectWith = list.fireWith
3772			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
3773		} );
3774
3775		// Make the deferred a promise
3776		promise.promise( deferred );
3777
3778		// Call given func if any
3779		if ( func ) {
3780			func.call( deferred, deferred );
3781		}
3782
3783		// All done!
3784		return deferred;
3785	},
3786
3787	// Deferred helper
3788	when: function( singleValue ) {
3789		var
3790
3791			// count of uncompleted subordinates
3792			remaining = arguments.length,
3793
3794			// count of unprocessed arguments
3795			i = remaining,
3796
3797			// subordinate fulfillment data
3798			resolveContexts = Array( i ),
3799			resolveValues = slice.call( arguments ),
3800
3801			// the master Deferred
3802			master = jQuery.Deferred(),
3803
3804			// subordinate callback factory
3805			updateFunc = function( i ) {
3806				return function( value ) {
3807					resolveContexts[ i ] = this;
3808					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
3809					if ( !( --remaining ) ) {
3810						master.resolveWith( resolveContexts, resolveValues );
3811					}
3812				};
3813			};
3814
3815		// Single- and empty arguments are adopted like Promise.resolve
3816		if ( remaining <= 1 ) {
3817			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
3818
3819			// Use .then() to unwrap secondary thenables (cf. gh-3000)
3820			if ( master.state() === "pending" ||
3821				jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
3822
3823				return master.then();
3824			}
3825		}
3826
3827		// Multiple arguments are aggregated like Promise.all array elements
3828		while ( i-- ) {
3829			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
3830		}
3831
3832		return master.promise();
3833	}
3834} );
3835
3836
3837// These usually indicate a programmer mistake during development,
3838// warn about them ASAP rather than swallowing them by default.
3839var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
3840
3841jQuery.Deferred.exceptionHook = function( error, stack ) {
3842
3843	// Support: IE 8 - 9 only
3844	// Console exists when dev tools are open, which can happen at any time
3845	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
3846		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
3847	}
3848};
3849
3850
3851
3852
vendor: 1,236 bytes, lines 3853-3913
3853jQuery.readyException = function( error ) {
3854	window.setTimeout( function() {
3855		throw error;
3856	} );
3857};
3858
3859
3860
3861
3862// The deferred used on DOM ready
3863var readyList = jQuery.Deferred();
3864
3865jQuery.fn.ready = function( fn ) {
3866
3867	readyList
3868		.then( fn )
3869
3870		// Wrap jQuery.readyException in a function so that the lookup
3871		// happens at the time of error handling instead of callback
3872		// registration.
3873		.catch( function( error ) {
3874			jQuery.readyException( error );
3875		} );
3876
3877	return this;
3878};
3879
3880jQuery.extend( {
3881
3882	// Is the DOM ready to be used? Set to true once it occurs.
3883	isReady: false,
3884
3885	// A counter to track how many items to wait for before
3886	// the ready event fires. See #6781
3887	readyWait: 1,
3888
3889	// Hold (or release) the ready event
3890	holdReady: function( hold ) {
3891		if ( hold ) {
3892			jQuery.readyWait++;
3893		} else {
3894			jQuery.ready( true );
3895		}
3896	},
3897
3898	// Handle when the DOM is ready
3899	ready: function( wait ) {
3900
3901		// Abort if there are pending holds or we're already ready
3902		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
3903			return;
3904		}
3905
3906		// Remember that the DOM is ready
3907		jQuery.isReady = true;
3908
3909		// If a normal DOM Ready event fired, decrement, and wait if need be
3910		if ( wait !== true && --jQuery.readyWait > 0 ) {
3911			return;
3912		}
3913
vendor: 4,098 bytes, lines 3914-4095
3914		// If there are functions bound, to execute
3915		readyList.resolveWith( document, [ jQuery ] );
3916	}
3917} );
3918
3919jQuery.ready.then = readyList.then;
3920
3921// The ready event handler and self cleanup method
3922function completed() {
3923	document.removeEventListener( "DOMContentLoaded", completed );
3924	window.removeEventListener( "load", completed );
3925	jQuery.ready();
3926}
3927
3928// Catch cases where $(document).ready() is called
3929// after the browser event has already occurred.
3930// Support: IE <=9 - 10 only
3931// Older IE sometimes signals "interactive" too soon
3932if ( document.readyState === "complete" ||
3933	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
3934
3935	// Handle it asynchronously to allow scripts the opportunity to delay ready
3936	window.setTimeout( jQuery.ready );
3937
3938} else {
3939
3940	// Use the handy event callback
3941	document.addEventListener( "DOMContentLoaded", completed );
3942
3943	// A fallback to window.onload, that will always work
3944	window.addEventListener( "load", completed );
3945}
3946
3947
3948
3949
3950// Multifunctional method to get and set values of a collection
3951// The value/s can optionally be executed if it's a function
3952var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
3953	var i = 0,
3954		len = elems.length,
3955		bulk = key == null;
3956
3957	// Sets many values
3958	if ( jQuery.type( key ) === "object" ) {
3959		chainable = true;
3960		for ( i in key ) {
3961			access( elems, fn, i, key[ i ], true, emptyGet, raw );
3962		}
3963
3964	// Sets one value
3965	} else if ( value !== undefined ) {
3966		chainable = true;
3967
3968		if ( !jQuery.isFunction( value ) ) {
3969			raw = true;
3970		}
3971
3972		if ( bulk ) {
3973
3974			// Bulk operations run against the entire set
3975			if ( raw ) {
3976				fn.call( elems, value );
3977				fn = null;
3978
3979			// ...except when executing function values
3980			} else {
3981				bulk = fn;
3982				fn = function( elem, key, value ) {
3983					return bulk.call( jQuery( elem ), value );
3984				};
3985			}
3986		}
3987
3988		if ( fn ) {
3989			for ( ; i < len; i++ ) {
3990				fn(
3991					elems[ i ], key, raw ?
3992					value :
3993					value.call( elems[ i ], i, fn( elems[ i ], key ) )
3994				);
3995			}
3996		}
3997	}
3998
3999	if ( chainable ) {
4000		return elems;
4001	}
4002
4003	// Gets
4004	if ( bulk ) {
4005		return fn.call( elems );
4006	}
4007
4008	return len ? fn( elems[ 0 ], key ) : emptyGet;
4009};
4010var acceptData = function( owner ) {
4011
4012	// Accepts only:
4013	//  - Node
4014	//    - Node.ELEMENT_NODE
4015	//    - Node.DOCUMENT_NODE
4016	//  - Object
4017	//    - Any
4018	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
4019};
4020
4021
4022
4023
4024function Data() {
4025	this.expando = jQuery.expando + Data.uid++;
4026}
4027
4028Data.uid = 1;
4029
4030Data.prototype = {
4031
4032	cache: function( owner ) {
4033
4034		// Check if the owner object already has a cache
4035		var value = owner[ this.expando ];
4036
4037		// If not, create one
4038		if ( !value ) {
4039			value = {};
4040
4041			// We can accept data for non-element nodes in modern browsers,
4042			// but we should not, see #8335.
4043			// Always return an empty object.
4044			if ( acceptData( owner ) ) {
4045
4046				// If it is a node unlikely to be stringify-ed or looped over
4047				// use plain assignment
4048				if ( owner.nodeType ) {
4049					owner[ this.expando ] = value;
4050
4051				// Otherwise secure it in a non-enumerable property
4052				// configurable must be true to allow the property to be
4053				// deleted when data is removed
4054				} else {
4055					Object.defineProperty( owner, this.expando, {
4056						value: value,
4057						configurable: true
4058					} );
4059				}
4060			}
4061		}
4062
4063		return value;
4064	},
4065	set: function( owner, data, value ) {
4066		var prop,
4067			cache = this.cache( owner );
4068
4069		// Handle: [ owner, key, value ] args
4070		// Always use camelCase key (gh-2257)
4071		if ( typeof data === "string" ) {
4072			cache[ jQuery.camelCase( data ) ] = value;
4073
4074		// Handle: [ owner, { properties } ] args
4075		} else {
4076
4077			// Copy the properties one-by-one to the cache object
4078			for ( prop in data ) {
4079				cache[ jQuery.camelCase( prop ) ] = data[ prop ];
4080			}
4081		}
4082		return cache;
4083	},
4084	get: function( owner, key ) {
4085		return key === undefined ?
4086			this.cache( owner ) :
4087
4088			// Always use camelCase key (gh-2257)
4089			owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
4090	},
4091	access: function( owner, key, value ) {
4092
4093		// In cases where either:
4094		//
4095		//   1. No key was specified
vendor: 3,472 bytes, lines 4096-4229
4096		//   2. A string key was specified, but no value provided
4097		//
4098		// Take the "read" path and allow the get method to determine
4099		// which value to return, respectively either:
4100		//
4101		//   1. The entire cache object
4102		//   2. The data stored at the key
4103		//
4104		if ( key === undefined ||
4105				( ( key && typeof key === "string" ) && value === undefined ) ) {
4106
4107			return this.get( owner, key );
4108		}
4109
4110		// When the key is not a string, or both a key and value
4111		// are specified, set or extend (existing objects) with either:
4112		//
4113		//   1. An object of properties
4114		//   2. A key and value
4115		//
4116		this.set( owner, key, value );
4117
4118		// Since the "set" path can have two possible entry points
4119		// return the expected data based on which path was taken[*]
4120		return value !== undefined ? value : key;
4121	},
4122	remove: function( owner, key ) {
4123		var i,
4124			cache = owner[ this.expando ];
4125
4126		if ( cache === undefined ) {
4127			return;
4128		}
4129
4130		if ( key !== undefined ) {
4131
4132			// Support array or space separated string of keys
4133			if ( jQuery.isArray( key ) ) {
4134
4135				// If key is an array of keys...
4136				// We always set camelCase keys, so remove that.
4137				key = key.map( jQuery.camelCase );
4138			} else {
4139				key = jQuery.camelCase( key );
4140
4141				// If a key with the spaces exists, use it.
4142				// Otherwise, create an array by matching non-whitespace
4143				key = key in cache ?
4144					[ key ] :
4145					( key.match( rnothtmlwhite ) || [] );
4146			}
4147
4148			i = key.length;
4149
4150			while ( i-- ) {
4151				delete cache[ key[ i ] ];
4152			}
4153		}
4154
4155		// Remove the expando if there's no more data
4156		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
4157
4158			// Support: Chrome <=35 - 45
4159			// Webkit & Blink performance suffers when deleting properties
4160			// from DOM nodes, so set to undefined instead
4161			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
4162			if ( owner.nodeType ) {
4163				owner[ this.expando ] = undefined;
4164			} else {
4165				delete owner[ this.expando ];
4166			}
4167		}
4168	},
4169	hasData: function( owner ) {
4170		var cache = owner[ this.expando ];
4171		return cache !== undefined && !jQuery.isEmptyObject( cache );
4172	}
4173};
4174var dataPriv = new Data();
4175
4176var dataUser = new Data();
4177
4178
4179
4180//	Implementation Summary
4181//
4182//	1. Enforce API surface and semantic compatibility with 1.9.x branch
4183//	2. Improve the module's maintainability by reducing the storage
4184//		paths to a single mechanism.
4185//	3. Use the same single mechanism to support "private" and "user" data.
4186//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
4187//	5. Avoid exposing implementation details on user objects (eg. expando properties)
4188//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
4189
4190var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4191	rmultiDash = /[A-Z]/g;
4192
4193function getData( data ) {
4194	if ( data === "true" ) {
4195		return true;
4196	}
4197
4198	if ( data === "false" ) {
4199		return false;
4200	}
4201
4202	if ( data === "null" ) {
4203		return null;
4204	}
4205
4206	// Only convert to a number if it doesn't change the string
4207	if ( data === +data + "" ) {
4208		return +data;
4209	}
4210
4211	if ( rbrace.test( data ) ) {
4212		return JSON.parse( data );
4213	}
4214
4215	return data;
4216}
4217
4218function dataAttr( elem, key, data ) {
4219	var name;
4220
4221	// If nothing was found internally, try to fetch any
4222	// data from the HTML5 data-* attribute
4223	if ( data === undefined && elem.nodeType === 1 ) {
4224		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
4225		data = elem.getAttribute( name );
4226
4227		if ( typeof data === "string" ) {
4228			try {
4229				data = getData( data )
vendor: 7,075 bytes, lines 4229-4536
4229;
4230			} catch ( e ) {}
4231
4232			// Make sure we set the data so it isn't changed later
4233			dataUser.set( elem, key, data );
4234		} else {
4235			data = undefined;
4236		}
4237	}
4238	return data;
4239}
4240
4241jQuery.extend( {
4242	hasData: function( elem ) {
4243		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
4244	},
4245
4246	data: function( elem, name, data ) {
4247		return dataUser.access( elem, name, data );
4248	},
4249
4250	removeData: function( elem, name ) {
4251		dataUser.remove( elem, name );
4252	},
4253
4254	// TODO: Now that all calls to _data and _removeData have been replaced
4255	// with direct calls to dataPriv methods, these can be deprecated.
4256	_data: function( elem, name, data ) {
4257		return dataPriv.access( elem, name, data );
4258	},
4259
4260	_removeData: function( elem, name ) {
4261		dataPriv.remove( elem, name );
4262	}
4263} );
4264
4265jQuery.fn.extend( {
4266	data: function( key, value ) {
4267		var i, name, data,
4268			elem = this[ 0 ],
4269			attrs = elem && elem.attributes;
4270
4271		// Gets all values
4272		if ( key === undefined ) {
4273			if ( this.length ) {
4274				data = dataUser.get( elem );
4275
4276				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
4277					i = attrs.length;
4278					while ( i-- ) {
4279
4280						// Support: IE 11 only
4281						// The attrs elements can be null (#14894)
4282						if ( attrs[ i ] ) {
4283							name = attrs[ i ].name;
4284							if ( name.indexOf( "data-" ) === 0 ) {
4285								name = jQuery.camelCase( name.slice( 5 ) );
4286								dataAttr( elem, name, data[ name ] );
4287							}
4288						}
4289					}
4290					dataPriv.set( elem, "hasDataAttrs", true );
4291				}
4292			}
4293
4294			return data;
4295		}
4296
4297		// Sets multiple values
4298		if ( typeof key === "object" ) {
4299			return this.each( function() {
4300				dataUser.set( this, key );
4301			} );
4302		}
4303
4304		return access( this, function( value ) {
4305			var data;
4306
4307			// The calling jQuery object (element matches) is not empty
4308			// (and therefore has an element appears at this[ 0 ]) and the
4309			// `value` parameter was not undefined. An empty jQuery object
4310			// will result in `undefined` for elem = this[ 0 ] which will
4311			// throw an exception if an attempt to read a data cache is made.
4312			if ( elem && value === undefined ) {
4313
4314				// Attempt to get data from the cache
4315				// The key will always be camelCased in Data
4316				data = dataUser.get( elem, key );
4317				if ( data !== undefined ) {
4318					return data;
4319				}
4320
4321				// Attempt to "discover" the data in
4322				// HTML5 custom data-* attrs
4323				data = dataAttr( elem, key );
4324				if ( data !== undefined ) {
4325					return data;
4326				}
4327
4328				// We tried really hard, but the data doesn't exist.
4329				return;
4330			}
4331
4332			// Set the data...
4333			this.each( function() {
4334
4335				// We always store the camelCased key
4336				dataUser.set( this, key, value );
4337			} );
4338		}, null, value, arguments.length > 1, null, true );
4339	},
4340
4341	removeData: function( key ) {
4342		return this.each( function() {
4343			dataUser.remove( this, key );
4344		} );
4345	}
4346} );
4347
4348
4349jQuery.extend( {
4350	queue: function( elem, type, data ) {
4351		var queue;
4352
4353		if ( elem ) {
4354			type = ( type || "fx" ) + "queue";
4355			queue = dataPriv.get( elem, type );
4356
4357			// Speed up dequeue by getting out quickly if this is just a lookup
4358			if ( data ) {
4359				if ( !queue || jQuery.isArray( data ) ) {
4360					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
4361				} else {
4362					queue.push( data );
4363				}
4364			}
4365			return queue || [];
4366		}
4367	},
4368
4369	dequeue: function( elem, type ) {
4370		type = type || "fx";
4371
4372		var queue = jQuery.queue( elem, type ),
4373			startLength = queue.length,
4374			fn = queue.shift(),
4375			hooks = jQuery._queueHooks( elem, type ),
4376			next = function() {
4377				jQuery.dequeue( elem, type );
4378			};
4379
4380		// If the fx queue is dequeued, always remove the progress sentinel
4381		if ( fn === "inprogress" ) {
4382			fn = queue.shift();
4383			startLength--;
4384		}
4385
4386		if ( fn ) {
4387
4388			// Add a progress sentinel to prevent the fx queue from being
4389			// automatically dequeued
4390			if ( type === "fx" ) {
4391				queue.unshift( "inprogress" );
4392			}
4393
4394			// Clear up the last queue stop function
4395			delete hooks.stop;
4396			fn.call( elem, next, hooks );
4397		}
4398
4399		if ( !startLength && hooks ) {
4400			hooks.empty.fire();
4401		}
4402	},
4403
4404	// Not public - generate a queueHooks object, or return the current one
4405	_queueHooks: function( elem, type ) {
4406		var key = type + "queueHooks";
4407		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
4408			empty: jQuery.Callbacks( "once memory" ).add( function() {
4409				dataPriv.remove( elem, [ type + "queue", key ] );
4410			} )
4411		} );
4412	}
4413} );
4414
4415jQuery.fn.extend( {
4416	queue: function( type, data ) {
4417		var setter = 2;
4418
4419		if ( typeof type !== "string" ) {
4420			data = type;
4421			type = "fx";
4422			setter--;
4423		}
4424
4425		if ( arguments.length < setter ) {
4426			return jQuery.queue( this[ 0 ], type );
4427		}
4428
4429		return data === undefined ?
4430			this :
4431			this.each( function() {
4432				var queue = jQuery.queue( this, type, data );
4433
4434				// Ensure a hooks for this queue
4435				jQuery._queueHooks( this, type );
4436
4437				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
4438					jQuery.dequeue( this, type );
4439				}
4440			} );
4441	},
4442	dequeue: function( type ) {
4443		return this.each( function() {
4444			jQuery.dequeue( this, type );
4445		} );
4446	},
4447	clearQueue: function( type ) {
4448		return this.queue( type || "fx", [] );
4449	},
4450
4451	// Get a promise resolved when queues of a certain type
4452	// are emptied (fx is the type by default)
4453	promise: function( type, obj ) {
4454		var tmp,
4455			count = 1,
4456			defer = jQuery.Deferred(),
4457			elements = this,
4458			i = this.length,
4459			resolve = function() {
4460				if ( !( --count ) ) {
4461					defer.resolveWith( elements, [ elements ] );
4462				}
4463			};
4464
4465		if ( typeof type !== "string" ) {
4466			obj = type;
4467			type = undefined;
4468		}
4469		type = type || "fx";
4470
4471		while ( i-- ) {
4472			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
4473			if ( tmp && tmp.empty ) {
4474				count++;
4475				tmp.empty.add( resolve );
4476			}
4477		}
4478		resolve();
4479		return defer.promise( obj );
4480	}
4481} );
4482var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
4483
4484var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
4485
4486
4487var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
4488
4489var isHiddenWithinTree = function( elem, el ) {
4490
4491		// isHiddenWithinTree might be called from jQuery#filter function;
4492		// in that case, element will be second argument
4493		elem = el || elem;
4494
4495		// Inline style trumps all
4496		return elem.style.display === "none" ||
4497			elem.style.display === "" &&
4498
4499			// Otherwise, check computed style
4500			// Support: Firefox <=43 - 45
4501			// Disconnected elements can have computed display: none, so first confirm that elem is
4502			// in the document.
4503			jQuery.contains( elem.ownerDocument, elem ) &&
4504
4505			jQuery.css( elem, "display" ) === "none";
4506	};
4507
4508var swap = function( elem, options, callback, args ) {
4509	var ret, name,
4510		old = {};
4511
4512	// Remember the old values, and insert the new ones
4513	for ( name in options ) {
4514		old[ name ] = elem.style[ name ];
4515		elem.style[ name ] = options[ name ];
4516	}
4517
4518	ret = callback.apply( elem, args || [] );
4519
4520	// Revert the old values
4521	for ( name in options ) {
4522		elem.style[ name ] = old[ name ];
4523	}
4524
4525	return ret;
4526};
4527
4528
4529
4530
4531function adjustCSS( elem, prop, valueParts, tween ) {
4532	var adjusted,
4533		scale = 1,
4534		maxIterations = 20,
4535		currentValue = tween ?
4536			function() {
vendor: 1,837 bytes, lines 4536-4602
4536
4537				return tween.cur();
4538			} :
4539			function() {
4540				return jQuery.css( elem, prop, "" );
4541			},
4542		initial = currentValue(),
4543		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
4544
4545		// Starting value computation is required for potential unit mismatches
4546		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
4547			rcssNum.exec( jQuery.css( elem, prop ) );
4548
4549	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
4550
4551		// Trust units reported by jQuery.css
4552		unit = unit || initialInUnit[ 3 ];
4553
4554		// Make sure we update the tween properties later on
4555		valueParts = valueParts || [];
4556
4557		// Iteratively approximate from a nonzero starting point
4558		initialInUnit = +initial || 1;
4559
4560		do {
4561
4562			// If previous iteration zeroed out, double until we get *something*.
4563			// Use string for doubling so we don't accidentally see scale as unchanged below
4564			scale = scale || ".5";
4565
4566			// Adjust and apply
4567			initialInUnit = initialInUnit / scale;
4568			jQuery.style( elem, prop, initialInUnit + unit );
4569
4570		// Update scale, tolerating zero or NaN from tween.cur()
4571		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
4572		} while (
4573			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
4574		);
4575	}
4576
4577	if ( valueParts ) {
4578		initialInUnit = +initialInUnit || +initial || 0;
4579
4580		// Apply relative offset (+=/-=) if specified
4581		adjusted = valueParts[ 1 ] ?
4582			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
4583			+valueParts[ 2 ];
4584		if ( tween ) {
4585			tween.unit = unit;
4586			tween.start = initialInUnit;
4587			tween.end = adjusted;
4588		}
4589	}
4590	return adjusted;
4591}
4592
4593
4594var defaultDisplayMap = {};
4595
4596function getDefaultDisplay( elem ) {
4597	var temp,
4598		doc = elem.ownerDocument,
4599		nodeName = elem.nodeName,
4600		display = defaultDisplayMap[ nodeName ];
4601
4602	if ( display ) {
vendor: 4,008 bytes, lines 4603-4774
4603		return display;
4604	}
4605
4606	temp = doc.body.appendChild( doc.createElement( nodeName ) );
4607	display = jQuery.css( temp, "display" );
4608
4609	temp.parentNode.removeChild( temp );
4610
4611	if ( display === "none" ) {
4612		display = "block";
4613	}
4614	defaultDisplayMap[ nodeName ] = display;
4615
4616	return display;
4617}
4618
4619function showHide( elements, show ) {
4620	var display, elem,
4621		values = [],
4622		index = 0,
4623		length = elements.length;
4624
4625	// Determine new display value for elements that need to change
4626	for ( ; index < length; index++ ) {
4627		elem = elements[ index ];
4628		if ( !elem.style ) {
4629			continue;
4630		}
4631
4632		display = elem.style.display;
4633		if ( show ) {
4634
4635			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
4636			// check is required in this first loop unless we have a nonempty display value (either
4637			// inline or about-to-be-restored)
4638			if ( display === "none" ) {
4639				values[ index ] = dataPriv.get( elem, "display" ) || null;
4640				if ( !values[ index ] ) {
4641					elem.style.display = "";
4642				}
4643			}
4644			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
4645				values[ index ] = getDefaultDisplay( elem );
4646			}
4647		} else {
4648			if ( display !== "none" ) {
4649				values[ index ] = "none";
4650
4651				// Remember what we're overwriting
4652				dataPriv.set( elem, "display", display );
4653			}
4654		}
4655	}
4656
4657	// Set the display of the elements in a second loop to avoid constant reflow
4658	for ( index = 0; index < length; index++ ) {
4659		if ( values[ index ] != null ) {
4660			elements[ index ].style.display = values[ index ];
4661		}
4662	}
4663
4664	return elements;
4665}
4666
4667jQuery.fn.extend( {
4668	show: function() {
4669		return showHide( this, true );
4670	},
4671	hide: function() {
4672		return showHide( this );
4673	},
4674	toggle: function( state ) {
4675		if ( typeof state === "boolean" ) {
4676			return state ? this.show() : this.hide();
4677		}
4678
4679		return this.each( function() {
4680			if ( isHiddenWithinTree( this ) ) {
4681				jQuery( this ).show();
4682			} else {
4683				jQuery( this ).hide();
4684			}
4685		} );
4686	}
4687} );
4688var rcheckableType = ( /^(?:checkbox|radio)$/i );
4689
4690var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
4691
4692var rscriptType = ( /^$|\/(?:java|ecma)script/i );
4693
4694
4695
4696// We have to close these tags to support XHTML (#13200)
4697var wrapMap = {
4698
4699	// Support: IE <=9 only
4700	option: [ 1, "<select multiple='multiple'>", "</select>" ],
4701
4702	// XHTML parsers do not magically insert elements in the
4703	// same way that tag soup parsers do. So we cannot shorten
4704	// this by omitting <tbody> or other required elements.
4705	thead: [ 1, "<table>", "</table>" ],
4706	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
4707	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
4708	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
4709
4710	_default: [ 0, "", "" ]
4711};
4712
4713// Support: IE <=9 only
4714wrapMap.optgroup = wrapMap.option;
4715
4716wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
4717wrapMap.th = wrapMap.td;
4718
4719
4720function getAll( context, tag ) {
4721
4722	// Support: IE <=9 - 11 only
4723	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
4724	var ret;
4725
4726	if ( typeof context.getElementsByTagName !== "undefined" ) {
4727		ret = context.getElementsByTagName( tag || "*" );
4728
4729	} else if ( typeof context.querySelectorAll !== "undefined" ) {
4730		ret = context.querySelectorAll( tag || "*" );
4731
4732	} else {
4733		ret = [];
4734	}
4735
4736	if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {
4737		return jQuery.merge( [ context ], ret );
4738	}
4739
4740	return ret;
4741}
4742
4743
4744// Mark scripts as having already been evaluated
4745function setGlobalEval( elems, refElements ) {
4746	var i = 0,
4747		l = elems.length;
4748
4749	for ( ; i < l; i++ ) {
4750		dataPriv.set(
4751			elems[ i ],
4752			"globalEval",
4753			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
4754		);
4755	}
4756}
4757
4758
4759var rhtml = /<|&#?\w+;/;
4760
4761function buildFragment( elems, context, scripts, selection, ignored ) {
4762	var elem, tmp, tag, wrap, contains, j,
4763		fragment = context.createDocumentFragment(),
4764		nodes = [],
4765		i = 0,
4766		l = elems.length;
4767
4768	for ( ; i < l; i++ ) {
4769		elem = elems[ i ];
4770
4771		if ( elem || elem === 0 ) {
4772
4773			// Add nodes directly
4774			if ( jQuery.t
vendor: 14,415 bytes, lines 4774-5284
4774ype( elem ) === "object" ) {
4775
4776				// Support: Android <=4.0 only, PhantomJS 1 only
4777				// push.apply(_, arraylike) throws on ancient WebKit
4778				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
4779
4780			// Convert non-html into a text node
4781			} else if ( !rhtml.test( elem ) ) {
4782				nodes.push( context.createTextNode( elem ) );
4783
4784			// Convert html into DOM nodes
4785			} else {
4786				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
4787
4788				// Deserialize a standard representation
4789				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
4790				wrap = wrapMap[ tag ] || wrapMap._default;
4791				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
4792
4793				// Descend through wrappers to the right content
4794				j = wrap[ 0 ];
4795				while ( j-- ) {
4796					tmp = tmp.lastChild;
4797				}
4798
4799				// Support: Android <=4.0 only, PhantomJS 1 only
4800				// push.apply(_, arraylike) throws on ancient WebKit
4801				jQuery.merge( nodes, tmp.childNodes );
4802
4803				// Remember the top-level container
4804				tmp = fragment.firstChild;
4805
4806				// Ensure the created nodes are orphaned (#12392)
4807				tmp.textContent = "";
4808			}
4809		}
4810	}
4811
4812	// Remove wrapper from fragment
4813	fragment.textContent = "";
4814
4815	i = 0;
4816	while ( ( elem = nodes[ i++ ] ) ) {
4817
4818		// Skip elements already in the context collection (trac-4087)
4819		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
4820			if ( ignored ) {
4821				ignored.push( elem );
4822			}
4823			continue;
4824		}
4825
4826		contains = jQuery.contains( elem.ownerDocument, elem );
4827
4828		// Append to fragment
4829		tmp = getAll( fragment.appendChild( elem ), "script" );
4830
4831		// Preserve script evaluation history
4832		if ( contains ) {
4833			setGlobalEval( tmp );
4834		}
4835
4836		// Capture executables
4837		if ( scripts ) {
4838			j = 0;
4839			while ( ( elem = tmp[ j++ ] ) ) {
4840				if ( rscriptType.test( elem.type || "" ) ) {
4841					scripts.push( elem );
4842				}
4843			}
4844		}
4845	}
4846
4847	return fragment;
4848}
4849
4850
4851( function() {
4852	var fragment = document.createDocumentFragment(),
4853		div = fragment.appendChild( document.createElement( "div" ) ),
4854		input = document.createElement( "input" );
4855
4856	// Support: Android 4.0 - 4.3 only
4857	// Check state lost if the name is set (#11217)
4858	// Support: Windows Web Apps (WWA)
4859	// `name` and `type` must use .setAttribute for WWA (#14901)
4860	input.setAttribute( "type", "radio" );
4861	input.setAttribute( "checked", "checked" );
4862	input.setAttribute( "name", "t" );
4863
4864	div.appendChild( input );
4865
4866	// Support: Android <=4.1 only
4867	// Older WebKit doesn't clone checked state correctly in fragments
4868	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
4869
4870	// Support: IE <=11 only
4871	// Make sure textarea (and checkbox) defaultValue is properly cloned
4872	div.innerHTML = "<textarea>x</textarea>";
4873	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
4874} )();
4875var documentElement = document.documentElement;
4876
4877
4878
4879var
4880	rkeyEvent = /^key/,
4881	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
4882	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
4883
4884function returnTrue() {
4885	return true;
4886}
4887
4888function returnFalse() {
4889	return false;
4890}
4891
4892// Support: IE <=9 only
4893// See #13393 for more info
4894function safeActiveElement() {
4895	try {
4896		return document.activeElement;
4897	} catch ( err ) { }
4898}
4899
4900function on( elem, types, selector, data, fn, one ) {
4901	var origFn, type;
4902
4903	// Types can be a map of types/handlers
4904	if ( typeof types === "object" ) {
4905
4906		// ( types-Object, selector, data )
4907		if ( typeof selector !== "string" ) {
4908
4909			// ( types-Object, data )
4910			data = data || selector;
4911			selector = undefined;
4912		}
4913		for ( type in types ) {
4914			on( elem, type, selector, data, types[ type ], one );
4915		}
4916		return elem;
4917	}
4918
4919	if ( data == null && fn == null ) {
4920
4921		// ( types, fn )
4922		fn = selector;
4923		data = selector = undefined;
4924	} else if ( fn == null ) {
4925		if ( typeof selector === "string" ) {
4926
4927			// ( types, selector, fn )
4928			fn = data;
4929			data = undefined;
4930		} else {
4931
4932			// ( types, data, fn )
4933			fn = data;
4934			data = selector;
4935			selector = undefined;
4936		}
4937	}
4938	if ( fn === false ) {
4939		fn = returnFalse;
4940	} else if ( !fn ) {
4941		return elem;
4942	}
4943
4944	if ( one === 1 ) {
4945		origFn = fn;
4946		fn = function( event ) {
4947
4948			// Can use an empty set, since event contains the info
4949			jQuery().off( event );
4950			return origFn.apply( this, arguments );
4951		};
4952
4953		// Use same guid so caller can remove using origFn
4954		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
4955	}
4956	return elem.each( function() {
4957		jQuery.event.add( this, types, fn, data, selector );
4958	} );
4959}
4960
4961/*
4962 * Helper functions for managing events -- not part of the public interface.
4963 * Props to Dean Edwards' addEvent library for many of the ideas.
4964 */
4965jQuery.event = {
4966
4967	global: {},
4968
4969	add: function( elem, types, handler, data, selector ) {
4970
4971		var handleObjIn, eventHandle, tmp,
4972			events, t, handleObj,
4973			special, handlers, type, namespaces, origType,
4974			elemData = dataPriv.get( elem );
4975
4976		// Don't attach events to noData or text/comment nodes (but allow plain objects)
4977		if ( !elemData ) {
4978			return;
4979		}
4980
4981		// Caller can pass in an object of custom data in lieu of the handler
4982		if ( handler.handler ) {
4983			handleObjIn = handler;
4984			handler = handleObjIn.handler;
4985			selector = handleObjIn.selector;
4986		}
4987
4988		// Ensure that invalid selectors throw exceptions at attach time
4989		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
4990		if ( selector ) {
4991			jQuery.find.matchesSelector( documentElement, selector );
4992		}
4993
4994		// Make sure that the handler has a unique ID, used to find/remove it later
4995		if ( !handler.guid ) {
4996			handler.guid = jQuery.guid++;
4997		}
4998
4999		// Init the element's event structure and main handler, if this is the first
5000		if ( !( events = elemData.events ) ) {
5001			events = elemData.events = {};
5002		}
5003		if ( !( eventHandle = elemData.handle ) ) {
5004			eventHandle = elemData.handle = function( e ) {
5005
5006				// Discard the second event of a jQuery.event.trigger() and
5007				// when an event is called after a page has unloaded
5008				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
5009					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
5010			};
5011		}
5012
5013		// Handle multiple events separated by a space
5014		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5015		t = types.length;
5016		while ( t-- ) {
5017			tmp = rtypenamespace.exec( types[ t ] ) || [];
5018			type = origType = tmp[ 1 ];
5019			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5020
5021			// There *must* be a type, no attaching namespace-only handlers
5022			if ( !type ) {
5023				continue;
5024			}
5025
5026			// If event changes its type, use the special event handlers for the changed type
5027			special = jQuery.event.special[ type ] || {};
5028
5029			// If selector defined, determine special event api type, otherwise given type
5030			type = ( selector ? special.delegateType : special.bindType ) || type;
5031
5032			// Update special based on newly reset type
5033			special = jQuery.event.special[ type ] || {};
5034
5035			// handleObj is passed to all event handlers
5036			handleObj = jQuery.extend( {
5037				type: type,
5038				origType: origType,
5039				data: data,
5040				handler: handler,
5041				guid: handler.guid,
5042				selector: selector,
5043				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
5044				namespace: namespaces.join( "." )
5045			}, handleObjIn );
5046
5047			// Init the event handler queue if we're the first
5048			if ( !( handlers = events[ type ] ) ) {
5049				handlers = events[ type ] = [];
5050				handlers.delegateCount = 0;
5051
5052				// Only use addEventListener if the special events handler returns false
5053				if ( !special.setup ||
5054					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
5055
5056					if ( elem.addEventListener ) {
5057						elem.addEventListener( type, eventHandle );
5058					}
5059				}
5060			}
5061
5062			if ( special.add ) {
5063				special.add.call( elem, handleObj );
5064
5065				if ( !handleObj.handler.guid ) {
5066					handleObj.handler.guid = handler.guid;
5067				}
5068			}
5069
5070			// Add to the element's handler list, delegates in front
5071			if ( selector ) {
5072				handlers.splice( handlers.delegateCount++, 0, handleObj );
5073			} else {
5074				handlers.push( handleObj );
5075			}
5076
5077			// Keep track of which events have ever been used, for event optimization
5078			jQuery.event.global[ type ] = true;
5079		}
5080
5081	},
5082
5083	// Detach an event or set of events from an element
5084	remove: function( elem, types, handler, selector, mappedTypes ) {
5085
5086		var j, origCount, tmp,
5087			events, t, handleObj,
5088			special, handlers, type, namespaces, origType,
5089			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
5090
5091		if ( !elemData || !( events = elemData.events ) ) {
5092			return;
5093		}
5094
5095		// Once for each type.namespace in types; type may be omitted
5096		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5097		t = types.length;
5098		while ( t-- ) {
5099			tmp = rtypenamespace.exec( types[ t ] ) || [];
5100			type = origType = tmp[ 1 ];
5101			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5102
5103			// Unbind all events (on this namespace, if provided) for the element
5104			if ( !type ) {
5105				for ( type in events ) {
5106					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
5107				}
5108				continue;
5109			}
5110
5111			special = jQuery.event.special[ type ] || {};
5112			type = ( selector ? special.delegateType : special.bindType ) || type;
5113			handlers = events[ type ] || [];
5114			tmp = tmp[ 2 ] &&
5115				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
5116
5117			// Remove matching events
5118			origCount = j = handlers.length;
5119			while ( j-- ) {
5120				handleObj = handlers[ j ];
5121
5122				if ( ( mappedTypes || origType === handleObj.origType ) &&
5123					( !handler || handler.guid === handleObj.guid ) &&
5124					( !tmp || tmp.test( handleObj.namespace ) ) &&
5125					( !selector || selector === handleObj.selector ||
5126						selector === "**" && handleObj.selector ) ) {
5127					handlers.splice( j, 1 );
5128
5129					if ( handleObj.selector ) {
5130						handlers.delegateCount--;
5131					}
5132					if ( special.remove ) {
5133						special.remove.call( elem, handleObj );
5134					}
5135				}
5136			}
5137
5138			// Remove generic event handler if we removed something and no more handlers exist
5139			// (avoids potential for endless recursion during removal of special event handlers)
5140			if ( origCount && !handlers.length ) {
5141				if ( !special.teardown ||
5142					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
5143
5144					jQuery.removeEvent( elem, type, elemData.handle );
5145				}
5146
5147				delete events[ type ];
5148			}
5149		}
5150
5151		// Remove data and the expando if it's no longer used
5152		if ( jQuery.isEmptyObject( events ) ) {
5153			dataPriv.remove( elem, "handle events" );
5154		}
5155	},
5156
5157	dispatch: function( nativeEvent ) {
5158
5159		// Make a writable jQuery.Event from the native event object
5160		var event = jQuery.event.fix( nativeEvent );
5161
5162		var i, j, ret, matched, handleObj, handlerQueue,
5163			args = new Array( arguments.length ),
5164			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
5165			special = jQuery.event.special[ event.type ] || {};
5166
5167		// Use the fix-ed jQuery.Event rather than the (read-only) native event
5168		args[ 0 ] = event;
5169
5170		for ( i = 1; i < arguments.length; i++ ) {
5171			args[ i ] = arguments[ i ];
5172		}
5173
5174		event.delegateTarget = this;
5175
5176		// Call the preDispatch hook for the mapped type, and let it bail if desired
5177		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
5178			return;
5179		}
5180
5181		// Determine handlers
5182		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
5183
5184		// Run delegates first; they may want to stop propagation beneath us
5185		i = 0;
5186		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
5187			event.currentTarget = matched.elem;
5188
5189			j = 0;
5190			while ( ( handleObj = matched.handlers[ j++ ] ) &&
5191				!event.isImmediatePropagationStopped() ) {
5192
5193				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
5194				// a subset or equal to those in the bound event (both can have no namespace).
5195				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
5196
5197					event.handleObj = handleObj;
5198					event.data = handleObj.data;
5199
5200					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
5201						handleObj.handler ).apply( matched.elem, args );
5202
5203					if ( ret !== undefined ) {
5204						if ( ( event.result = ret ) === false ) {
5205							event.preventDefault();
5206							event.stopPropagation();
5207						}
5208					}
5209				}
5210			}
5211		}
5212
5213		// Call the postDispatch hook for the mapped type
5214		if ( special.postDispatch ) {
5215			special.postDispatch.call( this, event );
5216		}
5217
5218		return event.result;
5219	},
5220
5221	handlers: function( event, handlers ) {
5222		var i, handleObj, sel, matchedHandlers, matchedSelectors,
5223			handlerQueue = [],
5224			delegateCount = handlers.delegateCount,
5225			cur = event.target;
5226
5227		// Find delegate handlers
5228		if ( delegateCount &&
5229
5230			// Support: IE <=9
5231			// Black-hole SVG <use> instance trees (trac-13180)
5232			cur.nodeType &&
5233
5234			// Support: Firefox <=42
5235			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
5236			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
5237			// Support: IE 11 only
5238			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
5239			!( event.type === "click" && event.button >= 1 ) ) {
5240
5241			for ( ; cur !== this; cur = cur.parentNode || this ) {
5242
5243				// Don't check non-elements (#13208)
5244				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5245				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5246					matchedHandlers = [];
5247					matchedSelectors = {};
5248					for ( i = 0; i < delegateCount; i++ ) {
5249						handleObj = handlers[ i ];
5250
5251						// Don't conflict with Object.prototype properties (#13203)
5252						sel = handleObj.selector + " ";
5253
5254						if ( matchedSelectors[ sel ] === undefined ) {
5255							matchedSelectors[ sel ] = handleObj.needsContext ?
5256								jQuery( sel, this ).index( cur ) > -1 :
5257								jQuery.find( sel, this, null, [ cur ] ).length;
5258						}
5259						if ( matchedSelectors[ sel ] ) {
5260							matchedHandlers.push( handleObj );
5261						}
5262					}
5263					if ( matchedHandlers.length ) {
5264						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
5265					}
5266				}
5267			}
5268		}
5269
5270		// Add the remaining (directly-bound) handlers
5271		cur = this;
5272		if ( delegateCount < handlers.length ) {
5273			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
5274		}
5275
5276		return handlerQueue;
5277	},
5278
5279	addProp: function( name, hook ) {
5280		Object.defineProperty( jQuery.Event.prototype, name, {
5281			enumerable: true,
5282			configurable: true,
5283
5284			get: 
vendor: 2,487 bytes, lines 5284-5392
5284jQuery.isFunction( hook ) ?
5285				function() {
5286					if ( this.originalEvent ) {
5287							return hook( this.originalEvent );
5288					}
5289				} :
5290				function() {
5291					if ( this.originalEvent ) {
5292							return this.originalEvent[ name ];
5293					}
5294				},
5295
5296			set: function( value ) {
5297				Object.defineProperty( this, name, {
5298					enumerable: true,
5299					configurable: true,
5300					writable: true,
5301					value: value
5302				} );
5303			}
5304		} );
5305	},
5306
5307	fix: function( originalEvent ) {
5308		return originalEvent[ jQuery.expando ] ?
5309			originalEvent :
5310			new jQuery.Event( originalEvent );
5311	},
5312
5313	special: {
5314		load: {
5315
5316			// Prevent triggered image.load events from bubbling to window.load
5317			noBubble: true
5318		},
5319		focus: {
5320
5321			// Fire native event if possible so blur/focus sequence is correct
5322			trigger: function() {
5323				if ( this !== safeActiveElement() && this.focus ) {
5324					this.focus();
5325					return false;
5326				}
5327			},
5328			delegateType: "focusin"
5329		},
5330		blur: {
5331			trigger: function() {
5332				if ( this === safeActiveElement() && this.blur ) {
5333					this.blur();
5334					return false;
5335				}
5336			},
5337			delegateType: "focusout"
5338		},
5339		click: {
5340
5341			// For checkbox, fire native event so checked state will be right
5342			trigger: function() {
5343				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
5344					this.click();
5345					return false;
5346				}
5347			},
5348
5349			// For cross-browser consistency, don't fire native .click() on links
5350			_default: function( event ) {
5351				return jQuery.nodeName( event.target, "a" );
5352			}
5353		},
5354
5355		beforeunload: {
5356			postDispatch: function( event ) {
5357
5358				// Support: Firefox 20+
5359				// Firefox doesn't alert if the returnValue field is not set.
5360				if ( event.result !== undefined && event.originalEvent ) {
5361					event.originalEvent.returnValue = event.result;
5362				}
5363			}
5364		}
5365	}
5366};
5367
5368jQuery.removeEvent = function( elem, type, handle ) {
5369
5370	// This "if" is needed for plain objects
5371	if ( elem.removeEventListener ) {
5372		elem.removeEventListener( type, handle );
5373	}
5374};
5375
5376jQuery.Event = function( src, props ) {
5377
5378	// Allow instantiation without the 'new' keyword
5379	if ( !( this instanceof jQuery.Event ) ) {
5380		return new jQuery.Event( src, props );
5381	}
5382
5383	// Event object
5384	if ( src && src.type ) {
5385		this.originalEvent = src;
5386		this.type = src.type;
5387
5388		// Events bubbling up the document may have been marked as prevented
5389		// by a handler lower down the tree; reflect the correct value.
5390		this.isDefaultPrevented = src.defaultPrevented ||
5391				src.defaultPrevented === undefined &&
5392
vendor: 5,276 bytes, lines 5393-5616
5393				// Support: Android <=2.3 only
5394				src.returnValue === false ?
5395			returnTrue :
5396			returnFalse;
5397
5398		// Create target properties
5399		// Support: Safari <=6 - 7 only
5400		// Target should not be a text node (#504, #13143)
5401		this.target = ( src.target && src.target.nodeType === 3 ) ?
5402			src.target.parentNode :
5403			src.target;
5404
5405		this.currentTarget = src.currentTarget;
5406		this.relatedTarget = src.relatedTarget;
5407
5408	// Event type
5409	} else {
5410		this.type = src;
5411	}
5412
5413	// Put explicitly provided properties onto the event object
5414	if ( props ) {
5415		jQuery.extend( this, props );
5416	}
5417
5418	// Create a timestamp if incoming event doesn't have one
5419	this.timeStamp = src && src.timeStamp || jQuery.now();
5420
5421	// Mark it as fixed
5422	this[ jQuery.expando ] = true;
5423};
5424
5425// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
5426// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
5427jQuery.Event.prototype = {
5428	constructor: jQuery.Event,
5429	isDefaultPrevented: returnFalse,
5430	isPropagationStopped: returnFalse,
5431	isImmediatePropagationStopped: returnFalse,
5432	isSimulated: false,
5433
5434	preventDefault: function() {
5435		var e = this.originalEvent;
5436
5437		this.isDefaultPrevented = returnTrue;
5438
5439		if ( e && !this.isSimulated ) {
5440			e.preventDefault();
5441		}
5442	},
5443	stopPropagation: function() {
5444		var e = this.originalEvent;
5445
5446		this.isPropagationStopped = returnTrue;
5447
5448		if ( e && !this.isSimulated ) {
5449			e.stopPropagation();
5450		}
5451	},
5452	stopImmediatePropagation: function() {
5453		var e = this.originalEvent;
5454
5455		this.isImmediatePropagationStopped = returnTrue;
5456
5457		if ( e && !this.isSimulated ) {
5458			e.stopImmediatePropagation();
5459		}
5460
5461		this.stopPropagation();
5462	}
5463};
5464
5465// Includes all common event props including KeyEvent and MouseEvent specific props
5466jQuery.each( {
5467	altKey: true,
5468	bubbles: true,
5469	cancelable: true,
5470	changedTouches: true,
5471	ctrlKey: true,
5472	detail: true,
5473	eventPhase: true,
5474	metaKey: true,
5475	pageX: true,
5476	pageY: true,
5477	shiftKey: true,
5478	view: true,
5479	"char": true,
5480	charCode: true,
5481	key: true,
5482	keyCode: true,
5483	button: true,
5484	buttons: true,
5485	clientX: true,
5486	clientY: true,
5487	offsetX: true,
5488	offsetY: true,
5489	pointerId: true,
5490	pointerType: true,
5491	screenX: true,
5492	screenY: true,
5493	targetTouches: true,
5494	toElement: true,
5495	touches: true,
5496
5497	which: function( event ) {
5498		var button = event.button;
5499
5500		// Add which for key events
5501		if ( event.which == null && rkeyEvent.test( event.type ) ) {
5502			return event.charCode != null ? event.charCode : event.keyCode;
5503		}
5504
5505		// Add which for click: 1 === left; 2 === middle; 3 === right
5506		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
5507			if ( button & 1 ) {
5508				return 1;
5509			}
5510
5511			if ( button & 2 ) {
5512				return 3;
5513			}
5514
5515			if ( button & 4 ) {
5516				return 2;
5517			}
5518
5519			return 0;
5520		}
5521
5522		return event.which;
5523	}
5524}, jQuery.event.addProp );
5525
5526// Create mouseenter/leave events using mouseover/out and event-time checks
5527// so that event delegation works in jQuery.
5528// Do the same for pointerenter/pointerleave and pointerover/pointerout
5529//
5530// Support: Safari 7 only
5531// Safari sends mouseenter too often; see:
5532// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
5533// for the description of the bug (it existed in older Chrome versions as well).
5534jQuery.each( {
5535	mouseenter: "mouseover",
5536	mouseleave: "mouseout",
5537	pointerenter: "pointerover",
5538	pointerleave: "pointerout"
5539}, function( orig, fix ) {
5540	jQuery.event.special[ orig ] = {
5541		delegateType: fix,
5542		bindType: fix,
5543
5544		handle: function( event ) {
5545			var ret,
5546				target = this,
5547				related = event.relatedTarget,
5548				handleObj = event.handleObj;
5549
5550			// For mouseenter/leave call the handler if related is outside the target.
5551			// NB: No relatedTarget if the mouse left/entered the browser window
5552			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
5553				event.type = handleObj.origType;
5554				ret = handleObj.handler.apply( this, arguments );
5555				event.type = fix;
5556			}
5557			return ret;
5558		}
5559	};
5560} );
5561
5562jQuery.fn.extend( {
5563
5564	on: function( types, selector, data, fn ) {
5565		return on( this, types, selector, data, fn );
5566	},
5567	one: function( types, selector, data, fn ) {
5568		return on( this, types, selector, data, fn, 1 );
5569	},
5570	off: function( types, selector, fn ) {
5571		var handleObj, type;
5572		if ( types && types.preventDefault && types.handleObj ) {
5573
5574			// ( event )  dispatched jQuery.Event
5575			handleObj = types.handleObj;
5576			jQuery( types.delegateTarget ).off(
5577				handleObj.namespace ?
5578					handleObj.origType + "." + handleObj.namespace :
5579					handleObj.origType,
5580				handleObj.selector,
5581				handleObj.handler
5582			);
5583			return this;
5584		}
5585		if ( typeof types === "object" ) {
5586
5587			// ( types-object [, selector] )
5588			for ( type in types ) {
5589				this.off( type, selector, types[ type ] );
5590			}
5591			return this;
5592		}
5593		if ( selector === false || typeof selector === "function" ) {
5594
5595			// ( types [, fn] )
5596			fn = selector;
5597			selector = undefined;
5598		}
5599		if ( fn === false ) {
5600			fn = returnFalse;
5601		}
5602		return this.each( function() {
5603			jQuery.event.remove( this, types, fn, selector );
5604		} );
5605	}
5606} );
5607
5608
5609var
5610
5611	/* eslint-disable max-len */
5612
5613	// See https://github.com/eslint/eslint/issues/3229
5614	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
5615
5616	/* eslint-enable */
vendor: 7,144 bytes, lines 5616-5880
5616
5617
5618	// Support: IE <=10 - 11, Edge 12 - 13
5619	// In IE/Edge using regex groups here causes severe slowdowns.
5620	// See https://connect.microsoft.com/IE/feedback/details/1736512/
5621	rnoInnerhtml = /<script|<style|<link/i,
5622
5623	// checked="checked" or checked
5624	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5625	rscriptTypeMasked = /^true\/(.*)/,
5626	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
5627
5628function manipulationTarget( elem, content ) {
5629	if ( jQuery.nodeName( elem, "table" ) &&
5630		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
5631
5632		return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
5633	}
5634
5635	return elem;
5636}
5637
5638// Replace/restore the type attribute of script elements for safe DOM manipulation
5639function disableScript( elem ) {
5640	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
5641	return elem;
5642}
5643function restoreScript( elem ) {
5644	var match = rscriptTypeMasked.exec( elem.type );
5645
5646	if ( match ) {
5647		elem.type = match[ 1 ];
5648	} else {
5649		elem.removeAttribute( "type" );
5650	}
5651
5652	return elem;
5653}
5654
5655function cloneCopyEvent( src, dest ) {
5656	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
5657
5658	if ( dest.nodeType !== 1 ) {
5659		return;
5660	}
5661
5662	// 1. Copy private data: events, handlers, etc.
5663	if ( dataPriv.hasData( src ) ) {
5664		pdataOld = dataPriv.access( src );
5665		pdataCur = dataPriv.set( dest, pdataOld );
5666		events = pdataOld.events;
5667
5668		if ( events ) {
5669			delete pdataCur.handle;
5670			pdataCur.events = {};
5671
5672			for ( type in events ) {
5673				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
5674					jQuery.event.add( dest, type, events[ type ][ i ] );
5675				}
5676			}
5677		}
5678	}
5679
5680	// 2. Copy user data
5681	if ( dataUser.hasData( src ) ) {
5682		udataOld = dataUser.access( src );
5683		udataCur = jQuery.extend( {}, udataOld );
5684
5685		dataUser.set( dest, udataCur );
5686	}
5687}
5688
5689// Fix IE bugs, see support tests
5690function fixInput( src, dest ) {
5691	var nodeName = dest.nodeName.toLowerCase();
5692
5693	// Fails to persist the checked state of a cloned checkbox or radio button.
5694	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
5695		dest.checked = src.checked;
5696
5697	// Fails to return the selected option to the default selected state when cloning options
5698	} else if ( nodeName === "input" || nodeName === "textarea" ) {
5699		dest.defaultValue = src.defaultValue;
5700	}
5701}
5702
5703function domManip( collection, args, callback, ignored ) {
5704
5705	// Flatten any nested arrays
5706	args = concat.apply( [], args );
5707
5708	var fragment, first, scripts, hasScripts, node, doc,
5709		i = 0,
5710		l = collection.length,
5711		iNoClone = l - 1,
5712		value = args[ 0 ],
5713		isFunction = jQuery.isFunction( value );
5714
5715	// We can't cloneNode fragments that contain checked, in WebKit
5716	if ( isFunction ||
5717			( l > 1 && typeof value === "string" &&
5718				!support.checkClone && rchecked.test( value ) ) ) {
5719		return collection.each( function( index ) {
5720			var self = collection.eq( index );
5721			if ( isFunction ) {
5722				args[ 0 ] = value.call( this, index, self.html() );
5723			}
5724			domManip( self, args, callback, ignored );
5725		} );
5726	}
5727
5728	if ( l ) {
5729		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
5730		first = fragment.firstChild;
5731
5732		if ( fragment.childNodes.length === 1 ) {
5733			fragment = first;
5734		}
5735
5736		// Require either new content or an interest in ignored elements to invoke the callback
5737		if ( first || ignored ) {
5738			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
5739			hasScripts = scripts.length;
5740
5741			// Use the original fragment for the last item
5742			// instead of the first because it can end up
5743			// being emptied incorrectly in certain situations (#8070).
5744			for ( ; i < l; i++ ) {
5745				node = fragment;
5746
5747				if ( i !== iNoClone ) {
5748					node = jQuery.clone( node, true, true );
5749
5750					// Keep references to cloned scripts for later restoration
5751					if ( hasScripts ) {
5752
5753						// Support: Android <=4.0 only, PhantomJS 1 only
5754						// push.apply(_, arraylike) throws on ancient WebKit
5755						jQuery.merge( scripts, getAll( node, "script" ) );
5756					}
5757				}
5758
5759				callback.call( collection[ i ], node, i );
5760			}
5761
5762			if ( hasScripts ) {
5763				doc = scripts[ scripts.length - 1 ].ownerDocument;
5764
5765				// Reenable scripts
5766				jQuery.map( scripts, restoreScript );
5767
5768				// Evaluate executable scripts on first document insertion
5769				for ( i = 0; i < hasScripts; i++ ) {
5770					node = scripts[ i ];
5771					if ( rscriptType.test( node.type || "" ) &&
5772						!dataPriv.access( node, "globalEval" ) &&
5773						jQuery.contains( doc, node ) ) {
5774
5775						if ( node.src ) {
5776
5777							// Optional AJAX dependency, but won't run scripts if not present
5778							if ( jQuery._evalUrl ) {
5779								jQuery._evalUrl( node.src );
5780							}
5781						} else {
5782							DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
5783						}
5784					}
5785				}
5786			}
5787		}
5788	}
5789
5790	return collection;
5791}
5792
5793function remove( elem, selector, keepData ) {
5794	var node,
5795		nodes = selector ? jQuery.filter( selector, elem ) : elem,
5796		i = 0;
5797
5798	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
5799		if ( !keepData && node.nodeType === 1 ) {
5800			jQuery.cleanData( getAll( node ) );
5801		}
5802
5803		if ( node.parentNode ) {
5804			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
5805				setGlobalEval( getAll( node, "script" ) );
5806			}
5807			node.parentNode.removeChild( node );
5808		}
5809	}
5810
5811	return elem;
5812}
5813
5814jQuery.extend( {
5815	htmlPrefilter: function( html ) {
5816		return html.replace( rxhtmlTag, "<$1></$2>" );
5817	},
5818
5819	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
5820		var i, l, srcElements, destElements,
5821			clone = elem.cloneNode( true ),
5822			inPage = jQuery.contains( elem.ownerDocument, elem );
5823
5824		// Fix IE cloning issues
5825		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
5826				!jQuery.isXMLDoc( elem ) ) {
5827
5828			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
5829			destElements = getAll( clone );
5830			srcElements = getAll( elem );
5831
5832			for ( i = 0, l = srcElements.length; i < l; i++ ) {
5833				fixInput( srcElements[ i ], destElements[ i ] );
5834			}
5835		}
5836
5837		// Copy the events from the original to the clone
5838		if ( dataAndEvents ) {
5839			if ( deepDataAndEvents ) {
5840				srcElements = srcElements || getAll( elem );
5841				destElements = destElements || getAll( clone );
5842
5843				for ( i = 0, l = srcElements.length; i < l; i++ ) {
5844					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
5845				}
5846			} else {
5847				cloneCopyEvent( elem, clone );
5848			}
5849		}
5850
5851		// Preserve script evaluation history
5852		destElements = getAll( clone, "script" );
5853		if ( destElements.length > 0 ) {
5854			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
5855		}
5856
5857		// Return the cloned set
5858		return clone;
5859	},
5860
5861	cleanData: function( elems ) {
5862		var data, elem, type,
5863			special = jQuery.event.special,
5864			i = 0;
5865
5866		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
5867			if ( acceptData( elem ) ) {
5868				if ( ( data = elem[ dataPriv.expando ] ) ) {
5869					if ( data.events ) {
5870						for ( type in data.events ) {
5871							if ( special[ type ] ) {
5872								jQuery.event.remove( elem, type );
5873
5874							// This is a shortcut to avoid jQuery.event.remove's overhead
5875							} else {
5876								jQuery.removeEvent( elem, type, data.handle );
5877							}
5878						}
5879					}
5880
vendor: 1,119 bytes, lines 5881-5925
5881					// Support: Chrome <=35 - 45+
5882					// Assign undefined instead of using delete, see Data#remove
5883					elem[ dataPriv.expando ] = undefined;
5884				}
5885				if ( elem[ dataUser.expando ] ) {
5886
5887					// Support: Chrome <=35 - 45+
5888					// Assign undefined instead of using delete, see Data#remove
5889					elem[ dataUser.expando ] = undefined;
5890				}
5891			}
5892		}
5893	}
5894} );
5895
5896jQuery.fn.extend( {
5897	detach: function( selector ) {
5898		return remove( this, selector, true );
5899	},
5900
5901	remove: function( selector ) {
5902		return remove( this, selector );
5903	},
5904
5905	text: function( value ) {
5906		return access( this, function( value ) {
5907			return value === undefined ?
5908				jQuery.text( this ) :
5909				this.empty().each( function() {
5910					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5911						this.textContent = value;
5912					}
5913				} );
5914		}, null, value, arguments.length );
5915	},
5916
5917	append: function() {
5918		return domManip( this, arguments, function( elem ) {
5919			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5920				var target = manipulationTarget( this, elem );
5921				target.appendChild( elem );
5922			}
5923		} );
5924	},
5925
vendor: 9,102 bytes, lines 5926-6275
5926	prepend: function() {
5927		return domManip( this, arguments, function( elem ) {
5928			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5929				var target = manipulationTarget( this, elem );
5930				target.insertBefore( elem, target.firstChild );
5931			}
5932		} );
5933	},
5934
5935	before: function() {
5936		return domManip( this, arguments, function( elem ) {
5937			if ( this.parentNode ) {
5938				this.parentNode.insertBefore( elem, this );
5939			}
5940		} );
5941	},
5942
5943	after: function() {
5944		return domManip( this, arguments, function( elem ) {
5945			if ( this.parentNode ) {
5946				this.parentNode.insertBefore( elem, this.nextSibling );
5947			}
5948		} );
5949	},
5950
5951	empty: function() {
5952		var elem,
5953			i = 0;
5954
5955		for ( ; ( elem = this[ i ] ) != null; i++ ) {
5956			if ( elem.nodeType === 1 ) {
5957
5958				// Prevent memory leaks
5959				jQuery.cleanData( getAll( elem, false ) );
5960
5961				// Remove any remaining nodes
5962				elem.textContent = "";
5963			}
5964		}
5965
5966		return this;
5967	},
5968
5969	clone: function( dataAndEvents, deepDataAndEvents ) {
5970		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
5971		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
5972
5973		return this.map( function() {
5974			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
5975		} );
5976	},
5977
5978	html: function( value ) {
5979		return access( this, function( value ) {
5980			var elem = this[ 0 ] || {},
5981				i = 0,
5982				l = this.length;
5983
5984			if ( value === undefined && elem.nodeType === 1 ) {
5985				return elem.innerHTML;
5986			}
5987
5988			// See if we can take a shortcut and just use innerHTML
5989			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
5990				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
5991
5992				value = jQuery.htmlPrefilter( value );
5993
5994				try {
5995					for ( ; i < l; i++ ) {
5996						elem = this[ i ] || {};
5997
5998						// Remove element nodes and prevent memory leaks
5999						if ( elem.nodeType === 1 ) {
6000							jQuery.cleanData( getAll( elem, false ) );
6001							elem.innerHTML = value;
6002						}
6003					}
6004
6005					elem = 0;
6006
6007				// If using innerHTML throws an exception, use the fallback method
6008				} catch ( e ) {}
6009			}
6010
6011			if ( elem ) {
6012				this.empty().append( value );
6013			}
6014		}, null, value, arguments.length );
6015	},
6016
6017	replaceWith: function() {
6018		var ignored = [];
6019
6020		// Make the changes, replacing each non-ignored context element with the new content
6021		return domManip( this, arguments, function( elem ) {
6022			var parent = this.parentNode;
6023
6024			if ( jQuery.inArray( this, ignored ) < 0 ) {
6025				jQuery.cleanData( getAll( this ) );
6026				if ( parent ) {
6027					parent.replaceChild( elem, this );
6028				}
6029			}
6030
6031		// Force callback invocation
6032		}, ignored );
6033	}
6034} );
6035
6036jQuery.each( {
6037	appendTo: "append",
6038	prependTo: "prepend",
6039	insertBefore: "before",
6040	insertAfter: "after",
6041	replaceAll: "replaceWith"
6042}, function( name, original ) {
6043	jQuery.fn[ name ] = function( selector ) {
6044		var elems,
6045			ret = [],
6046			insert = jQuery( selector ),
6047			last = insert.length - 1,
6048			i = 0;
6049
6050		for ( ; i <= last; i++ ) {
6051			elems = i === last ? this : this.clone( true );
6052			jQuery( insert[ i ] )[ original ]( elems );
6053
6054			// Support: Android <=4.0 only, PhantomJS 1 only
6055			// .get() because push.apply(_, arraylike) throws on ancient WebKit
6056			push.apply( ret, elems.get() );
6057		}
6058
6059		return this.pushStack( ret );
6060	};
6061} );
6062var rmargin = ( /^margin/ );
6063
6064var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6065
6066var getStyles = function( elem ) {
6067
6068		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
6069		// IE throws on elements created in popups
6070		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6071		var view = elem.ownerDocument.defaultView;
6072
6073		if ( !view || !view.opener ) {
6074			view = window;
6075		}
6076
6077		return view.getComputedStyle( elem );
6078	};
6079
6080
6081
6082( function() {
6083
6084	// Executing both pixelPosition & boxSizingReliable tests require only one layout
6085	// so they're executed at the same time to save the second computation.
6086	function computeStyleTests() {
6087
6088		// This is a singleton, we need to execute it only once
6089		if ( !div ) {
6090			return;
6091		}
6092
6093		div.style.cssText =
6094			"box-sizing:border-box;" +
6095			"position:relative;display:block;" +
6096			"margin:auto;border:1px;padding:1px;" +
6097			"top:1%;width:50%";
6098		div.innerHTML = "";
6099		documentElement.appendChild( container );
6100
6101		var divStyle = window.getComputedStyle( div );
6102		pixelPositionVal = divStyle.top !== "1%";
6103
6104		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
6105		reliableMarginLeftVal = divStyle.marginLeft === "2px";
6106		boxSizingReliableVal = divStyle.width === "4px";
6107
6108		// Support: Android 4.0 - 4.3 only
6109		// Some styles come back with percentage values, even though they shouldn't
6110		div.style.marginRight = "50%";
6111		pixelMarginRightVal = divStyle.marginRight === "4px";
6112
6113		documentElement.removeChild( container );
6114
6115		// Nullify the div so it wouldn't be stored in the memory and
6116		// it will also be a sign that checks already performed
6117		div = null;
6118	}
6119
6120	var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
6121		container = document.createElement( "div" ),
6122		div = document.createElement( "div" );
6123
6124	// Finish early in limited (non-browser) environments
6125	if ( !div.style ) {
6126		return;
6127	}
6128
6129	// Support: IE <=9 - 11 only
6130	// Style of cloned element affects source element cloned (#8908)
6131	div.style.backgroundClip = "content-box";
6132	div.cloneNode( true ).style.backgroundClip = "";
6133	support.clearCloneStyle = div.style.backgroundClip === "content-box";
6134
6135	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
6136		"padding:0;margin-top:1px;position:absolute";
6137	container.appendChild( div );
6138
6139	jQuery.extend( support, {
6140		pixelPosition: function() {
6141			computeStyleTests();
6142			return pixelPositionVal;
6143		},
6144		boxSizingReliable: function() {
6145			computeStyleTests();
6146			return boxSizingReliableVal;
6147		},
6148		pixelMarginRight: function() {
6149			computeStyleTests();
6150			return pixelMarginRightVal;
6151		},
6152		reliableMarginLeft: function() {
6153			computeStyleTests();
6154			return reliableMarginLeftVal;
6155		}
6156	} );
6157} )();
6158
6159
6160function curCSS( elem, name, computed ) {
6161	var width, minWidth, maxWidth, ret,
6162		style = elem.style;
6163
6164	computed = computed || getStyles( elem );
6165
6166	// Support: IE <=9 only
6167	// getPropertyValue is only needed for .css('filter') (#12537)
6168	if ( computed ) {
6169		ret = computed.getPropertyValue( name ) || computed[ name ];
6170
6171		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
6172			ret = jQuery.style( elem, name );
6173		}
6174
6175		// A tribute to the "awesome hack by Dean Edwards"
6176		// Android Browser returns percentage for some values,
6177		// but width seems to be reliably pixels.
6178		// This is against the CSSOM draft spec:
6179		// https://drafts.csswg.org/cssom/#resolved-values
6180		if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
6181
6182			// Remember the original values
6183			width = style.width;
6184			minWidth = style.minWidth;
6185			maxWidth = style.maxWidth;
6186
6187			// Put in the new values to get a computed value out
6188			style.minWidth = style.maxWidth = style.width = ret;
6189			ret = computed.width;
6190
6191			// Revert the changed values
6192			style.width = width;
6193			style.minWidth = minWidth;
6194			style.maxWidth = maxWidth;
6195		}
6196	}
6197
6198	return ret !== undefined ?
6199
6200		// Support: IE <=9 - 11 only
6201		// IE returns zIndex value as an integer.
6202		ret + "" :
6203		ret;
6204}
6205
6206
6207function addGetHookIf( conditionFn, hookFn ) {
6208
6209	// Define the hook, we'll check on the first run if it's really needed.
6210	return {
6211		get: function() {
6212			if ( conditionFn() ) {
6213
6214				// Hook not needed (or it's not possible to use it due
6215				// to missing dependency), remove it.
6216				delete this.get;
6217				return;
6218			}
6219
6220			// Hook needed; redefine it so that the support test is not executed again.
6221			return ( this.get = hookFn ).apply( this, arguments );
6222		}
6223	};
6224}
6225
6226
6227var
6228
6229	// Swappable if display is none or starts with table
6230	// except "table", "table-cell", or "table-caption"
6231	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6232	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6233	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6234	cssNormalTransform = {
6235		letterSpacing: "0",
6236		fontWeight: "400"
6237	},
6238
6239	cssPrefixes = [ "Webkit", "Moz", "ms" ],
6240	emptyStyle = document.createElement( "div" ).style;
6241
6242// Return a css property mapped to a potentially vendor prefixed property
6243function vendorPropName( name ) {
6244
6245	// Shortcut for names that are not vendor prefixed
6246	if ( name in emptyStyle ) {
6247		return name;
6248	}
6249
6250	// Check for vendor prefixed names
6251	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
6252		i = cssPrefixes.length;
6253
6254	while ( i-- ) {
6255		name = cssPrefixes[ i ] + capName;
6256		if ( name in emptyStyle ) {
6257			return name;
6258		}
6259	}
6260}
6261
6262function setPositiveNumber( elem, value, subtract ) {
6263
6264	// Any relative (+/-) values have already been
6265	// normalized at this point
6266	var matches = rcssNum.exec( value );
6267	return matches ?
6268
6269		// Guard against undefined "subtract", e.g., when used as in cssHooks
6270		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
6271		value;
6272}
6273
6274function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
6275	var i
vendor: 9,745 bytes, lines 6275-6632
6275,
6276		val = 0;
6277
6278	// If we already have the right measurement, avoid augmentation
6279	if ( extra === ( isBorderBox ? "border" : "content" ) ) {
6280		i = 4;
6281
6282	// Otherwise initialize for horizontal or vertical properties
6283	} else {
6284		i = name === "width" ? 1 : 0;
6285	}
6286
6287	for ( ; i < 4; i += 2 ) {
6288
6289		// Both box models exclude margin, so add it if we want it
6290		if ( extra === "margin" ) {
6291			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
6292		}
6293
6294		if ( isBorderBox ) {
6295
6296			// border-box includes padding, so remove it if we want content
6297			if ( extra === "content" ) {
6298				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6299			}
6300
6301			// At this point, extra isn't border nor margin, so remove border
6302			if ( extra !== "margin" ) {
6303				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6304			}
6305		} else {
6306
6307			// At this point, extra isn't content, so add padding
6308			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6309
6310			// At this point, extra isn't content nor padding, so add border
6311			if ( extra !== "padding" ) {
6312				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6313			}
6314		}
6315	}
6316
6317	return val;
6318}
6319
6320function getWidthOrHeight( elem, name, extra ) {
6321
6322	// Start with offset property, which is equivalent to the border-box value
6323	var val,
6324		valueIsBorderBox = true,
6325		styles = getStyles( elem ),
6326		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
6327
6328	// Support: IE <=11 only
6329	// Running getBoundingClientRect on a disconnected node
6330	// in IE throws an error.
6331	if ( elem.getClientRects().length ) {
6332		val = elem.getBoundingClientRect()[ name ];
6333	}
6334
6335	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
6336	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
6337	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
6338	if ( val <= 0 || val == null ) {
6339
6340		// Fall back to computed then uncomputed css if necessary
6341		val = curCSS( elem, name, styles );
6342		if ( val < 0 || val == null ) {
6343			val = elem.style[ name ];
6344		}
6345
6346		// Computed unit is not pixels. Stop here and return.
6347		if ( rnumnonpx.test( val ) ) {
6348			return val;
6349		}
6350
6351		// Check for style in case a browser which returns unreliable values
6352		// for getComputedStyle silently falls back to the reliable elem.style
6353		valueIsBorderBox = isBorderBox &&
6354			( support.boxSizingReliable() || val === elem.style[ name ] );
6355
6356		// Normalize "", auto, and prepare for extra
6357		val = parseFloat( val ) || 0;
6358	}
6359
6360	// Use the active box-sizing model to add/subtract irrelevant styles
6361	return ( val +
6362		augmentWidthOrHeight(
6363			elem,
6364			name,
6365			extra || ( isBorderBox ? "border" : "content" ),
6366			valueIsBorderBox,
6367			styles
6368		)
6369	) + "px";
6370}
6371
6372jQuery.extend( {
6373
6374	// Add in style property hooks for overriding the default
6375	// behavior of getting and setting a style property
6376	cssHooks: {
6377		opacity: {
6378			get: function( elem, computed ) {
6379				if ( computed ) {
6380
6381					// We should always get a number back from opacity
6382					var ret = curCSS( elem, "opacity" );
6383					return ret === "" ? "1" : ret;
6384				}
6385			}
6386		}
6387	},
6388
6389	// Don't automatically add "px" to these possibly-unitless properties
6390	cssNumber: {
6391		"animationIterationCount": true,
6392		"columnCount": true,
6393		"fillOpacity": true,
6394		"flexGrow": true,
6395		"flexShrink": true,
6396		"fontWeight": true,
6397		"lineHeight": true,
6398		"opacity": true,
6399		"order": true,
6400		"orphans": true,
6401		"widows": true,
6402		"zIndex": true,
6403		"zoom": true
6404	},
6405
6406	// Add in properties whose names you wish to fix before
6407	// setting or getting the value
6408	cssProps: {
6409		"float": "cssFloat"
6410	},
6411
6412	// Get and set the style property on a DOM Node
6413	style: function( elem, name, value, extra ) {
6414
6415		// Don't set styles on text and comment nodes
6416		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6417			return;
6418		}
6419
6420		// Make sure that we're working with the right name
6421		var ret, type, hooks,
6422			origName = jQuery.camelCase( name ),
6423			style = elem.style;
6424
6425		name = jQuery.cssProps[ origName ] ||
6426			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
6427
6428		// Gets hook for the prefixed version, then unprefixed version
6429		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6430
6431		// Check if we're setting a value
6432		if ( value !== undefined ) {
6433			type = typeof value;
6434
6435			// Convert "+=" or "-=" to relative numbers (#7345)
6436			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
6437				value = adjustCSS( elem, name, ret );
6438
6439				// Fixes bug #9237
6440				type = "number";
6441			}
6442
6443			// Make sure that null and NaN values aren't set (#7116)
6444			if ( value == null || value !== value ) {
6445				return;
6446			}
6447
6448			// If a number was passed in, add the unit (except for certain CSS properties)
6449			if ( type === "number" ) {
6450				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
6451			}
6452
6453			// background-* props affect original clone's values
6454			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
6455				style[ name ] = "inherit";
6456			}
6457
6458			// If a hook was provided, use that value, otherwise just set the specified value
6459			if ( !hooks || !( "set" in hooks ) ||
6460				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
6461
6462				style[ name ] = value;
6463			}
6464
6465		} else {
6466
6467			// If a hook was provided get the non-computed value from there
6468			if ( hooks && "get" in hooks &&
6469				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
6470
6471				return ret;
6472			}
6473
6474			// Otherwise just get the value from the style object
6475			return style[ name ];
6476		}
6477	},
6478
6479	css: function( elem, name, extra, styles ) {
6480		var val, num, hooks,
6481			origName = jQuery.camelCase( name );
6482
6483		// Make sure that we're working with the right name
6484		name = jQuery.cssProps[ origName ] ||
6485			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
6486
6487		// Try prefixed name followed by the unprefixed name
6488		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6489
6490		// If a hook was provided get the computed value from there
6491		if ( hooks && "get" in hooks ) {
6492			val = hooks.get( elem, true, extra );
6493		}
6494
6495		// Otherwise, if a way to get the computed value exists, use that
6496		if ( val === undefined ) {
6497			val = curCSS( elem, name, styles );
6498		}
6499
6500		// Convert "normal" to computed value
6501		if ( val === "normal" && name in cssNormalTransform ) {
6502			val = cssNormalTransform[ name ];
6503		}
6504
6505		// Make numeric if forced or a qualifier was provided and val looks numeric
6506		if ( extra === "" || extra ) {
6507			num = parseFloat( val );
6508			return extra === true || isFinite( num ) ? num || 0 : val;
6509		}
6510		return val;
6511	}
6512} );
6513
6514jQuery.each( [ "height", "width" ], function( i, name ) {
6515	jQuery.cssHooks[ name ] = {
6516		get: function( elem, computed, extra ) {
6517			if ( computed ) {
6518
6519				// Certain elements can have dimension info if we invisibly show them
6520				// but it must have a current display style that would benefit
6521				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
6522
6523					// Support: Safari 8+
6524					// Table columns in Safari have non-zero offsetWidth & zero
6525					// getBoundingClientRect().width unless display is changed.
6526					// Support: IE <=11 only
6527					// Running getBoundingClientRect on a disconnected node
6528					// in IE throws an error.
6529					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
6530						swap( elem, cssShow, function() {
6531							return getWidthOrHeight( elem, name, extra );
6532						} ) :
6533						getWidthOrHeight( elem, name, extra );
6534			}
6535		},
6536
6537		set: function( elem, value, extra ) {
6538			var matches,
6539				styles = extra && getStyles( elem ),
6540				subtract = extra && augmentWidthOrHeight(
6541					elem,
6542					name,
6543					extra,
6544					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
6545					styles
6546				);
6547
6548			// Convert to pixels if value adjustment is needed
6549			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
6550				( matches[ 3 ] || "px" ) !== "px" ) {
6551
6552				elem.style[ name ] = value;
6553				value = jQuery.css( elem, name );
6554			}
6555
6556			return setPositiveNumber( elem, value, subtract );
6557		}
6558	};
6559} );
6560
6561jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
6562	function( elem, computed ) {
6563		if ( computed ) {
6564			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
6565				elem.getBoundingClientRect().left -
6566					swap( elem, { marginLeft: 0 }, function() {
6567						return elem.getBoundingClientRect().left;
6568					} )
6569				) + "px";
6570		}
6571	}
6572);
6573
6574// These hooks are used by animate to expand properties
6575jQuery.each( {
6576	margin: "",
6577	padding: "",
6578	border: "Width"
6579}, function( prefix, suffix ) {
6580	jQuery.cssHooks[ prefix + suffix ] = {
6581		expand: function( value ) {
6582			var i = 0,
6583				expanded = {},
6584
6585				// Assumes a single number if not a string
6586				parts = typeof value === "string" ? value.split( " " ) : [ value ];
6587
6588			for ( ; i < 4; i++ ) {
6589				expanded[ prefix + cssExpand[ i ] + suffix ] =
6590					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
6591			}
6592
6593			return expanded;
6594		}
6595	};
6596
6597	if ( !rmargin.test( prefix ) ) {
6598		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
6599	}
6600} );
6601
6602jQuery.fn.extend( {
6603	css: function( name, value ) {
6604		return access( this, function( elem, name, value ) {
6605			var styles, len,
6606				map = {},
6607				i = 0;
6608
6609			if ( jQuery.isArray( name ) ) {
6610				styles = getStyles( elem );
6611				len = name.length;
6612
6613				for ( ; i < len; i++ ) {
6614					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
6615				}
6616
6617				return map;
6618			}
6619
6620			return value !== undefined ?
6621				jQuery.style( elem, name, value ) :
6622				jQuery.css( elem, name );
6623		}, name, value, arguments.length > 1 );
6624	}
6625} );
6626
6627
6628function Tween( elem, options, prop, end, easing ) {
6629	return new Tween.prototype.init( elem, options, prop, end, easing );
6630}
6631jQuery.Tween = Tween;
6632
vendor: 6,060 bytes, lines 6633-6866
6633Tween.prototype = {
6634	constructor: Tween,
6635	init: function( elem, options, prop, end, easing, unit ) {
6636		this.elem = elem;
6637		this.prop = prop;
6638		this.easing = easing || jQuery.easing._default;
6639		this.options = options;
6640		this.start = this.now = this.cur();
6641		this.end = end;
6642		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
6643	},
6644	cur: function() {
6645		var hooks = Tween.propHooks[ this.prop ];
6646
6647		return hooks && hooks.get ?
6648			hooks.get( this ) :
6649			Tween.propHooks._default.get( this );
6650	},
6651	run: function( percent ) {
6652		var eased,
6653			hooks = Tween.propHooks[ this.prop ];
6654
6655		if ( this.options.duration ) {
6656			this.pos = eased = jQuery.easing[ this.easing ](
6657				percent, this.options.duration * percent, 0, 1, this.options.duration
6658			);
6659		} else {
6660			this.pos = eased = percent;
6661		}
6662		this.now = ( this.end - this.start ) * eased + this.start;
6663
6664		if ( this.options.step ) {
6665			this.options.step.call( this.elem, this.now, this );
6666		}
6667
6668		if ( hooks && hooks.set ) {
6669			hooks.set( this );
6670		} else {
6671			Tween.propHooks._default.set( this );
6672		}
6673		return this;
6674	}
6675};
6676
6677Tween.prototype.init.prototype = Tween.prototype;
6678
6679Tween.propHooks = {
6680	_default: {
6681		get: function( tween ) {
6682			var result;
6683
6684			// Use a property on the element directly when it is not a DOM element,
6685			// or when there is no matching style property that exists.
6686			if ( tween.elem.nodeType !== 1 ||
6687				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
6688				return tween.elem[ tween.prop ];
6689			}
6690
6691			// Passing an empty string as a 3rd parameter to .css will automatically
6692			// attempt a parseFloat and fallback to a string if the parse fails.
6693			// Simple values such as "10px" are parsed to Float;
6694			// complex values such as "rotate(1rad)" are returned as-is.
6695			result = jQuery.css( tween.elem, tween.prop, "" );
6696
6697			// Empty strings, null, undefined and "auto" are converted to 0.
6698			return !result || result === "auto" ? 0 : result;
6699		},
6700		set: function( tween ) {
6701
6702			// Use step hook for back compat.
6703			// Use cssHook if its there.
6704			// Use .style if available and use plain properties where available.
6705			if ( jQuery.fx.step[ tween.prop ] ) {
6706				jQuery.fx.step[ tween.prop ]( tween );
6707			} else if ( tween.elem.nodeType === 1 &&
6708				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
6709					jQuery.cssHooks[ tween.prop ] ) ) {
6710				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
6711			} else {
6712				tween.elem[ tween.prop ] = tween.now;
6713			}
6714		}
6715	}
6716};
6717
6718// Support: IE <=9 only
6719// Panic based approach to setting things on disconnected nodes
6720Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
6721	set: function( tween ) {
6722		if ( tween.elem.nodeType && tween.elem.parentNode ) {
6723			tween.elem[ tween.prop ] = tween.now;
6724		}
6725	}
6726};
6727
6728jQuery.easing = {
6729	linear: function( p ) {
6730		return p;
6731	},
6732	swing: function( p ) {
6733		return 0.5 - Math.cos( p * Math.PI ) / 2;
6734	},
6735	_default: "swing"
6736};
6737
6738jQuery.fx = Tween.prototype.init;
6739
6740// Back compat <1.8 extension point
6741jQuery.fx.step = {};
6742
6743
6744
6745
6746var
6747	fxNow, timerId,
6748	rfxtypes = /^(?:toggle|show|hide)$/,
6749	rrun = /queueHooks$/;
6750
6751function raf() {
6752	if ( timerId ) {
6753		window.requestAnimationFrame( raf );
6754		jQuery.fx.tick();
6755	}
6756}
6757
6758// Animations created synchronously will run synchronously
6759function createFxNow() {
6760	window.setTimeout( function() {
6761		fxNow = undefined;
6762	} );
6763	return ( fxNow = jQuery.now() );
6764}
6765
6766// Generate parameters to create a standard animation
6767function genFx( type, includeWidth ) {
6768	var which,
6769		i = 0,
6770		attrs = { height: type };
6771
6772	// If we include width, step value is 1 to do all cssExpand values,
6773	// otherwise step value is 2 to skip over Left and Right
6774	includeWidth = includeWidth ? 1 : 0;
6775	for ( ; i < 4; i += 2 - includeWidth ) {
6776		which = cssExpand[ i ];
6777		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
6778	}
6779
6780	if ( includeWidth ) {
6781		attrs.opacity = attrs.width = type;
6782	}
6783
6784	return attrs;
6785}
6786
6787function createTween( value, prop, animation ) {
6788	var tween,
6789		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
6790		index = 0,
6791		length = collection.length;
6792	for ( ; index < length; index++ ) {
6793		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
6794
6795			// We're done with this property
6796			return tween;
6797		}
6798	}
6799}
6800
6801function defaultPrefilter( elem, props, opts ) {
6802	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
6803		isBox = "width" in props || "height" in props,
6804		anim = this,
6805		orig = {},
6806		style = elem.style,
6807		hidden = elem.nodeType && isHiddenWithinTree( elem ),
6808		dataShow = dataPriv.get( elem, "fxshow" );
6809
6810	// Queue-skipping animations hijack the fx hooks
6811	if ( !opts.queue ) {
6812		hooks = jQuery._queueHooks( elem, "fx" );
6813		if ( hooks.unqueued == null ) {
6814			hooks.unqueued = 0;
6815			oldfire = hooks.empty.fire;
6816			hooks.empty.fire = function() {
6817				if ( !hooks.unqueued ) {
6818					oldfire();
6819				}
6820			};
6821		}
6822		hooks.unqueued++;
6823
6824		anim.always( function() {
6825
6826			// Ensure the complete handler is called before this completes
6827			anim.always( function() {
6828				hooks.unqueued--;
6829				if ( !jQuery.queue( elem, "fx" ).length ) {
6830					hooks.empty.fire();
6831				}
6832			} );
6833		} );
6834	}
6835
6836	// Detect show/hide animations
6837	for ( prop in props ) {
6838		value = props[ prop ];
6839		if ( rfxtypes.test( value ) ) {
6840			delete props[ prop ];
6841			toggle = toggle || value === "toggle";
6842			if ( value === ( hidden ? "hide" : "show" ) ) {
6843
6844				// Pretend to be hidden if this is a "show" and
6845				// there is still data from a stopped show/hide
6846				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
6847					hidden = true;
6848
6849				// Ignore all other no-op show/hide data
6850				} else {
6851					continue;
6852				}
6853			}
6854			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
6855		}
6856	}
6857
6858	// Bail out if this is a no-op like .hide().hide()
6859	propTween = !jQuery.isEmptyObject( props );
6860	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
6861		return;
6862	}
6863
6864	// Restrict "overflow" and "display" styles during box animations
6865	if ( isBox && elem.nodeType === 1 ) {
6866
vendor: 4,174 bytes, lines 6867-7025
6867		// Support: IE <=9 - 11, Edge 12 - 13
6868		// Record all 3 overflow attributes because IE does not infer the shorthand
6869		// from identically-valued overflowX and overflowY
6870		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
6871
6872		// Identify a display type, preferring old show/hide data over the CSS cascade
6873		restoreDisplay = dataShow && dataShow.display;
6874		if ( restoreDisplay == null ) {
6875			restoreDisplay = dataPriv.get( elem, "display" );
6876		}
6877		display = jQuery.css( elem, "display" );
6878		if ( display === "none" ) {
6879			if ( restoreDisplay ) {
6880				display = restoreDisplay;
6881			} else {
6882
6883				// Get nonempty value(s) by temporarily forcing visibility
6884				showHide( [ elem ], true );
6885				restoreDisplay = elem.style.display || restoreDisplay;
6886				display = jQuery.css( elem, "display" );
6887				showHide( [ elem ] );
6888			}
6889		}
6890
6891		// Animate inline elements as inline-block
6892		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
6893			if ( jQuery.css( elem, "float" ) === "none" ) {
6894
6895				// Restore the original display value at the end of pure show/hide animations
6896				if ( !propTween ) {
6897					anim.done( function() {
6898						style.display = restoreDisplay;
6899					} );
6900					if ( restoreDisplay == null ) {
6901						display = style.display;
6902						restoreDisplay = display === "none" ? "" : display;
6903					}
6904				}
6905				style.display = "inline-block";
6906			}
6907		}
6908	}
6909
6910	if ( opts.overflow ) {
6911		style.overflow = "hidden";
6912		anim.always( function() {
6913			style.overflow = opts.overflow[ 0 ];
6914			style.overflowX = opts.overflow[ 1 ];
6915			style.overflowY = opts.overflow[ 2 ];
6916		} );
6917	}
6918
6919	// Implement show/hide animations
6920	propTween = false;
6921	for ( prop in orig ) {
6922
6923		// General show/hide setup for this element animation
6924		if ( !propTween ) {
6925			if ( dataShow ) {
6926				if ( "hidden" in dataShow ) {
6927					hidden = dataShow.hidden;
6928				}
6929			} else {
6930				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
6931			}
6932
6933			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
6934			if ( toggle ) {
6935				dataShow.hidden = !hidden;
6936			}
6937
6938			// Show elements before animating them
6939			if ( hidden ) {
6940				showHide( [ elem ], true );
6941			}
6942
6943			/* eslint-disable no-loop-func */
6944
6945			anim.done( function() {
6946
6947			/* eslint-enable no-loop-func */
6948
6949				// The final step of a "hide" animation is actually hiding the element
6950				if ( !hidden ) {
6951					showHide( [ elem ] );
6952				}
6953				dataPriv.remove( elem, "fxshow" );
6954				for ( prop in orig ) {
6955					jQuery.style( elem, prop, orig[ prop ] );
6956				}
6957			} );
6958		}
6959
6960		// Per-property setup
6961		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
6962		if ( !( prop in dataShow ) ) {
6963			dataShow[ prop ] = propTween.start;
6964			if ( hidden ) {
6965				propTween.end = propTween.start;
6966				propTween.start = 0;
6967			}
6968		}
6969	}
6970}
6971
6972function propFilter( props, specialEasing ) {
6973	var index, name, easing, value, hooks;
6974
6975	// camelCase, specialEasing and expand cssHook pass
6976	for ( index in props ) {
6977		name = jQuery.camelCase( index );
6978		easing = specialEasing[ name ];
6979		value = props[ index ];
6980		if ( jQuery.isArray( value ) ) {
6981			easing = value[ 1 ];
6982			value = props[ index ] = value[ 0 ];
6983		}
6984
6985		if ( index !== name ) {
6986			props[ name ] = value;
6987			delete props[ index ];
6988		}
6989
6990		hooks = jQuery.cssHooks[ name ];
6991		if ( hooks && "expand" in hooks ) {
6992			value = hooks.expand( value );
6993			delete props[ name ];
6994
6995			// Not quite $.extend, this won't overwrite existing keys.
6996			// Reusing 'index' because we have the correct "name"
6997			for ( index in value ) {
6998				if ( !( index in props ) ) {
6999					props[ index ] = value[ index ];
7000					specialEasing[ index ] = easing;
7001				}
7002			}
7003		} else {
7004			specialEasing[ name ] = easing;
7005		}
7006	}
7007}
7008
7009function Animation( elem, properties, options ) {
7010	var result,
7011		stopped,
7012		index = 0,
7013		length = Animation.prefilters.length,
7014		deferred = jQuery.Deferred().always( function() {
7015
7016			// Don't match elem in the :animated selector
7017			delete tick.elem;
7018		} ),
7019		tick = function() {
7020			if ( stopped ) {
7021				return false;
7022			}
7023			var currentTime = fxNow || createFxNow(),
7024				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
7025
vendor: 6,479 bytes, lines 7026-7275
7026				// Support: Android 2.3 only
7027				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
7028				temp = remaining / animation.duration || 0,
7029				percent = 1 - temp,
7030				index = 0,
7031				length = animation.tweens.length;
7032
7033			for ( ; index < length; index++ ) {
7034				animation.tweens[ index ].run( percent );
7035			}
7036
7037			deferred.notifyWith( elem, [ animation, percent, remaining ] );
7038
7039			if ( percent < 1 && length ) {
7040				return remaining;
7041			} else {
7042				deferred.resolveWith( elem, [ animation ] );
7043				return false;
7044			}
7045		},
7046		animation = deferred.promise( {
7047			elem: elem,
7048			props: jQuery.extend( {}, properties ),
7049			opts: jQuery.extend( true, {
7050				specialEasing: {},
7051				easing: jQuery.easing._default
7052			}, options ),
7053			originalProperties: properties,
7054			originalOptions: options,
7055			startTime: fxNow || createFxNow(),
7056			duration: options.duration,
7057			tweens: [],
7058			createTween: function( prop, end ) {
7059				var tween = jQuery.Tween( elem, animation.opts, prop, end,
7060						animation.opts.specialEasing[ prop ] || animation.opts.easing );
7061				animation.tweens.push( tween );
7062				return tween;
7063			},
7064			stop: function( gotoEnd ) {
7065				var index = 0,
7066
7067					// If we are going to the end, we want to run all the tweens
7068					// otherwise we skip this part
7069					length = gotoEnd ? animation.tweens.length : 0;
7070				if ( stopped ) {
7071					return this;
7072				}
7073				stopped = true;
7074				for ( ; index < length; index++ ) {
7075					animation.tweens[ index ].run( 1 );
7076				}
7077
7078				// Resolve when we played the last frame; otherwise, reject
7079				if ( gotoEnd ) {
7080					deferred.notifyWith( elem, [ animation, 1, 0 ] );
7081					deferred.resolveWith( elem, [ animation, gotoEnd ] );
7082				} else {
7083					deferred.rejectWith( elem, [ animation, gotoEnd ] );
7084				}
7085				return this;
7086			}
7087		} ),
7088		props = animation.props;
7089
7090	propFilter( props, animation.opts.specialEasing );
7091
7092	for ( ; index < length; index++ ) {
7093		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
7094		if ( result ) {
7095			if ( jQuery.isFunction( result.stop ) ) {
7096				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
7097					jQuery.proxy( result.stop, result );
7098			}
7099			return result;
7100		}
7101	}
7102
7103	jQuery.map( props, createTween, animation );
7104
7105	if ( jQuery.isFunction( animation.opts.start ) ) {
7106		animation.opts.start.call( elem, animation );
7107	}
7108
7109	jQuery.fx.timer(
7110		jQuery.extend( tick, {
7111			elem: elem,
7112			anim: animation,
7113			queue: animation.opts.queue
7114		} )
7115	);
7116
7117	// attach callbacks from options
7118	return animation.progress( animation.opts.progress )
7119		.done( animation.opts.done, animation.opts.complete )
7120		.fail( animation.opts.fail )
7121		.always( animation.opts.always );
7122}
7123
7124jQuery.Animation = jQuery.extend( Animation, {
7125
7126	tweeners: {
7127		"*": [ function( prop, value ) {
7128			var tween = this.createTween( prop, value );
7129			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
7130			return tween;
7131		} ]
7132	},
7133
7134	tweener: function( props, callback ) {
7135		if ( jQuery.isFunction( props ) ) {
7136			callback = props;
7137			props = [ "*" ];
7138		} else {
7139			props = props.match( rnothtmlwhite );
7140		}
7141
7142		var prop,
7143			index = 0,
7144			length = props.length;
7145
7146		for ( ; index < length; index++ ) {
7147			prop = props[ index ];
7148			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
7149			Animation.tweeners[ prop ].unshift( callback );
7150		}
7151	},
7152
7153	prefilters: [ defaultPrefilter ],
7154
7155	prefilter: function( callback, prepend ) {
7156		if ( prepend ) {
7157			Animation.prefilters.unshift( callback );
7158		} else {
7159			Animation.prefilters.push( callback );
7160		}
7161	}
7162} );
7163
7164jQuery.speed = function( speed, easing, fn ) {
7165	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
7166		complete: fn || !fn && easing ||
7167			jQuery.isFunction( speed ) && speed,
7168		duration: speed,
7169		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
7170	};
7171
7172	// Go to the end state if fx are off or if document is hidden
7173	if ( jQuery.fx.off || document.hidden ) {
7174		opt.duration = 0;
7175
7176	} else {
7177		if ( typeof opt.duration !== "number" ) {
7178			if ( opt.duration in jQuery.fx.speeds ) {
7179				opt.duration = jQuery.fx.speeds[ opt.duration ];
7180
7181			} else {
7182				opt.duration = jQuery.fx.speeds._default;
7183			}
7184		}
7185	}
7186
7187	// Normalize opt.queue - true/undefined/null -> "fx"
7188	if ( opt.queue == null || opt.queue === true ) {
7189		opt.queue = "fx";
7190	}
7191
7192	// Queueing
7193	opt.old = opt.complete;
7194
7195	opt.complete = function() {
7196		if ( jQuery.isFunction( opt.old ) ) {
7197			opt.old.call( this );
7198		}
7199
7200		if ( opt.queue ) {
7201			jQuery.dequeue( this, opt.queue );
7202		}
7203	};
7204
7205	return opt;
7206};
7207
7208jQuery.fn.extend( {
7209	fadeTo: function( speed, to, easing, callback ) {
7210
7211		// Show any hidden elements after setting opacity to 0
7212		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
7213
7214			// Animate to the value specified
7215			.end().animate( { opacity: to }, speed, easing, callback );
7216	},
7217	animate: function( prop, speed, easing, callback ) {
7218		var empty = jQuery.isEmptyObject( prop ),
7219			optall = jQuery.speed( speed, easing, callback ),
7220			doAnimation = function() {
7221
7222				// Operate on a copy of prop so per-property easing won't be lost
7223				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
7224
7225				// Empty animations, or finishing resolves immediately
7226				if ( empty || dataPriv.get( this, "finish" ) ) {
7227					anim.stop( true );
7228				}
7229			};
7230			doAnimation.finish = doAnimation;
7231
7232		return empty || optall.queue === false ?
7233			this.each( doAnimation ) :
7234			this.queue( optall.queue, doAnimation );
7235	},
7236	stop: function( type, clearQueue, gotoEnd ) {
7237		var stopQueue = function( hooks ) {
7238			var stop = hooks.stop;
7239			delete hooks.stop;
7240			stop( gotoEnd );
7241		};
7242
7243		if ( typeof type !== "string" ) {
7244			gotoEnd = clearQueue;
7245			clearQueue = type;
7246			type = undefined;
7247		}
7248		if ( clearQueue && type !== false ) {
7249			this.queue( type || "fx", [] );
7250		}
7251
7252		return this.each( function() {
7253			var dequeue = true,
7254				index = type != null && type + "queueHooks",
7255				timers = jQuery.timers,
7256				data = dataPriv.get( this );
7257
7258			if ( index ) {
7259				if ( data[ index ] && data[ index ].stop ) {
7260					stopQueue( data[ index ] );
7261				}
7262			} else {
7263				for ( index in data ) {
7264					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
7265						stopQueue( data[ index ] );
7266					}
7267				}
7268			}
7269
7270			for ( index = timers.length; index--; ) {
7271				if ( timers[ index ].elem === this &&
7272					( type == null || timers[ index ].queue === type ) ) {
7273
7274					timers[ index ].anim.stop( gotoEnd );
7275					dequeue = false;
vendor: 3,274 bytes, lines 7276-7415
7276					timers.splice( index, 1 );
7277				}
7278			}
7279
7280			// Start the next in the queue if the last step wasn't forced.
7281			// Timers currently will call their complete callbacks, which
7282			// will dequeue but only if they were gotoEnd.
7283			if ( dequeue || !gotoEnd ) {
7284				jQuery.dequeue( this, type );
7285			}
7286		} );
7287	},
7288	finish: function( type ) {
7289		if ( type !== false ) {
7290			type = type || "fx";
7291		}
7292		return this.each( function() {
7293			var index,
7294				data = dataPriv.get( this ),
7295				queue = data[ type + "queue" ],
7296				hooks = data[ type + "queueHooks" ],
7297				timers = jQuery.timers,
7298				length = queue ? queue.length : 0;
7299
7300			// Enable finishing flag on private data
7301			data.finish = true;
7302
7303			// Empty the queue first
7304			jQuery.queue( this, type, [] );
7305
7306			if ( hooks && hooks.stop ) {
7307				hooks.stop.call( this, true );
7308			}
7309
7310			// Look for any active animations, and finish them
7311			for ( index = timers.length; index--; ) {
7312				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
7313					timers[ index ].anim.stop( true );
7314					timers.splice( index, 1 );
7315				}
7316			}
7317
7318			// Look for any animations in the old queue and finish them
7319			for ( index = 0; index < length; index++ ) {
7320				if ( queue[ index ] && queue[ index ].finish ) {
7321					queue[ index ].finish.call( this );
7322				}
7323			}
7324
7325			// Turn off finishing flag
7326			delete data.finish;
7327		} );
7328	}
7329} );
7330
7331jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
7332	var cssFn = jQuery.fn[ name ];
7333	jQuery.fn[ name ] = function( speed, easing, callback ) {
7334		return speed == null || typeof speed === "boolean" ?
7335			cssFn.apply( this, arguments ) :
7336			this.animate( genFx( name, true ), speed, easing, callback );
7337	};
7338} );
7339
7340// Generate shortcuts for custom animations
7341jQuery.each( {
7342	slideDown: genFx( "show" ),
7343	slideUp: genFx( "hide" ),
7344	slideToggle: genFx( "toggle" ),
7345	fadeIn: { opacity: "show" },
7346	fadeOut: { opacity: "hide" },
7347	fadeToggle: { opacity: "toggle" }
7348}, function( name, props ) {
7349	jQuery.fn[ name ] = function( speed, easing, callback ) {
7350		return this.animate( props, speed, easing, callback );
7351	};
7352} );
7353
7354jQuery.timers = [];
7355jQuery.fx.tick = function() {
7356	var timer,
7357		i = 0,
7358		timers = jQuery.timers;
7359
7360	fxNow = jQuery.now();
7361
7362	for ( ; i < timers.length; i++ ) {
7363		timer = timers[ i ];
7364
7365		// Checks the timer has not already been removed
7366		if ( !timer() && timers[ i ] === timer ) {
7367			timers.splice( i--, 1 );
7368		}
7369	}
7370
7371	if ( !timers.length ) {
7372		jQuery.fx.stop();
7373	}
7374	fxNow = undefined;
7375};
7376
7377jQuery.fx.timer = function( timer ) {
7378	jQuery.timers.push( timer );
7379	if ( timer() ) {
7380		jQuery.fx.start();
7381	} else {
7382		jQuery.timers.pop();
7383	}
7384};
7385
7386jQuery.fx.interval = 13;
7387jQuery.fx.start = function() {
7388	if ( !timerId ) {
7389		timerId = window.requestAnimationFrame ?
7390			window.requestAnimationFrame( raf ) :
7391			window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
7392	}
7393};
7394
7395jQuery.fx.stop = function() {
7396	if ( window.cancelAnimationFrame ) {
7397		window.cancelAnimationFrame( timerId );
7398	} else {
7399		window.clearInterval( timerId );
7400	}
7401
7402	timerId = null;
7403};
7404
7405jQuery.fx.speeds = {
7406	slow: 600,
7407	fast: 200,
7408
7409	// Default speed
7410	_default: 400
7411};
7412
7413
7414// Based off of the plugin by Clint Helfers, with permission.
7415// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
vendor: 11,255 bytes, lines 7416-7888
7416jQuery.fn.delay = function( time, type ) {
7417	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7418	type = type || "fx";
7419
7420	return this.queue( type, function( next, hooks ) {
7421		var timeout = window.setTimeout( next, time );
7422		hooks.stop = function() {
7423			window.clearTimeout( timeout );
7424		};
7425	} );
7426};
7427
7428
7429( function() {
7430	var input = document.createElement( "input" ),
7431		select = document.createElement( "select" ),
7432		opt = select.appendChild( document.createElement( "option" ) );
7433
7434	input.type = "checkbox";
7435
7436	// Support: Android <=4.3 only
7437	// Default value for a checkbox should be "on"
7438	support.checkOn = input.value !== "";
7439
7440	// Support: IE <=11 only
7441	// Must access selectedIndex to make default options select
7442	support.optSelected = opt.selected;
7443
7444	// Support: IE <=11 only
7445	// An input loses its value after becoming a radio
7446	input = document.createElement( "input" );
7447	input.value = "t";
7448	input.type = "radio";
7449	support.radioValue = input.value === "t";
7450} )();
7451
7452
7453var boolHook,
7454	attrHandle = jQuery.expr.attrHandle;
7455
7456jQuery.fn.extend( {
7457	attr: function( name, value ) {
7458		return access( this, jQuery.attr, name, value, arguments.length > 1 );
7459	},
7460
7461	removeAttr: function( name ) {
7462		return this.each( function() {
7463			jQuery.removeAttr( this, name );
7464		} );
7465	}
7466} );
7467
7468jQuery.extend( {
7469	attr: function( elem, name, value ) {
7470		var ret, hooks,
7471			nType = elem.nodeType;
7472
7473		// Don't get/set attributes on text, comment and attribute nodes
7474		if ( nType === 3 || nType === 8 || nType === 2 ) {
7475			return;
7476		}
7477
7478		// Fallback to prop when attributes are not supported
7479		if ( typeof elem.getAttribute === "undefined" ) {
7480			return jQuery.prop( elem, name, value );
7481		}
7482
7483		// Attribute hooks are determined by the lowercase version
7484		// Grab necessary hook if one is defined
7485		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7486			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
7487				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
7488		}
7489
7490		if ( value !== undefined ) {
7491			if ( value === null ) {
7492				jQuery.removeAttr( elem, name );
7493				return;
7494			}
7495
7496			if ( hooks && "set" in hooks &&
7497				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
7498				return ret;
7499			}
7500
7501			elem.setAttribute( name, value + "" );
7502			return value;
7503		}
7504
7505		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
7506			return ret;
7507		}
7508
7509		ret = jQuery.find.attr( elem, name );
7510
7511		// Non-existent attributes return null, we normalize to undefined
7512		return ret == null ? undefined : ret;
7513	},
7514
7515	attrHooks: {
7516		type: {
7517			set: function( elem, value ) {
7518				if ( !support.radioValue && value === "radio" &&
7519					jQuery.nodeName( elem, "input" ) ) {
7520					var val = elem.value;
7521					elem.setAttribute( "type", value );
7522					if ( val ) {
7523						elem.value = val;
7524					}
7525					return value;
7526				}
7527			}
7528		}
7529	},
7530
7531	removeAttr: function( elem, value ) {
7532		var name,
7533			i = 0,
7534
7535			// Attribute names can contain non-HTML whitespace characters
7536			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
7537			attrNames = value && value.match( rnothtmlwhite );
7538
7539		if ( attrNames && elem.nodeType === 1 ) {
7540			while ( ( name = attrNames[ i++ ] ) ) {
7541				elem.removeAttribute( name );
7542			}
7543		}
7544	}
7545} );
7546
7547// Hooks for boolean attributes
7548boolHook = {
7549	set: function( elem, value, name ) {
7550		if ( value === false ) {
7551
7552			// Remove boolean attributes when set to false
7553			jQuery.removeAttr( elem, name );
7554		} else {
7555			elem.setAttribute( name, name );
7556		}
7557		return name;
7558	}
7559};
7560
7561jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
7562	var getter = attrHandle[ name ] || jQuery.find.attr;
7563
7564	attrHandle[ name ] = function( elem, name, isXML ) {
7565		var ret, handle,
7566			lowercaseName = name.toLowerCase();
7567
7568		if ( !isXML ) {
7569
7570			// Avoid an infinite loop by temporarily removing this function from the getter
7571			handle = attrHandle[ lowercaseName ];
7572			attrHandle[ lowercaseName ] = ret;
7573			ret = getter( elem, name, isXML ) != null ?
7574				lowercaseName :
7575				null;
7576			attrHandle[ lowercaseName ] = handle;
7577		}
7578		return ret;
7579	};
7580} );
7581
7582
7583
7584
7585var rfocusable = /^(?:input|select|textarea|button)$/i,
7586	rclickable = /^(?:a|area)$/i;
7587
7588jQuery.fn.extend( {
7589	prop: function( name, value ) {
7590		return access( this, jQuery.prop, name, value, arguments.length > 1 );
7591	},
7592
7593	removeProp: function( name ) {
7594		return this.each( function() {
7595			delete this[ jQuery.propFix[ name ] || name ];
7596		} );
7597	}
7598} );
7599
7600jQuery.extend( {
7601	prop: function( elem, name, value ) {
7602		var ret, hooks,
7603			nType = elem.nodeType;
7604
7605		// Don't get/set properties on text, comment and attribute nodes
7606		if ( nType === 3 || nType === 8 || nType === 2 ) {
7607			return;
7608		}
7609
7610		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7611
7612			// Fix name and attach hooks
7613			name = jQuery.propFix[ name ] || name;
7614			hooks = jQuery.propHooks[ name ];
7615		}
7616
7617		if ( value !== undefined ) {
7618			if ( hooks && "set" in hooks &&
7619				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
7620				return ret;
7621			}
7622
7623			return ( elem[ name ] = value );
7624		}
7625
7626		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
7627			return ret;
7628		}
7629
7630		return elem[ name ];
7631	},
7632
7633	propHooks: {
7634		tabIndex: {
7635			get: function( elem ) {
7636
7637				// Support: IE <=9 - 11 only
7638				// elem.tabIndex doesn't always return the
7639				// correct value when it hasn't been explicitly set
7640				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
7641				// Use proper attribute retrieval(#12072)
7642				var tabindex = jQuery.find.attr( elem, "tabindex" );
7643
7644				if ( tabindex ) {
7645					return parseInt( tabindex, 10 );
7646				}
7647
7648				if (
7649					rfocusable.test( elem.nodeName ) ||
7650					rclickable.test( elem.nodeName ) &&
7651					elem.href
7652				) {
7653					return 0;
7654				}
7655
7656				return -1;
7657			}
7658		}
7659	},
7660
7661	propFix: {
7662		"for": "htmlFor",
7663		"class": "className"
7664	}
7665} );
7666
7667// Support: IE <=11 only
7668// Accessing the selectedIndex property
7669// forces the browser to respect setting selected
7670// on the option
7671// The getter ensures a default option is selected
7672// when in an optgroup
7673// eslint rule "no-unused-expressions" is disabled for this code
7674// since it considers such accessions noop
7675if ( !support.optSelected ) {
7676	jQuery.propHooks.selected = {
7677		get: function( elem ) {
7678
7679			/* eslint no-unused-expressions: "off" */
7680
7681			var parent = elem.parentNode;
7682			if ( parent && parent.parentNode ) {
7683				parent.parentNode.selectedIndex;
7684			}
7685			return null;
7686		},
7687		set: function( elem ) {
7688
7689			/* eslint no-unused-expressions: "off" */
7690
7691			var parent = elem.parentNode;
7692			if ( parent ) {
7693				parent.selectedIndex;
7694
7695				if ( parent.parentNode ) {
7696					parent.parentNode.selectedIndex;
7697				}
7698			}
7699		}
7700	};
7701}
7702
7703jQuery.each( [
7704	"tabIndex",
7705	"readOnly",
7706	"maxLength",
7707	"cellSpacing",
7708	"cellPadding",
7709	"rowSpan",
7710	"colSpan",
7711	"useMap",
7712	"frameBorder",
7713	"contentEditable"
7714], function() {
7715	jQuery.propFix[ this.toLowerCase() ] = this;
7716} );
7717
7718
7719
7720
7721	// Strip and collapse whitespace according to HTML spec
7722	// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
7723	function stripAndCollapse( value ) {
7724		var tokens = value.match( rnothtmlwhite ) || [];
7725		return tokens.join( " " );
7726	}
7727
7728
7729function getClass( elem ) {
7730	return elem.getAttribute && elem.getAttribute( "class" ) || "";
7731}
7732
7733jQuery.fn.extend( {
7734	addClass: function( value ) {
7735		var classes, elem, cur, curValue, clazz, j, finalValue,
7736			i = 0;
7737
7738		if ( jQuery.isFunction( value ) ) {
7739			return this.each( function( j ) {
7740				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
7741			} );
7742		}
7743
7744		if ( typeof value === "string" && value ) {
7745			classes = value.match( rnothtmlwhite ) || [];
7746
7747			while ( ( elem = this[ i++ ] ) ) {
7748				curValue = getClass( elem );
7749				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
7750
7751				if ( cur ) {
7752					j = 0;
7753					while ( ( clazz = classes[ j++ ] ) ) {
7754						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
7755							cur += clazz + " ";
7756						}
7757					}
7758
7759					// Only assign if different to avoid unneeded rendering.
7760					finalValue = stripAndCollapse( cur );
7761					if ( curValue !== finalValue ) {
7762						elem.setAttribute( "class", finalValue );
7763					}
7764				}
7765			}
7766		}
7767
7768		return this;
7769	},
7770
7771	removeClass: function( value ) {
7772		var classes, elem, cur, curValue, clazz, j, finalValue,
7773			i = 0;
7774
7775		if ( jQuery.isFunction( value ) ) {
7776			return this.each( function( j ) {
7777				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
7778			} );
7779		}
7780
7781		if ( !arguments.length ) {
7782			return this.attr( "class", "" );
7783		}
7784
7785		if ( typeof value === "string" && value ) {
7786			classes = value.match( rnothtmlwhite ) || [];
7787
7788			while ( ( elem = this[ i++ ] ) ) {
7789				curValue = getClass( elem );
7790
7791				// This expression is here for better compressibility (see addClass)
7792				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
7793
7794				if ( cur ) {
7795					j = 0;
7796					while ( ( clazz = classes[ j++ ] ) ) {
7797
7798						// Remove *all* instances
7799						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
7800							cur = cur.replace( " " + clazz + " ", " " );
7801						}
7802					}
7803
7804					// Only assign if different to avoid unneeded rendering.
7805					finalValue = stripAndCollapse( cur );
7806					if ( curValue !== finalValue ) {
7807						elem.setAttribute( "class", finalValue );
7808					}
7809				}
7810			}
7811		}
7812
7813		return this;
7814	},
7815
7816	toggleClass: function( value, stateVal ) {
7817		var type = typeof value;
7818
7819		if ( typeof stateVal === "boolean" && type === "string" ) {
7820			return stateVal ? this.addClass( value ) : this.removeClass( value );
7821		}
7822
7823		if ( jQuery.isFunction( value ) ) {
7824			return this.each( function( i ) {
7825				jQuery( this ).toggleClass(
7826					value.call( this, i, getClass( this ), stateVal ),
7827					stateVal
7828				);
7829			} );
7830		}
7831
7832		return this.each( function() {
7833			var className, i, self, classNames;
7834
7835			if ( type === "string" ) {
7836
7837				// Toggle individual class names
7838				i = 0;
7839				self = jQuery( this );
7840				classNames = value.match( rnothtmlwhite ) || [];
7841
7842				while ( ( className = classNames[ i++ ] ) ) {
7843
7844					// Check each className given, space separated list
7845					if ( self.hasClass( className ) ) {
7846						self.removeClass( className );
7847					} else {
7848						self.addClass( className );
7849					}
7850				}
7851
7852			// Toggle whole class name
7853			} else if ( value === undefined || type === "boolean" ) {
7854				className = getClass( this );
7855				if ( className ) {
7856
7857					// Store className if set
7858					dataPriv.set( this, "__className__", className );
7859				}
7860
7861				// If the element has a class name or if we're passed `false`,
7862				// then remove the whole classname (if there was one, the above saved it).
7863				// Otherwise bring back whatever was previously saved (if anything),
7864				// falling back to the empty string if nothing was stored.
7865				if ( this.setAttribute ) {
7866					this.setAttribute( "class",
7867						className || value === false ?
7868						"" :
7869						dataPriv.get( this, "__className__" ) || ""
7870					);
7871				}
7872			}
7873		} );
7874	},
7875
7876	hasClass: function( selector ) {
7877		var className, elem,
7878			i = 0;
7879
7880		className = " " + selector + " ";
7881		while ( ( elem = this[ i++ ] ) ) {
7882			if ( elem.nodeType === 1 &&
7883				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
7884					return true;
7885			}
7886		}
7887
7888		return false;
vendor: 1,378 bytes, lines 7889-7958
7889	}
7890} );
7891
7892
7893
7894
7895var rreturn = /\r/g;
7896
7897jQuery.fn.extend( {
7898	val: function( value ) {
7899		var hooks, ret, isFunction,
7900			elem = this[ 0 ];
7901
7902		if ( !arguments.length ) {
7903			if ( elem ) {
7904				hooks = jQuery.valHooks[ elem.type ] ||
7905					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
7906
7907				if ( hooks &&
7908					"get" in hooks &&
7909					( ret = hooks.get( elem, "value" ) ) !== undefined
7910				) {
7911					return ret;
7912				}
7913
7914				ret = elem.value;
7915
7916				// Handle most common string cases
7917				if ( typeof ret === "string" ) {
7918					return ret.replace( rreturn, "" );
7919				}
7920
7921				// Handle cases where value is null/undef or number
7922				return ret == null ? "" : ret;
7923			}
7924
7925			return;
7926		}
7927
7928		isFunction = jQuery.isFunction( value );
7929
7930		return this.each( function( i ) {
7931			var val;
7932
7933			if ( this.nodeType !== 1 ) {
7934				return;
7935			}
7936
7937			if ( isFunction ) {
7938				val = value.call( this, i, jQuery( this ).val() );
7939			} else {
7940				val = value;
7941			}
7942
7943			// Treat null/undefined as ""; convert numbers to string
7944			if ( val == null ) {
7945				val = "";
7946
7947			} else if ( typeof val === "number" ) {
7948				val += "";
7949
7950			} else if ( jQuery.isArray( val ) ) {
7951				val = jQuery.map( val, function( value ) {
7952					return value == null ? "" : value + "";
7953				} );
7954			}
7955
7956			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
7957
7958			// If set returns undefined, fall back to normal setting
vendor: 8,168 bytes, lines 7959-8277
7959			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
7960				this.value = val;
7961			}
7962		} );
7963	}
7964} );
7965
7966jQuery.extend( {
7967	valHooks: {
7968		option: {
7969			get: function( elem ) {
7970
7971				var val = jQuery.find.attr( elem, "value" );
7972				return val != null ?
7973					val :
7974
7975					// Support: IE <=10 - 11 only
7976					// option.text throws exceptions (#14686, #14858)
7977					// Strip and collapse whitespace
7978					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
7979					stripAndCollapse( jQuery.text( elem ) );
7980			}
7981		},
7982		select: {
7983			get: function( elem ) {
7984				var value, option, i,
7985					options = elem.options,
7986					index = elem.selectedIndex,
7987					one = elem.type === "select-one",
7988					values = one ? null : [],
7989					max = one ? index + 1 : options.length;
7990
7991				if ( index < 0 ) {
7992					i = max;
7993
7994				} else {
7995					i = one ? index : 0;
7996				}
7997
7998				// Loop through all the selected options
7999				for ( ; i < max; i++ ) {
8000					option = options[ i ];
8001
8002					// Support: IE <=9 only
8003					// IE8-9 doesn't update selected after form reset (#2551)
8004					if ( ( option.selected || i === index ) &&
8005
8006							// Don't return options that are disabled or in a disabled optgroup
8007							!option.disabled &&
8008							( !option.parentNode.disabled ||
8009								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
8010
8011						// Get the specific value for the option
8012						value = jQuery( option ).val();
8013
8014						// We don't need an array for one selects
8015						if ( one ) {
8016							return value;
8017						}
8018
8019						// Multi-Selects return an array
8020						values.push( value );
8021					}
8022				}
8023
8024				return values;
8025			},
8026
8027			set: function( elem, value ) {
8028				var optionSet, option,
8029					options = elem.options,
8030					values = jQuery.makeArray( value ),
8031					i = options.length;
8032
8033				while ( i-- ) {
8034					option = options[ i ];
8035
8036					/* eslint-disable no-cond-assign */
8037
8038					if ( option.selected =
8039						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
8040					) {
8041						optionSet = true;
8042					}
8043
8044					/* eslint-enable no-cond-assign */
8045				}
8046
8047				// Force browsers to behave consistently when non-matching value is set
8048				if ( !optionSet ) {
8049					elem.selectedIndex = -1;
8050				}
8051				return values;
8052			}
8053		}
8054	}
8055} );
8056
8057// Radios and checkboxes getter/setter
8058jQuery.each( [ "radio", "checkbox" ], function() {
8059	jQuery.valHooks[ this ] = {
8060		set: function( elem, value ) {
8061			if ( jQuery.isArray( value ) ) {
8062				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
8063			}
8064		}
8065	};
8066	if ( !support.checkOn ) {
8067		jQuery.valHooks[ this ].get = function( elem ) {
8068			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
8069		};
8070	}
8071} );
8072
8073
8074
8075
8076// Return jQuery for attributes-only inclusion
8077
8078
8079var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
8080
8081jQuery.extend( jQuery.event, {
8082
8083	trigger: function( event, data, elem, onlyHandlers ) {
8084
8085		var i, cur, tmp, bubbleType, ontype, handle, special,
8086			eventPath = [ elem || document ],
8087			type = hasOwn.call( event, "type" ) ? event.type : event,
8088			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
8089
8090		cur = tmp = elem = elem || document;
8091
8092		// Don't do events on text and comment nodes
8093		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
8094			return;
8095		}
8096
8097		// focus/blur morphs to focusin/out; ensure we're not firing them right now
8098		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
8099			return;
8100		}
8101
8102		if ( type.indexOf( "." ) > -1 ) {
8103
8104			// Namespaced trigger; create a regexp to match event type in handle()
8105			namespaces = type.split( "." );
8106			type = namespaces.shift();
8107			namespaces.sort();
8108		}
8109		ontype = type.indexOf( ":" ) < 0 && "on" + type;
8110
8111		// Caller can pass in a jQuery.Event object, Object, or just an event type string
8112		event = event[ jQuery.expando ] ?
8113			event :
8114			new jQuery.Event( type, typeof event === "object" && event );
8115
8116		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
8117		event.isTrigger = onlyHandlers ? 2 : 3;
8118		event.namespace = namespaces.join( "." );
8119		event.rnamespace = event.namespace ?
8120			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
8121			null;
8122
8123		// Clean up the event in case it is being reused
8124		event.result = undefined;
8125		if ( !event.target ) {
8126			event.target = elem;
8127		}
8128
8129		// Clone any incoming data and prepend the event, creating the handler arg list
8130		data = data == null ?
8131			[ event ] :
8132			jQuery.makeArray( data, [ event ] );
8133
8134		// Allow special events to draw outside the lines
8135		special = jQuery.event.special[ type ] || {};
8136		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
8137			return;
8138		}
8139
8140		// Determine event propagation path in advance, per W3C events spec (#9951)
8141		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8142		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
8143
8144			bubbleType = special.delegateType || type;
8145			if ( !rfocusMorph.test( bubbleType + type ) ) {
8146				cur = cur.parentNode;
8147			}
8148			for ( ; cur; cur = cur.parentNode ) {
8149				eventPath.push( cur );
8150				tmp = cur;
8151			}
8152
8153			// Only add window if we got to document (e.g., not plain obj or detached DOM)
8154			if ( tmp === ( elem.ownerDocument || document ) ) {
8155				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
8156			}
8157		}
8158
8159		// Fire handlers on the event path
8160		i = 0;
8161		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
8162
8163			event.type = i > 1 ?
8164				bubbleType :
8165				special.bindType || type;
8166
8167			// jQuery handler
8168			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
8169				dataPriv.get( cur, "handle" );
8170			if ( handle ) {
8171				handle.apply( cur, data );
8172			}
8173
8174			// Native handler
8175			handle = ontype && cur[ ontype ];
8176			if ( handle && handle.apply && acceptData( cur ) ) {
8177				event.result = handle.apply( cur, data );
8178				if ( event.result === false ) {
8179					event.preventDefault();
8180				}
8181			}
8182		}
8183		event.type = type;
8184
8185		// If nobody prevented the default action, do it now
8186		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
8187
8188			if ( ( !special._default ||
8189				special._default.apply( eventPath.pop(), data ) === false ) &&
8190				acceptData( elem ) ) {
8191
8192				// Call a native DOM method on the target with the same name as the event.
8193				// Don't do default actions on window, that's where global variables be (#6170)
8194				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
8195
8196					// Don't re-trigger an onFOO event when we call its FOO() method
8197					tmp = elem[ ontype ];
8198
8199					if ( tmp ) {
8200						elem[ ontype ] = null;
8201					}
8202
8203					// Prevent re-triggering of the same event, since we already bubbled it above
8204					jQuery.event.triggered = type;
8205					elem[ type ]();
8206					jQuery.event.triggered = undefined;
8207
8208					if ( tmp ) {
8209						elem[ ontype ] = tmp;
8210					}
8211				}
8212			}
8213		}
8214
8215		return event.result;
8216	},
8217
8218	// Piggyback on a donor event to simulate a different one
8219	// Used only for `focus(in | out)` events
8220	simulate: function( type, elem, event ) {
8221		var e = jQuery.extend(
8222			new jQuery.Event(),
8223			event,
8224			{
8225				type: type,
8226				isSimulated: true
8227			}
8228		);
8229
8230		jQuery.event.trigger( e, null, elem );
8231	}
8232
8233} );
8234
8235jQuery.fn.extend( {
8236
8237	trigger: function( type, data ) {
8238		return this.each( function() {
8239			jQuery.event.trigger( type, data, this );
8240		} );
8241	},
8242	triggerHandler: function( type, data ) {
8243		var elem = this[ 0 ];
8244		if ( elem ) {
8245			return jQuery.event.trigger( type, data, elem, true );
8246		}
8247	}
8248} );
8249
8250
8251jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
8252	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
8253	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
8254	function( i, name ) {
8255
8256	// Handle event binding
8257	jQuery.fn[ name ] = function( data, fn ) {
8258		return arguments.length > 0 ?
8259			this.on( name, null, data, fn ) :
8260			this.trigger( name );
8261	};
8262} );
8263
8264jQuery.fn.extend( {
8265	hover: function( fnOver, fnOut ) {
8266		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
8267	}
8268} );
8269
8270
8271
8272
8273support.focusin = "onfocusin" in window;
8274
8275
8276// Support: Firefox <=44
8277// Firefox doesn't have focus(in | out) events
vendor: 4,176 bytes, lines 8278-8441
8278// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8279//
8280// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8281// focus(in | out) events fire after focus & blur events,
8282// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
8283// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8284if ( !support.focusin ) {
8285	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
8286
8287		// Attach a single capturing handler on the document while someone wants focusin/focusout
8288		var handler = function( event ) {
8289			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
8290		};
8291
8292		jQuery.event.special[ fix ] = {
8293			setup: function() {
8294				var doc = this.ownerDocument || this,
8295					attaches = dataPriv.access( doc, fix );
8296
8297				if ( !attaches ) {
8298					doc.addEventListener( orig, handler, true );
8299				}
8300				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
8301			},
8302			teardown: function() {
8303				var doc = this.ownerDocument || this,
8304					attaches = dataPriv.access( doc, fix ) - 1;
8305
8306				if ( !attaches ) {
8307					doc.removeEventListener( orig, handler, true );
8308					dataPriv.remove( doc, fix );
8309
8310				} else {
8311					dataPriv.access( doc, fix, attaches );
8312				}
8313			}
8314		};
8315	} );
8316}
8317var location = window.location;
8318
8319var nonce = jQuery.now();
8320
8321var rquery = ( /\?/ );
8322
8323
8324
8325// Cross-browser xml parsing
8326jQuery.parseXML = function( data ) {
8327	var xml;
8328	if ( !data || typeof data !== "string" ) {
8329		return null;
8330	}
8331
8332	// Support: IE 9 - 11 only
8333	// IE throws on parseFromString with invalid input.
8334	try {
8335		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
8336	} catch ( e ) {
8337		xml = undefined;
8338	}
8339
8340	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
8341		jQuery.error( "Invalid XML: " + data );
8342	}
8343	return xml;
8344};
8345
8346
8347var
8348	rbracket = /\[\]$/,
8349	rCRLF = /\r?\n/g,
8350	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
8351	rsubmittable = /^(?:input|select|textarea|keygen)/i;
8352
8353function buildParams( prefix, obj, traditional, add ) {
8354	var name;
8355
8356	if ( jQuery.isArray( obj ) ) {
8357
8358		// Serialize array item.
8359		jQuery.each( obj, function( i, v ) {
8360			if ( traditional || rbracket.test( prefix ) ) {
8361
8362				// Treat each array item as a scalar.
8363				add( prefix, v );
8364
8365			} else {
8366
8367				// Item is non-scalar (array or object), encode its numeric index.
8368				buildParams(
8369					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
8370					v,
8371					traditional,
8372					add
8373				);
8374			}
8375		} );
8376
8377	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
8378
8379		// Serialize object item.
8380		for ( name in obj ) {
8381			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
8382		}
8383
8384	} else {
8385
8386		// Serialize scalar item.
8387		add( prefix, obj );
8388	}
8389}
8390
8391// Serialize an array of form elements or a set of
8392// key/values into a query string
8393jQuery.param = function( a, traditional ) {
8394	var prefix,
8395		s = [],
8396		add = function( key, valueOrFunction ) {
8397
8398			// If value is a function, invoke it and use its return value
8399			var value = jQuery.isFunction( valueOrFunction ) ?
8400				valueOrFunction() :
8401				valueOrFunction;
8402
8403			s[ s.length ] = encodeURIComponent( key ) + "=" +
8404				encodeURIComponent( value == null ? "" : value );
8405		};
8406
8407	// If an array was passed in, assume that it is an array of form elements.
8408	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
8409
8410		// Serialize the form elements
8411		jQuery.each( a, function() {
8412			add( this.name, this.value );
8413		} );
8414
8415	} else {
8416
8417		// If traditional, encode the "old" way (the way 1.3.2 or older
8418		// did it), otherwise encode params recursively.
8419		for ( prefix in a ) {
8420			buildParams( prefix, a[ prefix ], traditional, add );
8421		}
8422	}
8423
8424	// Return the resulting serialization
8425	return s.join( "&" );
8426};
8427
8428jQuery.fn.extend( {
8429	serialize: function() {
8430		return jQuery.param( this.serializeArray() );
8431	},
8432	serializeArray: function() {
8433		return this.map( function() {
8434
8435			// Can add propHook for "elements" to filter or add form elements
8436			var elements = jQuery.prop( this, "elements" );
8437			return elements ? jQuery.makeArray( elements ) : this;
8438		} )
8439		.filter( function() {
8440			var type = this.type;
8441
vendor: 4,940 bytes, lines 8442-8614
8442			// Use .is( ":disabled" ) so that fieldset[disabled] works
8443			return this.name && !jQuery( this ).is( ":disabled" ) &&
8444				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
8445				( this.checked || !rcheckableType.test( type ) );
8446		} )
8447		.map( function( i, elem ) {
8448			var val = jQuery( this ).val();
8449
8450			if ( val == null ) {
8451				return null;
8452			}
8453
8454			if ( jQuery.isArray( val ) ) {
8455				return jQuery.map( val, function( val ) {
8456					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8457				} );
8458			}
8459
8460			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8461		} ).get();
8462	}
8463} );
8464
8465
8466var
8467	r20 = /%20/g,
8468	rhash = /#.*$/,
8469	rantiCache = /([?&])_=[^&]*/,
8470	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
8471
8472	// #7653, #8125, #8152: local protocol detection
8473	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
8474	rnoContent = /^(?:GET|HEAD)$/,
8475	rprotocol = /^\/\//,
8476
8477	/* Prefilters
8478	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
8479	 * 2) These are called:
8480	 *    - BEFORE asking for a transport
8481	 *    - AFTER param serialization (s.data is a string if s.processData is true)
8482	 * 3) key is the dataType
8483	 * 4) the catchall symbol "*" can be used
8484	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
8485	 */
8486	prefilters = {},
8487
8488	/* Transports bindings
8489	 * 1) key is the dataType
8490	 * 2) the catchall symbol "*" can be used
8491	 * 3) selection will start with transport dataType and THEN go to "*" if needed
8492	 */
8493	transports = {},
8494
8495	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
8496	allTypes = "*/".concat( "*" ),
8497
8498	// Anchor tag for parsing the document origin
8499	originAnchor = document.createElement( "a" );
8500	originAnchor.href = location.href;
8501
8502// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
8503function addToPrefiltersOrTransports( structure ) {
8504
8505	// dataTypeExpression is optional and defaults to "*"
8506	return function( dataTypeExpression, func ) {
8507
8508		if ( typeof dataTypeExpression !== "string" ) {
8509			func = dataTypeExpression;
8510			dataTypeExpression = "*";
8511		}
8512
8513		var dataType,
8514			i = 0,
8515			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
8516
8517		if ( jQuery.isFunction( func ) ) {
8518
8519			// For each dataType in the dataTypeExpression
8520			while ( ( dataType = dataTypes[ i++ ] ) ) {
8521
8522				// Prepend if requested
8523				if ( dataType[ 0 ] === "+" ) {
8524					dataType = dataType.slice( 1 ) || "*";
8525					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
8526
8527				// Otherwise append
8528				} else {
8529					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
8530				}
8531			}
8532		}
8533	};
8534}
8535
8536// Base inspection function for prefilters and transports
8537function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
8538
8539	var inspected = {},
8540		seekingTransport = ( structure === transports );
8541
8542	function inspect( dataType ) {
8543		var selected;
8544		inspected[ dataType ] = true;
8545		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
8546			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
8547			if ( typeof dataTypeOrTransport === "string" &&
8548				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
8549
8550				options.dataTypes.unshift( dataTypeOrTransport );
8551				inspect( dataTypeOrTransport );
8552				return false;
8553			} else if ( seekingTransport ) {
8554				return !( selected = dataTypeOrTransport );
8555			}
8556		} );
8557		return selected;
8558	}
8559
8560	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
8561}
8562
8563// A special extend for ajax options
8564// that takes "flat" options (not to be deep extended)
8565// Fixes #9887
8566function ajaxExtend( target, src ) {
8567	var key, deep,
8568		flatOptions = jQuery.ajaxSettings.flatOptions || {};
8569
8570	for ( key in src ) {
8571		if ( src[ key ] !== undefined ) {
8572			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
8573		}
8574	}
8575	if ( deep ) {
8576		jQuery.extend( true, target, deep );
8577	}
8578
8579	return target;
8580}
8581
8582/* Handles responses to an ajax request:
8583 * - finds the right dataType (mediates between content-type and expected dataType)
8584 * - returns the corresponding response
8585 */
8586function ajaxHandleResponses( s, jqXHR, responses ) {
8587
8588	var ct, type, finalDataType, firstDataType,
8589		contents = s.contents,
8590		dataTypes = s.dataTypes;
8591
8592	// Remove auto dataType and get content-type in the process
8593	while ( dataTypes[ 0 ] === "*" ) {
8594		dataTypes.shift();
8595		if ( ct === undefined ) {
8596			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
8597		}
8598	}
8599
8600	// Check if we're dealing with a known content-type
8601	if ( ct ) {
8602		for ( type in contents ) {
8603			if ( contents[ type ] && contents[ type ].test( ct ) ) {
8604				dataTypes.unshift( type );
8605				break;
8606			}
8607		}
8608	}
8609
8610	// Check to see if we have a response for the expected dataType
8611	if ( dataTypes[ 0 ] in responses ) {
8612		finalDataType = dataTypes[ 0 ];
8613	} else {
8614
vendor: 18,932 bytes, lines 8615-9372
8615		// Try convertible dataTypes
8616		for ( type in responses ) {
8617			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
8618				finalDataType = type;
8619				break;
8620			}
8621			if ( !firstDataType ) {
8622				firstDataType = type;
8623			}
8624		}
8625
8626		// Or just use first one
8627		finalDataType = finalDataType || firstDataType;
8628	}
8629
8630	// If we found a dataType
8631	// We add the dataType to the list if needed
8632	// and return the corresponding response
8633	if ( finalDataType ) {
8634		if ( finalDataType !== dataTypes[ 0 ] ) {
8635			dataTypes.unshift( finalDataType );
8636		}
8637		return responses[ finalDataType ];
8638	}
8639}
8640
8641/* Chain conversions given the request and the original response
8642 * Also sets the responseXXX fields on the jqXHR instance
8643 */
8644function ajaxConvert( s, response, jqXHR, isSuccess ) {
8645	var conv2, current, conv, tmp, prev,
8646		converters = {},
8647
8648		// Work with a copy of dataTypes in case we need to modify it for conversion
8649		dataTypes = s.dataTypes.slice();
8650
8651	// Create converters map with lowercased keys
8652	if ( dataTypes[ 1 ] ) {
8653		for ( conv in s.converters ) {
8654			converters[ conv.toLowerCase() ] = s.converters[ conv ];
8655		}
8656	}
8657
8658	current = dataTypes.shift();
8659
8660	// Convert to each sequential dataType
8661	while ( current ) {
8662
8663		if ( s.responseFields[ current ] ) {
8664			jqXHR[ s.responseFields[ current ] ] = response;
8665		}
8666
8667		// Apply the dataFilter if provided
8668		if ( !prev && isSuccess && s.dataFilter ) {
8669			response = s.dataFilter( response, s.dataType );
8670		}
8671
8672		prev = current;
8673		current = dataTypes.shift();
8674
8675		if ( current ) {
8676
8677			// There's only work to do if current dataType is non-auto
8678			if ( current === "*" ) {
8679
8680				current = prev;
8681
8682			// Convert response if prev dataType is non-auto and differs from current
8683			} else if ( prev !== "*" && prev !== current ) {
8684
8685				// Seek a direct converter
8686				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
8687
8688				// If none found, seek a pair
8689				if ( !conv ) {
8690					for ( conv2 in converters ) {
8691
8692						// If conv2 outputs current
8693						tmp = conv2.split( " " );
8694						if ( tmp[ 1 ] === current ) {
8695
8696							// If prev can be converted to accepted input
8697							conv = converters[ prev + " " + tmp[ 0 ] ] ||
8698								converters[ "* " + tmp[ 0 ] ];
8699							if ( conv ) {
8700
8701								// Condense equivalence converters
8702								if ( conv === true ) {
8703									conv = converters[ conv2 ];
8704
8705								// Otherwise, insert the intermediate dataType
8706								} else if ( converters[ conv2 ] !== true ) {
8707									current = tmp[ 0 ];
8708									dataTypes.unshift( tmp[ 1 ] );
8709								}
8710								break;
8711							}
8712						}
8713					}
8714				}
8715
8716				// Apply converter (if not an equivalence)
8717				if ( conv !== true ) {
8718
8719					// Unless errors are allowed to bubble, catch and return them
8720					if ( conv && s.throws ) {
8721						response = conv( response );
8722					} else {
8723						try {
8724							response = conv( response );
8725						} catch ( e ) {
8726							return {
8727								state: "parsererror",
8728								error: conv ? e : "No conversion from " + prev + " to " + current
8729							};
8730						}
8731					}
8732				}
8733			}
8734		}
8735	}
8736
8737	return { state: "success", data: response };
8738}
8739
8740jQuery.extend( {
8741
8742	// Counter for holding the number of active queries
8743	active: 0,
8744
8745	// Last-Modified header cache for next request
8746	lastModified: {},
8747	etag: {},
8748
8749	ajaxSettings: {
8750		url: location.href,
8751		type: "GET",
8752		isLocal: rlocalProtocol.test( location.protocol ),
8753		global: true,
8754		processData: true,
8755		async: true,
8756		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
8757
8758		/*
8759		timeout: 0,
8760		data: null,
8761		dataType: null,
8762		username: null,
8763		password: null,
8764		cache: null,
8765		throws: false,
8766		traditional: false,
8767		headers: {},
8768		*/
8769
8770		accepts: {
8771			"*": allTypes,
8772			text: "text/plain",
8773			html: "text/html",
8774			xml: "application/xml, text/xml",
8775			json: "application/json, text/javascript"
8776		},
8777
8778		contents: {
8779			xml: /\bxml\b/,
8780			html: /\bhtml/,
8781			json: /\bjson\b/
8782		},
8783
8784		responseFields: {
8785			xml: "responseXML",
8786			text: "responseText",
8787			json: "responseJSON"
8788		},
8789
8790		// Data converters
8791		// Keys separate source (or catchall "*") and destination types with a single space
8792		converters: {
8793
8794			// Convert anything to text
8795			"* text": String,
8796
8797			// Text to html (true = no transformation)
8798			"text html": true,
8799
8800			// Evaluate text as a json expression
8801			"text json": JSON.parse,
8802
8803			// Parse text as xml
8804			"text xml": jQuery.parseXML
8805		},
8806
8807		// For options that shouldn't be deep extended:
8808		// you can add your own custom options here if
8809		// and when you create one that shouldn't be
8810		// deep extended (see ajaxExtend)
8811		flatOptions: {
8812			url: true,
8813			context: true
8814		}
8815	},
8816
8817	// Creates a full fledged settings object into target
8818	// with both ajaxSettings and settings fields.
8819	// If target is omitted, writes into ajaxSettings.
8820	ajaxSetup: function( target, settings ) {
8821		return settings ?
8822
8823			// Building a settings object
8824			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
8825
8826			// Extending ajaxSettings
8827			ajaxExtend( jQuery.ajaxSettings, target );
8828	},
8829
8830	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
8831	ajaxTransport: addToPrefiltersOrTransports( transports ),
8832
8833	// Main method
8834	ajax: function( url, options ) {
8835
8836		// If url is an object, simulate pre-1.5 signature
8837		if ( typeof url === "object" ) {
8838			options = url;
8839			url = undefined;
8840		}
8841
8842		// Force options to be an object
8843		options = options || {};
8844
8845		var transport,
8846
8847			// URL without anti-cache param
8848			cacheURL,
8849
8850			// Response headers
8851			responseHeadersString,
8852			responseHeaders,
8853
8854			// timeout handle
8855			timeoutTimer,
8856
8857			// Url cleanup var
8858			urlAnchor,
8859
8860			// Request state (becomes false upon send and true upon completion)
8861			completed,
8862
8863			// To know if global events are to be dispatched
8864			fireGlobals,
8865
8866			// Loop variable
8867			i,
8868
8869			// uncached part of the url
8870			uncached,
8871
8872			// Create the final options object
8873			s = jQuery.ajaxSetup( {}, options ),
8874
8875			// Callbacks context
8876			callbackContext = s.context || s,
8877
8878			// Context for global events is callbackContext if it is a DOM node or jQuery collection
8879			globalEventContext = s.context &&
8880				( callbackContext.nodeType || callbackContext.jquery ) ?
8881					jQuery( callbackContext ) :
8882					jQuery.event,
8883
8884			// Deferreds
8885			deferred = jQuery.Deferred(),
8886			completeDeferred = jQuery.Callbacks( "once memory" ),
8887
8888			// Status-dependent callbacks
8889			statusCode = s.statusCode || {},
8890
8891			// Headers (they are sent all at once)
8892			requestHeaders = {},
8893			requestHeadersNames = {},
8894
8895			// Default abort message
8896			strAbort = "canceled",
8897
8898			// Fake xhr
8899			jqXHR = {
8900				readyState: 0,
8901
8902				// Builds headers hashtable if needed
8903				getResponseHeader: function( key ) {
8904					var match;
8905					if ( completed ) {
8906						if ( !responseHeaders ) {
8907							responseHeaders = {};
8908							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
8909								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
8910							}
8911						}
8912						match = responseHeaders[ key.toLowerCase() ];
8913					}
8914					return match == null ? null : match;
8915				},
8916
8917				// Raw string
8918				getAllResponseHeaders: function() {
8919					return completed ? responseHeadersString : null;
8920				},
8921
8922				// Caches the header
8923				setRequestHeader: function( name, value ) {
8924					if ( completed == null ) {
8925						name = requestHeadersNames[ name.toLowerCase() ] =
8926							requestHeadersNames[ name.toLowerCase() ] || name;
8927						requestHeaders[ name ] = value;
8928					}
8929					return this;
8930				},
8931
8932				// Overrides response content-type header
8933				overrideMimeType: function( type ) {
8934					if ( completed == null ) {
8935						s.mimeType = type;
8936					}
8937					return this;
8938				},
8939
8940				// Status-dependent callbacks
8941				statusCode: function( map ) {
8942					var code;
8943					if ( map ) {
8944						if ( completed ) {
8945
8946							// Execute the appropriate callbacks
8947							jqXHR.always( map[ jqXHR.status ] );
8948						} else {
8949
8950							// Lazy-add the new callbacks in a way that preserves old ones
8951							for ( code in map ) {
8952								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
8953							}
8954						}
8955					}
8956					return this;
8957				},
8958
8959				// Cancel the request
8960				abort: function( statusText ) {
8961					var finalText = statusText || strAbort;
8962					if ( transport ) {
8963						transport.abort( finalText );
8964					}
8965					done( 0, finalText );
8966					return this;
8967				}
8968			};
8969
8970		// Attach deferreds
8971		deferred.promise( jqXHR );
8972
8973		// Add protocol if not provided (prefilters might expect it)
8974		// Handle falsy url in the settings object (#10093: consistency with old signature)
8975		// We also use the url parameter if available
8976		s.url = ( ( url || s.url || location.href ) + "" )
8977			.replace( rprotocol, location.protocol + "//" );
8978
8979		// Alias method option to type as per ticket #12004
8980		s.type = options.method || options.type || s.method || s.type;
8981
8982		// Extract dataTypes list
8983		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
8984
8985		// A cross-domain request is in order when the origin doesn't match the current origin.
8986		if ( s.crossDomain == null ) {
8987			urlAnchor = document.createElement( "a" );
8988
8989			// Support: IE <=8 - 11, Edge 12 - 13
8990			// IE throws exception on accessing the href property if url is malformed,
8991			// e.g. http://example.com:80x/
8992			try {
8993				urlAnchor.href = s.url;
8994
8995				// Support: IE <=8 - 11 only
8996				// Anchor's host property isn't correctly set when s.url is relative
8997				urlAnchor.href = urlAnchor.href;
8998				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
8999					urlAnchor.protocol + "//" + urlAnchor.host;
9000			} catch ( e ) {
9001
9002				// If there is an error parsing the URL, assume it is crossDomain,
9003				// it can be rejected by the transport if it is invalid
9004				s.crossDomain = true;
9005			}
9006		}
9007
9008		// Convert data if not already a string
9009		if ( s.data && s.processData && typeof s.data !== "string" ) {
9010			s.data = jQuery.param( s.data, s.traditional );
9011		}
9012
9013		// Apply prefilters
9014		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
9015
9016		// If request was aborted inside a prefilter, stop there
9017		if ( completed ) {
9018			return jqXHR;
9019		}
9020
9021		// We can fire global events as of now if asked to
9022		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9023		fireGlobals = jQuery.event && s.global;
9024
9025		// Watch for a new set of requests
9026		if ( fireGlobals && jQuery.active++ === 0 ) {
9027			jQuery.event.trigger( "ajaxStart" );
9028		}
9029
9030		// Uppercase the type
9031		s.type = s.type.toUpperCase();
9032
9033		// Determine if request has content
9034		s.hasContent = !rnoContent.test( s.type );
9035
9036		// Save the URL in case we're toying with the If-Modified-Since
9037		// and/or If-None-Match header later on
9038		// Remove hash to simplify url manipulation
9039		cacheURL = s.url.replace( rhash, "" );
9040
9041		// More options handling for requests with no content
9042		if ( !s.hasContent ) {
9043
9044			// Remember the hash so we can put it back
9045			uncached = s.url.slice( cacheURL.length );
9046
9047			// If data is available, append data to url
9048			if ( s.data ) {
9049				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
9050
9051				// #9682: remove data so that it's not used in an eventual retry
9052				delete s.data;
9053			}
9054
9055			// Add or update anti-cache param if needed
9056			if ( s.cache === false ) {
9057				cacheURL = cacheURL.replace( rantiCache, "$1" );
9058				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
9059			}
9060
9061			// Put hash and anti-cache on the URL that will be requested (gh-1732)
9062			s.url = cacheURL + uncached;
9063
9064		// Change '%20' to '+' if this is encoded form body content (gh-2658)
9065		} else if ( s.data && s.processData &&
9066			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
9067			s.data = s.data.replace( r20, "+" );
9068		}
9069
9070		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9071		if ( s.ifModified ) {
9072			if ( jQuery.lastModified[ cacheURL ] ) {
9073				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
9074			}
9075			if ( jQuery.etag[ cacheURL ] ) {
9076				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
9077			}
9078		}
9079
9080		// Set the correct header, if data is being sent
9081		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
9082			jqXHR.setRequestHeader( "Content-Type", s.contentType );
9083		}
9084
9085		// Set the Accepts header for the server, depending on the dataType
9086		jqXHR.setRequestHeader(
9087			"Accept",
9088			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
9089				s.accepts[ s.dataTypes[ 0 ] ] +
9090					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
9091				s.accepts[ "*" ]
9092		);
9093
9094		// Check for headers option
9095		for ( i in s.headers ) {
9096			jqXHR.setRequestHeader( i, s.headers[ i ] );
9097		}
9098
9099		// Allow custom headers/mimetypes and early abort
9100		if ( s.beforeSend &&
9101			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
9102
9103			// Abort if not done already and return
9104			return jqXHR.abort();
9105		}
9106
9107		// Aborting is no longer a cancellation
9108		strAbort = "abort";
9109
9110		// Install callbacks on deferreds
9111		completeDeferred.add( s.complete );
9112		jqXHR.done( s.success );
9113		jqXHR.fail( s.error );
9114
9115		// Get transport
9116		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
9117
9118		// If no transport, we auto-abort
9119		if ( !transport ) {
9120			done( -1, "No Transport" );
9121		} else {
9122			jqXHR.readyState = 1;
9123
9124			// Send global event
9125			if ( fireGlobals ) {
9126				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
9127			}
9128
9129			// If request was aborted inside ajaxSend, stop there
9130			if ( completed ) {
9131				return jqXHR;
9132			}
9133
9134			// Timeout
9135			if ( s.async && s.timeout > 0 ) {
9136				timeoutTimer = window.setTimeout( function() {
9137					jqXHR.abort( "timeout" );
9138				}, s.timeout );
9139			}
9140
9141			try {
9142				completed = false;
9143				transport.send( requestHeaders, done );
9144			} catch ( e ) {
9145
9146				// Rethrow post-completion exceptions
9147				if ( completed ) {
9148					throw e;
9149				}
9150
9151				// Propagate others as results
9152				done( -1, e );
9153			}
9154		}
9155
9156		// Callback for when everything is done
9157		function done( status, nativeStatusText, responses, headers ) {
9158			var isSuccess, success, error, response, modified,
9159				statusText = nativeStatusText;
9160
9161			// Ignore repeat invocations
9162			if ( completed ) {
9163				return;
9164			}
9165
9166			completed = true;
9167
9168			// Clear timeout if it exists
9169			if ( timeoutTimer ) {
9170				window.clearTimeout( timeoutTimer );
9171			}
9172
9173			// Dereference transport for early garbage collection
9174			// (no matter how long the jqXHR object will be used)
9175			transport = undefined;
9176
9177			// Cache response headers
9178			responseHeadersString = headers || "";
9179
9180			// Set readyState
9181			jqXHR.readyState = status > 0 ? 4 : 0;
9182
9183			// Determine if successful
9184			isSuccess = status >= 200 && status < 300 || status === 304;
9185
9186			// Get response data
9187			if ( responses ) {
9188				response = ajaxHandleResponses( s, jqXHR, responses );
9189			}
9190
9191			// Convert no matter what (that way responseXXX fields are always set)
9192			response = ajaxConvert( s, response, jqXHR, isSuccess );
9193
9194			// If successful, handle type chaining
9195			if ( isSuccess ) {
9196
9197				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9198				if ( s.ifModified ) {
9199					modified = jqXHR.getResponseHeader( "Last-Modified" );
9200					if ( modified ) {
9201						jQuery.lastModified[ cacheURL ] = modified;
9202					}
9203					modified = jqXHR.getResponseHeader( "etag" );
9204					if ( modified ) {
9205						jQuery.etag[ cacheURL ] = modified;
9206					}
9207				}
9208
9209				// if no content
9210				if ( status === 204 || s.type === "HEAD" ) {
9211					statusText = "nocontent";
9212
9213				// if not modified
9214				} else if ( status === 304 ) {
9215					statusText = "notmodified";
9216
9217				// If we have data, let's convert it
9218				} else {
9219					statusText = response.state;
9220					success = response.data;
9221					error = response.error;
9222					isSuccess = !error;
9223				}
9224			} else {
9225
9226				// Extract error from statusText and normalize for non-aborts
9227				error = statusText;
9228				if ( status || !statusText ) {
9229					statusText = "error";
9230					if ( status < 0 ) {
9231						status = 0;
9232					}
9233				}
9234			}
9235
9236			// Set data for the fake xhr object
9237			jqXHR.status = status;
9238			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
9239
9240			// Success/Error
9241			if ( isSuccess ) {
9242				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
9243			} else {
9244				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
9245			}
9246
9247			// Status-dependent callbacks
9248			jqXHR.statusCode( statusCode );
9249			statusCode = undefined;
9250
9251			if ( fireGlobals ) {
9252				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
9253					[ jqXHR, s, isSuccess ? success : error ] );
9254			}
9255
9256			// Complete
9257			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
9258
9259			if ( fireGlobals ) {
9260				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
9261
9262				// Handle the global AJAX counter
9263				if ( !( --jQuery.active ) ) {
9264					jQuery.event.trigger( "ajaxStop" );
9265				}
9266			}
9267		}
9268
9269		return jqXHR;
9270	},
9271
9272	getJSON: function( url, data, callback ) {
9273		return jQuery.get( url, data, callback, "json" );
9274	},
9275
9276	getScript: function( url, callback ) {
9277		return jQuery.get( url, undefined, callback, "script" );
9278	}
9279} );
9280
9281jQuery.each( [ "get", "post" ], function( i, method ) {
9282	jQuery[ method ] = function( url, data, callback, type ) {
9283
9284		// Shift arguments if data argument was omitted
9285		if ( jQuery.isFunction( data ) ) {
9286			type = type || callback;
9287			callback = data;
9288			data = undefined;
9289		}
9290
9291		// The url can be an options object (which then must have .url)
9292		return jQuery.ajax( jQuery.extend( {
9293			url: url,
9294			type: method,
9295			dataType: type,
9296			data: data,
9297			success: callback
9298		}, jQuery.isPlainObject( url ) && url ) );
9299	};
9300} );
9301
9302
9303jQuery._evalUrl = function( url ) {
9304	return jQuery.ajax( {
9305		url: url,
9306
9307		// Make this explicit, since user can override this through ajaxSetup (#11264)
9308		type: "GET",
9309		dataType: "script",
9310		cache: true,
9311		async: false,
9312		global: false,
9313		"throws": true
9314	} );
9315};
9316
9317
9318jQuery.fn.extend( {
9319	wrapAll: function( html ) {
9320		var wrap;
9321
9322		if ( this[ 0 ] ) {
9323			if ( jQuery.isFunction( html ) ) {
9324				html = html.call( this[ 0 ] );
9325			}
9326
9327			// The elements to wrap the target around
9328			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
9329
9330			if ( this[ 0 ].parentNode ) {
9331				wrap.insertBefore( this[ 0 ] );
9332			}
9333
9334			wrap.map( function() {
9335				var elem = this;
9336
9337				while ( elem.firstElementChild ) {
9338					elem = elem.firstElementChild;
9339				}
9340
9341				return elem;
9342			} ).append( this );
9343		}
9344
9345		return this;
9346	},
9347
9348	wrapInner: function( html ) {
9349		if ( jQuery.isFunction( html ) ) {
9350			return this.each( function( i ) {
9351				jQuery( this ).wrapInner( html.call( this, i ) );
9352			} );
9353		}
9354
9355		return this.each( function() {
9356			var self = jQuery( this ),
9357				contents = self.contents();
9358
9359			if ( contents.length ) {
9360				contents.wrapAll( html );
9361
9362			} else {
9363				self.append( html );
9364			}
9365		} );
9366	},
9367
9368	wrap: function( html ) {
9369		var isFunction = jQuery.isFunction( html );
9370
9371		return this.each( function( i ) {
9372			jQuery( this ).wrapAll( i
vendor: 2,399 bytes, lines 9372-9464
9372sFunction ? html.call( this, i ) : html );
9373		} );
9374	},
9375
9376	unwrap: function( selector ) {
9377		this.parent( selector ).not( "body" ).each( function() {
9378			jQuery( this ).replaceWith( this.childNodes );
9379		} );
9380		return this;
9381	}
9382} );
9383
9384
9385jQuery.expr.pseudos.hidden = function( elem ) {
9386	return !jQuery.expr.pseudos.visible( elem );
9387};
9388jQuery.expr.pseudos.visible = function( elem ) {
9389	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
9390};
9391
9392
9393
9394
9395jQuery.ajaxSettings.xhr = function() {
9396	try {
9397		return new window.XMLHttpRequest();
9398	} catch ( e ) {}
9399};
9400
9401var xhrSuccessStatus = {
9402
9403		// File protocol always yields status code 0, assume 200
9404		0: 200,
9405
9406		// Support: IE <=9 only
9407		// #1450: sometimes IE returns 1223 when it should be 204
9408		1223: 204
9409	},
9410	xhrSupported = jQuery.ajaxSettings.xhr();
9411
9412support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
9413support.ajax = xhrSupported = !!xhrSupported;
9414
9415jQuery.ajaxTransport( function( options ) {
9416	var callback, errorCallback;
9417
9418	// Cross domain only allowed if supported through XMLHttpRequest
9419	if ( support.cors || xhrSupported && !options.crossDomain ) {
9420		return {
9421			send: function( headers, complete ) {
9422				var i,
9423					xhr = options.xhr();
9424
9425				xhr.open(
9426					options.type,
9427					options.url,
9428					options.async,
9429					options.username,
9430					options.password
9431				);
9432
9433				// Apply custom fields if provided
9434				if ( options.xhrFields ) {
9435					for ( i in options.xhrFields ) {
9436						xhr[ i ] = options.xhrFields[ i ];
9437					}
9438				}
9439
9440				// Override mime type if needed
9441				if ( options.mimeType && xhr.overrideMimeType ) {
9442					xhr.overrideMimeType( options.mimeType );
9443				}
9444
9445				// X-Requested-With header
9446				// For cross-domain requests, seeing as conditions for a preflight are
9447				// akin to a jigsaw puzzle, we simply never set it to be sure.
9448				// (it can always be set on a per-request basis or even using ajaxSetup)
9449				// For same-domain requests, won't change header if already provided.
9450				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
9451					headers[ "X-Requested-With" ] = "XMLHttpRequest";
9452				}
9453
9454				// Set headers
9455				for ( i in headers ) {
9456					xhr.setRequestHeader( i, headers[ i ] );
9457				}
9458
9459				// Callback
9460				callback = function( type ) {
9461					return function() {
9462						if ( callback ) {
9463							callback = errorCallback = xhr.onload =
9464								xhr.onerror = xhr.onabort = xhr.on
vendor: 5,102 bytes, lines 9464-9669
9464readystatechange = null;
9465
9466							if ( type === "abort" ) {
9467								xhr.abort();
9468							} else if ( type === "error" ) {
9469
9470								// Support: IE <=9 only
9471								// On a manual native abort, IE9 throws
9472								// errors on any property access that is not readyState
9473								if ( typeof xhr.status !== "number" ) {
9474									complete( 0, "error" );
9475								} else {
9476									complete(
9477
9478										// File: protocol always yields status 0; see #8605, #14207
9479										xhr.status,
9480										xhr.statusText
9481									);
9482								}
9483							} else {
9484								complete(
9485									xhrSuccessStatus[ xhr.status ] || xhr.status,
9486									xhr.statusText,
9487
9488									// Support: IE <=9 only
9489									// IE9 has no XHR2 but throws on binary (trac-11426)
9490									// For XHR2 non-text, let the caller handle it (gh-2498)
9491									( xhr.responseType || "text" ) !== "text"  ||
9492									typeof xhr.responseText !== "string" ?
9493										{ binary: xhr.response } :
9494										{ text: xhr.responseText },
9495									xhr.getAllResponseHeaders()
9496								);
9497							}
9498						}
9499					};
9500				};
9501
9502				// Listen to events
9503				xhr.onload = callback();
9504				errorCallback = xhr.onerror = callback( "error" );
9505
9506				// Support: IE 9 only
9507				// Use onreadystatechange to replace onabort
9508				// to handle uncaught aborts
9509				if ( xhr.onabort !== undefined ) {
9510					xhr.onabort = errorCallback;
9511				} else {
9512					xhr.onreadystatechange = function() {
9513
9514						// Check readyState before timeout as it changes
9515						if ( xhr.readyState === 4 ) {
9516
9517							// Allow onerror to be called first,
9518							// but that will not handle a native abort
9519							// Also, save errorCallback to a variable
9520							// as xhr.onerror cannot be accessed
9521							window.setTimeout( function() {
9522								if ( callback ) {
9523									errorCallback();
9524								}
9525							} );
9526						}
9527					};
9528				}
9529
9530				// Create the abort callback
9531				callback = callback( "abort" );
9532
9533				try {
9534
9535					// Do send the request (this may raise an exception)
9536					xhr.send( options.hasContent && options.data || null );
9537				} catch ( e ) {
9538
9539					// #14683: Only rethrow if this hasn't been notified as an error yet
9540					if ( callback ) {
9541						throw e;
9542					}
9543				}
9544			},
9545
9546			abort: function() {
9547				if ( callback ) {
9548					callback();
9549				}
9550			}
9551		};
9552	}
9553} );
9554
9555
9556
9557
9558// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
9559jQuery.ajaxPrefilter( function( s ) {
9560	if ( s.crossDomain ) {
9561		s.contents.script = false;
9562	}
9563} );
9564
9565// Install script dataType
9566jQuery.ajaxSetup( {
9567	accepts: {
9568		script: "text/javascript, application/javascript, " +
9569			"application/ecmascript, application/x-ecmascript"
9570	},
9571	contents: {
9572		script: /\b(?:java|ecma)script\b/
9573	},
9574	converters: {
9575		"text script": function( text ) {
9576			jQuery.globalEval( text );
9577			return text;
9578		}
9579	}
9580} );
9581
9582// Handle cache's special case and crossDomain
9583jQuery.ajaxPrefilter( "script", function( s ) {
9584	if ( s.cache === undefined ) {
9585		s.cache = false;
9586	}
9587	if ( s.crossDomain ) {
9588		s.type = "GET";
9589	}
9590} );
9591
9592// Bind script tag hack transport
9593jQuery.ajaxTransport( "script", function( s ) {
9594
9595	// This transport only deals with cross domain requests
9596	if ( s.crossDomain ) {
9597		var script, callback;
9598		return {
9599			send: function( _, complete ) {
9600				script = jQuery( "<script>" ).prop( {
9601					charset: s.scriptCharset,
9602					src: s.url
9603				} ).on(
9604					"load error",
9605					callback = function( evt ) {
9606						script.remove();
9607						callback = null;
9608						if ( evt ) {
9609							complete( evt.type === "error" ? 404 : 200, evt.type );
9610						}
9611					}
9612				);
9613
9614				// Use native DOM manipulation to avoid our domManip AJAX trickery
9615				document.head.appendChild( script[ 0 ] );
9616			},
9617			abort: function() {
9618				if ( callback ) {
9619					callback();
9620				}
9621			}
9622		};
9623	}
9624} );
9625
9626
9627
9628
9629var oldCallbacks = [],
9630	rjsonp = /(=)\?(?=&|$)|\?\?/;
9631
9632// Default jsonp settings
9633jQuery.ajaxSetup( {
9634	jsonp: "callback",
9635	jsonpCallback: function() {
9636		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
9637		this[ callback ] = true;
9638		return callback;
9639	}
9640} );
9641
9642// Detect, normalize options and install callbacks for jsonp requests
9643jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
9644
9645	var callbackName, overwritten, responseContainer,
9646		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
9647			"url" :
9648			typeof s.data === "string" &&
9649				( s.contentType || "" )
9650					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
9651				rjsonp.test( s.data ) && "data"
9652		);
9653
9654	// Handle iff the expected data type is "jsonp" or we have a parameter to set
9655	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
9656
9657		// Get callback name, remembering preexisting value associated with it
9658		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
9659			s.jsonpCallback() :
9660			s.jsonpCallback;
9661
9662		// Insert callback into url or form data
9663		if ( jsonProp ) {
9664			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
9665		} else if ( s.jsonp !== false ) {
9666			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
9667		}
9668
9669		// Use data converter to retrieve json after script execution
vendor: 2,994 bytes, lines 9670-9779
9670		s.converters[ "script json" ] = function() {
9671			if ( !responseContainer ) {
9672				jQuery.error( callbackName + " was not called" );
9673			}
9674			return responseContainer[ 0 ];
9675		};
9676
9677		// Force json dataType
9678		s.dataTypes[ 0 ] = "json";
9679
9680		// Install callback
9681		overwritten = window[ callbackName ];
9682		window[ callbackName ] = function() {
9683			responseContainer = arguments;
9684		};
9685
9686		// Clean-up function (fires after converters)
9687		jqXHR.always( function() {
9688
9689			// If previous value didn't exist - remove it
9690			if ( overwritten === undefined ) {
9691				jQuery( window ).removeProp( callbackName );
9692
9693			// Otherwise restore preexisting value
9694			} else {
9695				window[ callbackName ] = overwritten;
9696			}
9697
9698			// Save back as free
9699			if ( s[ callbackName ] ) {
9700
9701				// Make sure that re-using the options doesn't screw things around
9702				s.jsonpCallback = originalSettings.jsonpCallback;
9703
9704				// Save the callback name for future use
9705				oldCallbacks.push( callbackName );
9706			}
9707
9708			// Call if it was a function and we have a response
9709			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
9710				overwritten( responseContainer[ 0 ] );
9711			}
9712
9713			responseContainer = overwritten = undefined;
9714		} );
9715
9716		// Delegate to script
9717		return "script";
9718	}
9719} );
9720
9721
9722
9723
9724// Support: Safari 8 only
9725// In Safari 8 documents created via document.implementation.createHTMLDocument
9726// collapse sibling forms: the second one becomes a child of the first one.
9727// Because of that, this security measure has to be disabled in Safari 8.
9728// https://bugs.webkit.org/show_bug.cgi?id=137337
9729support.createHTMLDocument = ( function() {
9730	var body = document.implementation.createHTMLDocument( "" ).body;
9731	body.innerHTML = "<form></form><form></form>";
9732	return body.childNodes.length === 2;
9733} )();
9734
9735
9736// Argument "data" should be string of html
9737// context (optional): If specified, the fragment will be created in this context,
9738// defaults to document
9739// keepScripts (optional): If true, will include scripts passed in the html string
9740jQuery.parseHTML = function( data, context, keepScripts ) {
9741	if ( typeof data !== "string" ) {
9742		return [];
9743	}
9744	if ( typeof context === "boolean" ) {
9745		keepScripts = context;
9746		context = false;
9747	}
9748
9749	var base, parsed, scripts;
9750
9751	if ( !context ) {
9752
9753		// Stop scripts or inline event handlers from being executed immediately
9754		// by using document.implementation
9755		if ( support.createHTMLDocument ) {
9756			context = document.implementation.createHTMLDocument( "" );
9757
9758			// Set the base href for the created document
9759			// so any parsed elements with URLs
9760			// are based on the document's URL (gh-2965)
9761			base = context.createElement( "base" );
9762			base.href = document.location.href;
9763			context.head.appendChild( base );
9764		} else {
9765			context = document;
9766		}
9767	}
9768
9769	parsed = rsingleTag.exec( data );
9770	scripts = !keepScripts && [];
9771
9772	// Single tag
9773	if ( parsed ) {
9774		return [ context.createElement( parsed[ 1 ] ) ];
9775	}
9776
9777	parsed = buildFragment( [ data ], context, scripts );
9778
9779	if ( scripts && scripts.length ) {
vendor: 4,169 bytes, lines 9780-9956
9780		jQuery( scripts ).remove();
9781	}
9782
9783	return jQuery.merge( [], parsed.childNodes );
9784};
9785
9786
9787/**
9788 * Load a url into a page
9789 */
9790jQuery.fn.load = function( url, params, callback ) {
9791	var selector, type, response,
9792		self = this,
9793		off = url.indexOf( " " );
9794
9795	if ( off > -1 ) {
9796		selector = stripAndCollapse( url.slice( off ) );
9797		url = url.slice( 0, off );
9798	}
9799
9800	// If it's a function
9801	if ( jQuery.isFunction( params ) ) {
9802
9803		// We assume that it's the callback
9804		callback = params;
9805		params = undefined;
9806
9807	// Otherwise, build a param string
9808	} else if ( params && typeof params === "object" ) {
9809		type = "POST";
9810	}
9811
9812	// If we have elements to modify, make the request
9813	if ( self.length > 0 ) {
9814		jQuery.ajax( {
9815			url: url,
9816
9817			// If "type" variable is undefined, then "GET" method will be used.
9818			// Make value of this field explicit since
9819			// user can override it through ajaxSetup method
9820			type: type || "GET",
9821			dataType: "html",
9822			data: params
9823		} ).done( function( responseText ) {
9824
9825			// Save response for use in complete callback
9826			response = arguments;
9827
9828			self.html( selector ?
9829
9830				// If a selector was specified, locate the right elements in a dummy div
9831				// Exclude scripts to avoid IE 'Permission Denied' errors
9832				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
9833
9834				// Otherwise use the full result
9835				responseText );
9836
9837		// If the request succeeds, this function gets "data", "status", "jqXHR"
9838		// but they are ignored because response was set above.
9839		// If it fails, this function gets "jqXHR", "status", "error"
9840		} ).always( callback && function( jqXHR, status ) {
9841			self.each( function() {
9842				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
9843			} );
9844		} );
9845	}
9846
9847	return this;
9848};
9849
9850
9851
9852
9853// Attach a bunch of functions for handling common AJAX events
9854jQuery.each( [
9855	"ajaxStart",
9856	"ajaxStop",
9857	"ajaxComplete",
9858	"ajaxError",
9859	"ajaxSuccess",
9860	"ajaxSend"
9861], function( i, type ) {
9862	jQuery.fn[ type ] = function( fn ) {
9863		return this.on( type, fn );
9864	};
9865} );
9866
9867
9868
9869
9870jQuery.expr.pseudos.animated = function( elem ) {
9871	return jQuery.grep( jQuery.timers, function( fn ) {
9872		return elem === fn.elem;
9873	} ).length;
9874};
9875
9876
9877
9878
9879/**
9880 * Gets a window from an element
9881 */
9882function getWindow( elem ) {
9883	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
9884}
9885
9886jQuery.offset = {
9887	setOffset: function( elem, options, i ) {
9888		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
9889			position = jQuery.css( elem, "position" ),
9890			curElem = jQuery( elem ),
9891			props = {};
9892
9893		// Set position first, in-case top/left are set even on static elem
9894		if ( position === "static" ) {
9895			elem.style.position = "relative";
9896		}
9897
9898		curOffset = curElem.offset();
9899		curCSSTop = jQuery.css( elem, "top" );
9900		curCSSLeft = jQuery.css( elem, "left" );
9901		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
9902			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
9903
9904		// Need to be able to calculate position if either
9905		// top or left is auto and position is either absolute or fixed
9906		if ( calculatePosition ) {
9907			curPosition = curElem.position();
9908			curTop = curPosition.top;
9909			curLeft = curPosition.left;
9910
9911		} else {
9912			curTop = parseFloat( curCSSTop ) || 0;
9913			curLeft = parseFloat( curCSSLeft ) || 0;
9914		}
9915
9916		if ( jQuery.isFunction( options ) ) {
9917
9918			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
9919			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
9920		}
9921
9922		if ( options.top != null ) {
9923			props.top = ( options.top - curOffset.top ) + curTop;
9924		}
9925		if ( options.left != null ) {
9926			props.left = ( options.left - curOffset.left ) + curLeft;
9927		}
9928
9929		if ( "using" in options ) {
9930			options.using.call( elem, props );
9931
9932		} else {
9933			curElem.css( props );
9934		}
9935	}
9936};
9937
9938jQuery.fn.extend( {
9939	offset: function( options ) {
9940
9941		// Preserve chaining for setter
9942		if ( arguments.length ) {
9943			return options === undefined ?
9944				this :
9945				this.each( function( i ) {
9946					jQuery.offset.setOffset( this, options, i );
9947				} );
9948		}
9949
9950		var docElem, win, rect, doc,
9951			elem = this[ 0 ];
9952
9953		if ( !elem ) {
9954			return;
9955		}
9956
vendor: 4,167 bytes, lines 9957-10094
9957		// Support: IE <=11 only
9958		// Running getBoundingClientRect on a
9959		// disconnected node in IE throws an error
9960		if ( !elem.getClientRects().length ) {
9961			return { top: 0, left: 0 };
9962		}
9963
9964		rect = elem.getBoundingClientRect();
9965
9966		// Make sure element is not hidden (display: none)
9967		if ( rect.width || rect.height ) {
9968			doc = elem.ownerDocument;
9969			win = getWindow( doc );
9970			docElem = doc.documentElement;
9971
9972			return {
9973				top: rect.top + win.pageYOffset - docElem.clientTop,
9974				left: rect.left + win.pageXOffset - docElem.clientLeft
9975			};
9976		}
9977
9978		// Return zeros for disconnected and hidden elements (gh-2310)
9979		return rect;
9980	},
9981
9982	position: function() {
9983		if ( !this[ 0 ] ) {
9984			return;
9985		}
9986
9987		var offsetParent, offset,
9988			elem = this[ 0 ],
9989			parentOffset = { top: 0, left: 0 };
9990
9991		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
9992		// because it is its only offset parent
9993		if ( jQuery.css( elem, "position" ) === "fixed" ) {
9994
9995			// Assume getBoundingClientRect is there when computed position is fixed
9996			offset = elem.getBoundingClientRect();
9997
9998		} else {
9999
10000			// Get *real* offsetParent
10001			offsetParent = this.offsetParent();
10002
10003			// Get correct offsets
10004			offset = this.offset();
10005			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
10006				parentOffset = offsetParent.offset();
10007			}
10008
10009			// Add offsetParent borders
10010			parentOffset = {
10011				top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
10012				left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
10013			};
10014		}
10015
10016		// Subtract parent offsets and element margins
10017		return {
10018			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
10019			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
10020		};
10021	},
10022
10023	// This method will return documentElement in the following cases:
10024	// 1) For the element inside the iframe without offsetParent, this method will return
10025	//    documentElement of the parent window
10026	// 2) For the hidden or detached element
10027	// 3) For body or html element, i.e. in case of the html node - it will return itself
10028	//
10029	// but those exceptions were never presented as a real life use-cases
10030	// and might be considered as more preferable results.
10031	//
10032	// This logic, however, is not guaranteed and can change at any point in the future
10033	offsetParent: function() {
10034		return this.map( function() {
10035			var offsetParent = this.offsetParent;
10036
10037			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
10038				offsetParent = offsetParent.offsetParent;
10039			}
10040
10041			return offsetParent || documentElement;
10042		} );
10043	}
10044} );
10045
10046// Create scrollLeft and scrollTop methods
10047jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
10048	var top = "pageYOffset" === prop;
10049
10050	jQuery.fn[ method ] = function( val ) {
10051		return access( this, function( elem, method, val ) {
10052			var win = getWindow( elem );
10053
10054			if ( val === undefined ) {
10055				return win ? win[ prop ] : elem[ method ];
10056			}
10057
10058			if ( win ) {
10059				win.scrollTo(
10060					!top ? val : win.pageXOffset,
10061					top ? val : win.pageYOffset
10062				);
10063
10064			} else {
10065				elem[ method ] = val;
10066			}
10067		}, method, val, arguments.length );
10068	};
10069} );
10070
10071// Support: Safari <=7 - 9.1, Chrome <=37 - 49
10072// Add the top/left cssHooks using jQuery.fn.position
10073// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
10074// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
10075// getComputedStyle returns percent when specified for top/left/bottom/right;
10076// rather than make the css module depend on the offset module, just check for it here
10077jQuery.each( [ "top", "left" ], function( i, prop ) {
10078	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
10079		function( elem, computed ) {
10080			if ( computed ) {
10081				computed = curCSS( elem, prop );
10082
10083				// If curCSS returns percentage, fallback to offset
10084				return rnumnonpx.test( computed ) ?
10085					jQuery( elem ).position()[ prop ] + "px" :
10086					computed;
10087			}
10088		}
10089	);
10090} );
10091
10092
10093// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
10094jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
vendor: 5,171 bytes, lines 10095-10256
10095	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
10096		function( defaultExtra, funcName ) {
10097
10098		// Margin is only for outerHeight, outerWidth
10099		jQuery.fn[ funcName ] = function( margin, value ) {
10100			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
10101				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
10102
10103			return access( this, function( elem, type, value ) {
10104				var doc;
10105
10106				if ( jQuery.isWindow( elem ) ) {
10107
10108					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
10109					return funcName.indexOf( "outer" ) === 0 ?
10110						elem[ "inner" + name ] :
10111						elem.document.documentElement[ "client" + name ];
10112				}
10113
10114				// Get document width or height
10115				if ( elem.nodeType === 9 ) {
10116					doc = elem.documentElement;
10117
10118					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
10119					// whichever is greatest
10120					return Math.max(
10121						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
10122						elem.body[ "offset" + name ], doc[ "offset" + name ],
10123						doc[ "client" + name ]
10124					);
10125				}
10126
10127				return value === undefined ?
10128
10129					// Get width or height on the element, requesting but not forcing parseFloat
10130					jQuery.css( elem, type, extra ) :
10131
10132					// Set width or height on the element
10133					jQuery.style( elem, type, value, extra );
10134			}, type, chainable ? margin : undefined, chainable );
10135		};
10136	} );
10137} );
10138
10139
10140jQuery.fn.extend( {
10141
10142	bind: function( types, data, fn ) {
10143		return this.on( types, null, data, fn );
10144	},
10145	unbind: function( types, fn ) {
10146		return this.off( types, null, fn );
10147	},
10148
10149	delegate: function( selector, types, data, fn ) {
10150		return this.on( types, selector, data, fn );
10151	},
10152	undelegate: function( selector, types, fn ) {
10153
10154		// ( namespace ) or ( selector, types [, fn] )
10155		return arguments.length === 1 ?
10156			this.off( selector, "**" ) :
10157			this.off( types, selector || "**", fn );
10158	}
10159} );
10160
10161jQuery.parseJSON = JSON.parse;
10162
10163
10164
10165
10166// Register as a named AMD module, since jQuery can be concatenated with other
10167// files that may use define, but not via a proper concatenation script that
10168// understands anonymous AMD modules. A named AMD is safest and most robust
10169// way to register. Lowercase jquery is used because AMD module names are
10170// derived from file names, and jQuery is normally delivered in a lowercase
10171// file name. Do this after creating the global so that if an AMD module wants
10172// to call noConflict to hide this version of jQuery, it will work.
10173
10174// Note that for maximum portability, libraries that are not jQuery should
10175// declare themselves as anonymous modules, and avoid setting a global if an
10176// AMD loader is present. jQuery is a special case. For more information, see
10177// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
10178
10179if ( typeof define === "function" && define.amd ) {
10180	define( "jquery", [], function() {
10181		return jQuery;
10182	} );
10183}
10184
10185
10186
10187
10188var
10189
10190	// Map over jQuery in case of overwrite
10191	_jQuery = window.jQuery,
10192
10193	// Map over the $ in case of overwrite
10194	_$ = window.$;
10195
10196jQuery.noConflict = function( deep ) {
10197	if ( window.$ === jQuery ) {
10198		window.$ = _$;
10199	}
10200
10201	if ( deep && window.jQuery === jQuery ) {
10202		window.jQuery = _jQuery;
10203	}
10204
10205	return jQuery;
10206};
10207
10208// Expose jQuery and $ identifiers, even in AMD
10209// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10210// and CommonJS for browser emulators (#13566)
10211if ( !noGlobal ) {
10212	window.jQuery = window.$ = jQuery;
10213}
10214
10215
10216
10217
10218
10219return jQuery;
10220} );
10221
10222/*! jQuery UI - v1.13.1 - 2022-02-07
10223* http://jqueryui.com
10224* Includes: data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, position.js, scroll-parent.js, tabbable.js, unique-id.js, widget.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
10225* Copyright jQuery Foundation and other contributors; Licensed MIT */
10226
10227( function( factory ) {
10228	"use strict";
10229	
10230	if ( typeof define === "function" && define.amd ) {
10231
10232		// AMD. Register as an anonymous module.
10233		define( [ "jquery" ], factory );
10234	} else {
10235
10236		// Browser globals
10237		factory( jQuery );
10238	}
10239} )( function( $ ) {
10240"use strict";
10241
10242$.ui = $.ui || {};
10243
10244var version = $.ui.version = "1.13.1";
10245
10246
10247/*!
10248 * jQuery UI :data 1.13.1
10249 * http://jqueryui.com
10250 *
10251 * Copyright jQuery Foundation and other contributors
10252 * Released under the MIT license.
10253 * http://jquery.org/license
10254 */
10255
10256//>>label: :data Selector
vendor: 1,696 bytes, lines 10257-10325
10257//>>group: Core
10258//>>description: Selects elements which have data stored under the specified key.
10259//>>docs: http://api.jqueryui.com/data-selector/
10260
10261
10262var data = $.extend( $.expr.pseudos, {
10263	data: $.expr.createPseudo ?
10264		$.expr.createPseudo( function( dataName ) {
10265			return function( elem ) {
10266				return !!$.data( elem, dataName );
10267			};
10268		} ) :
10269
10270		// Support: jQuery <1.8
10271		function( elem, i, match ) {
10272			return !!$.data( elem, match[ 3 ] );
10273		}
10274} );
10275
10276/*!
10277 * jQuery UI Disable Selection 1.13.1
10278 * http://jqueryui.com
10279 *
10280 * Copyright jQuery Foundation and other contributors
10281 * Released under the MIT license.
10282 * http://jquery.org/license
10283 */
10284
10285//>>label: disableSelection
10286//>>group: Core
10287//>>description: Disable selection of text content within the set of matched elements.
10288//>>docs: http://api.jqueryui.com/disableSelection/
10289
10290// This file is deprecated
10291
10292var disableSelection = $.fn.extend( {
10293	disableSelection: ( function() {
10294		var eventType = "onselectstart" in document.createElement( "div" ) ?
10295			"selectstart" :
10296			"mousedown";
10297
10298		return function() {
10299			return this.on( eventType + ".ui-disableSelection", function( event ) {
10300				event.preventDefault();
10301			} );
10302		};
10303	} )(),
10304
10305	enableSelection: function() {
10306		return this.off( ".ui-disableSelection" );
10307	}
10308} );
10309
10310
10311
10312// Create a local jQuery because jQuery Color relies on it and the
10313// global may not exist with AMD and a custom build (#10199).
10314// This module is a noop if used as a regular AMD module.
10315// eslint-disable-next-line no-unused-vars
10316var jQuery = $;
10317
10318
10319/*!
10320 * jQuery Color Animations v2.2.0
10321 * https://github.com/jquery/jquery-color
10322 *
10323 * Copyright OpenJS Foundation and other contributors
10324 * Released under the MIT license.
10325 * http
vendor: 16,926 bytes, lines 10325-11032
10325://jquery.org/license
10326 *
10327 * Date: Sun May 10 09:02:36 2020 +0200
10328 */
10329
10330
10331
10332	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +
10333		"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
10334
10335	class2type = {},
10336	toString = class2type.toString,
10337
10338	// plusequals test for += 100 -= 100
10339	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
10340
10341	// a set of RE's that can match strings and generate color tuples.
10342	stringParsers = [ {
10343			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
10344			parse: function( execResult ) {
10345				return [
10346					execResult[ 1 ],
10347					execResult[ 2 ],
10348					execResult[ 3 ],
10349					execResult[ 4 ]
10350				];
10351			}
10352		}, {
10353			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
10354			parse: function( execResult ) {
10355				return [
10356					execResult[ 1 ] * 2.55,
10357					execResult[ 2 ] * 2.55,
10358					execResult[ 3 ] * 2.55,
10359					execResult[ 4 ]
10360				];
10361			}
10362		}, {
10363
10364			// this regex ignores A-F because it's compared against an already lowercased string
10365			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,
10366			parse: function( execResult ) {
10367				return [
10368					parseInt( execResult[ 1 ], 16 ),
10369					parseInt( execResult[ 2 ], 16 ),
10370					parseInt( execResult[ 3 ], 16 ),
10371					execResult[ 4 ] ?
10372						( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :
10373						1
10374				];
10375			}
10376		}, {
10377
10378			// this regex ignores A-F because it's compared against an already lowercased string
10379			re: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,
10380			parse: function( execResult ) {
10381				return [
10382					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
10383					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
10384					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),
10385					execResult[ 4 ] ?
10386						( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )
10387							.toFixed( 2 ) :
10388						1
10389				];
10390			}
10391		}, {
10392			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
10393			space: "hsla",
10394			parse: function( execResult ) {
10395				return [
10396					execResult[ 1 ],
10397					execResult[ 2 ] / 100,
10398					execResult[ 3 ] / 100,
10399					execResult[ 4 ]
10400				];
10401			}
10402		} ],
10403
10404	// jQuery.Color( )
10405	color = jQuery.Color = function( color, green, blue, alpha ) {
10406		return new jQuery.Color.fn.parse( color, green, blue, alpha );
10407	},
10408	spaces = {
10409		rgba: {
10410			props: {
10411				red: {
10412					idx: 0,
10413					type: "byte"
10414				},
10415				green: {
10416					idx: 1,
10417					type: "byte"
10418				},
10419				blue: {
10420					idx: 2,
10421					type: "byte"
10422				}
10423			}
10424		},
10425
10426		hsla: {
10427			props: {
10428				hue: {
10429					idx: 0,
10430					type: "degrees"
10431				},
10432				saturation: {
10433					idx: 1,
10434					type: "percent"
10435				},
10436				lightness: {
10437					idx: 2,
10438					type: "percent"
10439				}
10440			}
10441		}
10442	},
10443	propTypes = {
10444		"byte": {
10445			floor: true,
10446			max: 255
10447		},
10448		"percent": {
10449			max: 1
10450		},
10451		"degrees": {
10452			mod: 360,
10453			floor: true
10454		}
10455	},
10456	support = color.support = {},
10457
10458	// element for support tests
10459	supportElem = jQuery( "<p>" )[ 0 ],
10460
10461	// colors = jQuery.Color.names
10462	colors,
10463
10464	// local aliases of functions called often
10465	each = jQuery.each;
10466
10467// determine rgba support immediately
10468supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
10469support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
10470
10471// define cache name and alpha properties
10472// for rgba and hsla spaces
10473each( spaces, function( spaceName, space ) {
10474	space.cache = "_" + spaceName;
10475	space.props.alpha = {
10476		idx: 3,
10477		type: "percent",
10478		def: 1
10479	};
10480} );
10481
10482// Populate the class2type map
10483jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
10484	function( _i, name ) {
10485		class2type[ "[object " + name + "]" ] = name.toLowerCase();
10486	} );
10487
10488function getType( obj ) {
10489	if ( obj == null ) {
10490		return obj + "";
10491	}
10492
10493	return typeof obj === "object" ?
10494		class2type[ toString.call( obj ) ] || "object" :
10495		typeof obj;
10496}
10497
10498function clamp( value, prop, allowEmpty ) {
10499	var type = propTypes[ prop.type ] || {};
10500
10501	if ( value == null ) {
10502		return ( allowEmpty || !prop.def ) ? null : prop.def;
10503	}
10504
10505	// ~~ is an short way of doing floor for positive numbers
10506	value = type.floor ? ~~value : parseFloat( value );
10507
10508	// IE will pass in empty strings as value for alpha,
10509	// which will hit this case
10510	if ( isNaN( value ) ) {
10511		return prop.def;
10512	}
10513
10514	if ( type.mod ) {
10515
10516		// we add mod before modding to make sure that negatives values
10517		// get converted properly: -10 -> 350
10518		return ( value + type.mod ) % type.mod;
10519	}
10520
10521	// for now all property types without mod have min and max
10522	return Math.min( type.max, Math.max( 0, value ) );
10523}
10524
10525function stringParse( string ) {
10526	var inst = color(),
10527		rgba = inst._rgba = [];
10528
10529	string = string.toLowerCase();
10530
10531	each( stringParsers, function( _i, parser ) {
10532		var parsed,
10533			match = parser.re.exec( string ),
10534			values = match && parser.parse( match ),
10535			spaceName = parser.space || "rgba";
10536
10537		if ( values ) {
10538			parsed = inst[ spaceName ]( values );
10539
10540			// if this was an rgba parse the assignment might happen twice
10541			// oh well....
10542			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
10543			rgba = inst._rgba = parsed._rgba;
10544
10545			// exit each( stringParsers ) here because we matched
10546			return false;
10547		}
10548	} );
10549
10550	// Found a stringParser that handled it
10551	if ( rgba.length ) {
10552
10553		// if this came from a parsed string, force "transparent" when alpha is 0
10554		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
10555		if ( rgba.join() === "0,0,0,0" ) {
10556			jQuery.extend( rgba, colors.transparent );
10557		}
10558		return inst;
10559	}
10560
10561	// named colors
10562	return colors[ string ];
10563}
10564
10565color.fn = jQuery.extend( color.prototype, {
10566	parse: function( red, green, blue, alpha ) {
10567		if ( red === undefined ) {
10568			this._rgba = [ null, null, null, null ];
10569			return this;
10570		}
10571		if ( red.jquery || red.nodeType ) {
10572			red = jQuery( red ).css( green );
10573			green = undefined;
10574		}
10575
10576		var inst = this,
10577			type = getType( red ),
10578			rgba = this._rgba = [];
10579
10580		// more than 1 argument specified - assume ( red, green, blue, alpha )
10581		if ( green !== undefined ) {
10582			red = [ red, green, blue, alpha ];
10583			type = "array";
10584		}
10585
10586		if ( type === "string" ) {
10587			return this.parse( stringParse( red ) || colors._default );
10588		}
10589
10590		if ( type === "array" ) {
10591			each( spaces.rgba.props, function( _key, prop ) {
10592				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
10593			} );
10594			return this;
10595		}
10596
10597		if ( type === "object" ) {
10598			if ( red instanceof color ) {
10599				each( spaces, function( _spaceName, space ) {
10600					if ( red[ space.cache ] ) {
10601						inst[ space.cache ] = red[ space.cache ].slice();
10602					}
10603				} );
10604			} else {
10605				each( spaces, function( _spaceName, space ) {
10606					var cache = space.cache;
10607					each( space.props, function( key, prop ) {
10608
10609						// if the cache doesn't exist, and we know how to convert
10610						if ( !inst[ cache ] && space.to ) {
10611
10612							// if the value was null, we don't need to copy it
10613							// if the key was alpha, we don't need to copy it either
10614							if ( key === "alpha" || red[ key ] == null ) {
10615								return;
10616							}
10617							inst[ cache ] = space.to( inst._rgba );
10618						}
10619
10620						// this is the only case where we allow nulls for ALL properties.
10621						// call clamp with alwaysAllowEmpty
10622						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
10623					} );
10624
10625					// everything defined but alpha?
10626					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
10627
10628						// use the default of 1
10629						if ( inst[ cache ][ 3 ] == null ) {
10630							inst[ cache ][ 3 ] = 1;
10631						}
10632
10633						if ( space.from ) {
10634							inst._rgba = space.from( inst[ cache ] );
10635						}
10636					}
10637				} );
10638			}
10639			return this;
10640		}
10641	},
10642	is: function( compare ) {
10643		var is = color( compare ),
10644			same = true,
10645			inst = this;
10646
10647		each( spaces, function( _, space ) {
10648			var localCache,
10649				isCache = is[ space.cache ];
10650			if ( isCache ) {
10651				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
10652				each( space.props, function( _, prop ) {
10653					if ( isCache[ prop.idx ] != null ) {
10654						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
10655						return same;
10656					}
10657				} );
10658			}
10659			return same;
10660		} );
10661		return same;
10662	},
10663	_space: function() {
10664		var used = [],
10665			inst = this;
10666		each( spaces, function( spaceName, space ) {
10667			if ( inst[ space.cache ] ) {
10668				used.push( spaceName );
10669			}
10670		} );
10671		return used.pop();
10672	},
10673	transition: function( other, distance ) {
10674		var end = color( other ),
10675			spaceName = end._space(),
10676			space = spaces[ spaceName ],
10677			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
10678			start = startColor[ space.cache ] || space.to( startColor._rgba ),
10679			result = start.slice();
10680
10681		end = end[ space.cache ];
10682		each( space.props, function( _key, prop ) {
10683			var index = prop.idx,
10684				startValue = start[ index ],
10685				endValue = end[ index ],
10686				type = propTypes[ prop.type ] || {};
10687
10688			// if null, don't override start value
10689			if ( endValue === null ) {
10690				return;
10691			}
10692
10693			// if null - use end
10694			if ( startValue === null ) {
10695				result[ index ] = endValue;
10696			} else {
10697				if ( type.mod ) {
10698					if ( endValue - startValue > type.mod / 2 ) {
10699						startValue += type.mod;
10700					} else if ( startValue - endValue > type.mod / 2 ) {
10701						startValue -= type.mod;
10702					}
10703				}
10704				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
10705			}
10706		} );
10707		return this[ spaceName ]( result );
10708	},
10709	blend: function( opaque ) {
10710
10711		// if we are already opaque - return ourself
10712		if ( this._rgba[ 3 ] === 1 ) {
10713			return this;
10714		}
10715
10716		var rgb = this._rgba.slice(),
10717			a = rgb.pop(),
10718			blend = color( opaque )._rgba;
10719
10720		return color( jQuery.map( rgb, function( v, i ) {
10721			return ( 1 - a ) * blend[ i ] + a * v;
10722		} ) );
10723	},
10724	toRgbaString: function() {
10725		var prefix = "rgba(",
10726			rgba = jQuery.map( this._rgba, function( v, i ) {
10727				if ( v != null ) {
10728					return v;
10729				}
10730				return i > 2 ? 1 : 0;
10731			} );
10732
10733		if ( rgba[ 3 ] === 1 ) {
10734			rgba.pop();
10735			prefix = "rgb(";
10736		}
10737
10738		return prefix + rgba.join() + ")";
10739	},
10740	toHslaString: function() {
10741		var prefix = "hsla(",
10742			hsla = jQuery.map( this.hsla(), function( v, i ) {
10743				if ( v == null ) {
10744					v = i > 2 ? 1 : 0;
10745				}
10746
10747				// catch 1 and 2
10748				if ( i && i < 3 ) {
10749					v = Math.round( v * 100 ) + "%";
10750				}
10751				return v;
10752			} );
10753
10754		if ( hsla[ 3 ] === 1 ) {
10755			hsla.pop();
10756			prefix = "hsl(";
10757		}
10758		return prefix + hsla.join() + ")";
10759	},
10760	toHexString: function( includeAlpha ) {
10761		var rgba = this._rgba.slice(),
10762			alpha = rgba.pop();
10763
10764		if ( includeAlpha ) {
10765			rgba.push( ~~( alpha * 255 ) );
10766		}
10767
10768		return "#" + jQuery.map( rgba, function( v ) {
10769
10770			// default to 0 when nulls exist
10771			v = ( v || 0 ).toString( 16 );
10772			return v.length === 1 ? "0" + v : v;
10773		} ).join( "" );
10774	},
10775	toString: function() {
10776		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
10777	}
10778} );
10779color.fn.parse.prototype = color.fn;
10780
10781// hsla conversions adapted from:
10782// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
10783
10784function hue2rgb( p, q, h ) {
10785	h = ( h + 1 ) % 1;
10786	if ( h * 6 < 1 ) {
10787		return p + ( q - p ) * h * 6;
10788	}
10789	if ( h * 2 < 1 ) {
10790		return q;
10791	}
10792	if ( h * 3 < 2 ) {
10793		return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
10794	}
10795	return p;
10796}
10797
10798spaces.hsla.to = function( rgba ) {
10799	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
10800		return [ null, null, null, rgba[ 3 ] ];
10801	}
10802	var r = rgba[ 0 ] / 255,
10803		g = rgba[ 1 ] / 255,
10804		b = rgba[ 2 ] / 255,
10805		a = rgba[ 3 ],
10806		max = Math.max( r, g, b ),
10807		min = Math.min( r, g, b ),
10808		diff = max - min,
10809		add = max + min,
10810		l = add * 0.5,
10811		h, s;
10812
10813	if ( min === max ) {
10814		h = 0;
10815	} else if ( r === max ) {
10816		h = ( 60 * ( g - b ) / diff ) + 360;
10817	} else if ( g === max ) {
10818		h = ( 60 * ( b - r ) / diff ) + 120;
10819	} else {
10820		h = ( 60 * ( r - g ) / diff ) + 240;
10821	}
10822
10823	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
10824	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
10825	if ( diff === 0 ) {
10826		s = 0;
10827	} else if ( l <= 0.5 ) {
10828		s = diff / add;
10829	} else {
10830		s = diff / ( 2 - add );
10831	}
10832	return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];
10833};
10834
10835spaces.hsla.from = function( hsla ) {
10836	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
10837		return [ null, null, null, hsla[ 3 ] ];
10838	}
10839	var h = hsla[ 0 ] / 360,
10840		s = hsla[ 1 ],
10841		l = hsla[ 2 ],
10842		a = hsla[ 3 ],
10843		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
10844		p = 2 * l - q;
10845
10846	return [
10847		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
10848		Math.round( hue2rgb( p, q, h ) * 255 ),
10849		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
10850		a
10851	];
10852};
10853
10854
10855each( spaces, function( spaceName, space ) {
10856	var props = space.props,
10857		cache = space.cache,
10858		to = space.to,
10859		from = space.from;
10860
10861	// makes rgba() and hsla()
10862	color.fn[ spaceName ] = function( value ) {
10863
10864		// generate a cache for this space if it doesn't exist
10865		if ( to && !this[ cache ] ) {
10866			this[ cache ] = to( this._rgba );
10867		}
10868		if ( value === undefined ) {
10869			return this[ cache ].slice();
10870		}
10871
10872		var ret,
10873			type = getType( value ),
10874			arr = ( type === "array" || type === "object" ) ? value : arguments,
10875			local = this[ cache ].slice();
10876
10877		each( props, function( key, prop ) {
10878			var val = arr[ type === "object" ? key : prop.idx ];
10879			if ( val == null ) {
10880				val = local[ prop.idx ];
10881			}
10882			local[ prop.idx ] = clamp( val, prop );
10883		} );
10884
10885		if ( from ) {
10886			ret = color( from( local ) );
10887			ret[ cache ] = local;
10888			return ret;
10889		} else {
10890			return color( local );
10891		}
10892	};
10893
10894	// makes red() green() blue() alpha() hue() saturation() lightness()
10895	each( props, function( key, prop ) {
10896
10897		// alpha is included in more than one space
10898		if ( color.fn[ key ] ) {
10899			return;
10900		}
10901		color.fn[ key ] = function( value ) {
10902			var local, cur, match, fn,
10903				vtype = getType( value );
10904
10905			if ( key === "alpha" ) {
10906				fn = this._hsla ? "hsla" : "rgba";
10907			} else {
10908				fn = spaceName;
10909			}
10910			local = this[ fn ]();
10911			cur = local[ prop.idx ];
10912
10913			if ( vtype === "undefined" ) {
10914				return cur;
10915			}
10916
10917			if ( vtype === "function" ) {
10918				value = value.call( this, cur );
10919				vtype = getType( value );
10920			}
10921			if ( value == null && prop.empty ) {
10922				return this;
10923			}
10924			if ( vtype === "string" ) {
10925				match = rplusequals.exec( value );
10926				if ( match ) {
10927					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
10928				}
10929			}
10930			local[ prop.idx ] = value;
10931			return this[ fn ]( local );
10932		};
10933	} );
10934} );
10935
10936// add cssHook and .fx.step function for each named hook.
10937// accept a space separated string of properties
10938color.hook = function( hook ) {
10939	var hooks = hook.split( " " );
10940	each( hooks, function( _i, hook ) {
10941		jQuery.cssHooks[ hook ] = {
10942			set: function( elem, value ) {
10943				var parsed, curElem,
10944					backgroundColor = "";
10945
10946				if ( value !== "transparent" && ( getType( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
10947					value = color( parsed || value );
10948					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
10949						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
10950						while (
10951							( backgroundColor === "" || backgroundColor === "transparent" ) &&
10952							curElem && curElem.style
10953						) {
10954							try {
10955								backgroundColor = jQuery.css( curElem, "backgroundColor" );
10956								curElem = curElem.parentNode;
10957							} catch ( e ) {
10958							}
10959						}
10960
10961						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
10962							backgroundColor :
10963							"_default" );
10964					}
10965
10966					value = value.toRgbaString();
10967				}
10968				try {
10969					elem.style[ hook ] = value;
10970				} catch ( e ) {
10971
10972					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
10973				}
10974			}
10975		};
10976		jQuery.fx.step[ hook ] = function( fx ) {
10977			if ( !fx.colorInit ) {
10978				fx.start = color( fx.elem, hook );
10979				fx.end = color( fx.end );
10980				fx.colorInit = true;
10981			}
10982			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
10983		};
10984	} );
10985
10986};
10987
10988color.hook( stepHooks );
10989
10990jQuery.cssHooks.borderColor = {
10991	expand: function( value ) {
10992		var expanded = {};
10993
10994		each( [ "Top", "Right", "Bottom", "Left" ], function( _i, part ) {
10995			expanded[ "border" + part + "Color" ] = value;
10996		} );
10997		return expanded;
10998	}
10999};
11000
11001// Basic color names only.
11002// Usage of any of the other color names requires adding yourself or including
11003// jquery.color.svg-names.js.
11004colors = jQuery.Color.names = {
11005
11006	// 4.1. Basic color keywords
11007	aqua: "#00ffff",
11008	black: "#000000",
11009	blue: "#0000ff",
11010	fuchsia: "#ff00ff",
11011	gray: "#808080",
11012	green: "#008000",
11013	lime: "#00ff00",
11014	maroon: "#800000",
11015	navy: "#000080",
11016	olive: "#808000",
11017	purple: "#800080",
11018	red: "#ff0000",
11019	silver: "#c0c0c0",
11020	teal: "#008080",
11021	white: "#ffffff",
11022	yellow: "#ffff00",
11023
11024	// 4.2.3. "transparent" color keyword
11025	transparent: [ null, null, null, 0 ],
11026
11027	_default: "#ffffff"
11028};
11029
11030
11031/*!
11032 * jQuery UI Effects 1.13.
110321
11033 * http://jqueryui.com
11034 *
11035 * Copyright jQuery Foundation and other contributors
11036 * Released under the MIT license.
11037 * http://jquery.org/license
11038 */
11039
11040//>>label: Effects Core
11041//>>group: Effects
11042/* eslint-disable max-len */
11043//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.
11044/* eslint-enable max-len */
11045//>>docs: http://api.jqueryui.com/category/effects-core/
11046//>>demos: http
vendor: 9,484 bytes, lines 11046-11416
11046://jqueryui.com/effect/
11047
11048
11049var dataSpace = "ui-effects-",
11050	dataSpaceStyle = "ui-effects-style",
11051	dataSpaceAnimated = "ui-effects-animated";
11052
11053$.effects = {
11054	effect: {}
11055};
11056
11057/******************************************************************************/
11058/****************************** CLASS ANIMATIONS ******************************/
11059/******************************************************************************/
11060( function() {
11061
11062var classAnimationActions = [ "add", "remove", "toggle" ],
11063	shorthandStyles = {
11064		border: 1,
11065		borderBottom: 1,
11066		borderColor: 1,
11067		borderLeft: 1,
11068		borderRight: 1,
11069		borderTop: 1,
11070		borderWidth: 1,
11071		margin: 1,
11072		padding: 1
11073	};
11074
11075$.each(
11076	[ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ],
11077	function( _, prop ) {
11078		$.fx.step[ prop ] = function( fx ) {
11079			if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
11080				jQuery.style( fx.elem, prop, fx.end );
11081				fx.setAttr = true;
11082			}
11083		};
11084	}
11085);
11086
11087function camelCase( string ) {
11088	return string.replace( /-([\da-z])/gi, function( all, letter ) {
11089		return letter.toUpperCase();
11090	} );
11091}
11092
11093function getElementStyles( elem ) {
11094	var key, len,
11095		style = elem.ownerDocument.defaultView ?
11096			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
11097			elem.currentStyle,
11098		styles = {};
11099
11100	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
11101		len = style.length;
11102		while ( len-- ) {
11103			key = style[ len ];
11104			if ( typeof style[ key ] === "string" ) {
11105				styles[ camelCase( key ) ] = style[ key ];
11106			}
11107		}
11108
11109	// Support: Opera, IE <9
11110	} else {
11111		for ( key in style ) {
11112			if ( typeof style[ key ] === "string" ) {
11113				styles[ key ] = style[ key ];
11114			}
11115		}
11116	}
11117
11118	return styles;
11119}
11120
11121function styleDifference( oldStyle, newStyle ) {
11122	var diff = {},
11123		name, value;
11124
11125	for ( name in newStyle ) {
11126		value = newStyle[ name ];
11127		if ( oldStyle[ name ] !== value ) {
11128			if ( !shorthandStyles[ name ] ) {
11129				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
11130					diff[ name ] = value;
11131				}
11132			}
11133		}
11134	}
11135
11136	return diff;
11137}
11138
11139// Support: jQuery <1.8
11140if ( !$.fn.addBack ) {
11141	$.fn.addBack = function( selector ) {
11142		return this.add( selector == null ?
11143			this.prevObject : this.prevObject.filter( selector )
11144		);
11145	};
11146}
11147
11148$.effects.animateClass = function( value, duration, easing, callback ) {
11149	var o = $.speed( duration, easing, callback );
11150
11151	return this.queue( function() {
11152		var animated = $( this ),
11153			baseClass = animated.attr( "class" ) || "",
11154			applyClassChange,
11155			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
11156
11157		// Map the animated objects to store the original styles.
11158		allAnimations = allAnimations.map( function() {
11159			var el = $( this );
11160			return {
11161				el: el,
11162				start: getElementStyles( this )
11163			};
11164		} );
11165
11166		// Apply class change
11167		applyClassChange = function() {
11168			$.each( classAnimationActions, function( i, action ) {
11169				if ( value[ action ] ) {
11170					animated[ action + "Class" ]( value[ action ] );
11171				}
11172			} );
11173		};
11174		applyClassChange();
11175
11176		// Map all animated objects again - calculate new styles and diff
11177		allAnimations = allAnimations.map( function() {
11178			this.end = getElementStyles( this.el[ 0 ] );
11179			this.diff = styleDifference( this.start, this.end );
11180			return this;
11181		} );
11182
11183		// Apply original class
11184		animated.attr( "class", baseClass );
11185
11186		// Map all animated objects again - this time collecting a promise
11187		allAnimations = allAnimations.map( function() {
11188			var styleInfo = this,
11189				dfd = $.Deferred(),
11190				opts = $.extend( {}, o, {
11191					queue: false,
11192					complete: function() {
11193						dfd.resolve( styleInfo );
11194					}
11195				} );
11196
11197			this.el.animate( this.diff, opts );
11198			return dfd.promise();
11199		} );
11200
11201		// Once all animations have completed:
11202		$.when.apply( $, allAnimations.get() ).done( function() {
11203
11204			// Set the final class
11205			applyClassChange();
11206
11207			// For each animated element,
11208			// clear all css properties that were animated
11209			$.each( arguments, function() {
11210				var el = this.el;
11211				$.each( this.diff, function( key ) {
11212					el.css( key, "" );
11213				} );
11214			} );
11215
11216			// This is guarnteed to be there if you use jQuery.speed()
11217			// it also handles dequeuing the next anim...
11218			o.complete.call( animated[ 0 ] );
11219		} );
11220	} );
11221};
11222
11223$.fn.extend( {
11224	addClass: ( function( orig ) {
11225		return function( classNames, speed, easing, callback ) {
11226			return speed ?
11227				$.effects.animateClass.call( this,
11228					{ add: classNames }, speed, easing, callback ) :
11229				orig.apply( this, arguments );
11230		};
11231	} )( $.fn.addClass ),
11232
11233	removeClass: ( function( orig ) {
11234		return function( classNames, speed, easing, callback ) {
11235			return arguments.length > 1 ?
11236				$.effects.animateClass.call( this,
11237					{ remove: classNames }, speed, easing, callback ) :
11238				orig.apply( this, arguments );
11239		};
11240	} )( $.fn.removeClass ),
11241
11242	toggleClass: ( function( orig ) {
11243		return function( classNames, force, speed, easing, callback ) {
11244			if ( typeof force === "boolean" || force === undefined ) {
11245				if ( !speed ) {
11246
11247					// Without speed parameter
11248					return orig.apply( this, arguments );
11249				} else {
11250					return $.effects.animateClass.call( this,
11251						( force ? { add: classNames } : { remove: classNames } ),
11252						speed, easing, callback );
11253				}
11254			} else {
11255
11256				// Without force parameter
11257				return $.effects.animateClass.call( this,
11258					{ toggle: classNames }, force, speed, easing );
11259			}
11260		};
11261	} )( $.fn.toggleClass ),
11262
11263	switchClass: function( remove, add, speed, easing, callback ) {
11264		return $.effects.animateClass.call( this, {
11265			add: add,
11266			remove: remove
11267		}, speed, easing, callback );
11268	}
11269} );
11270
11271} )();
11272
11273/******************************************************************************/
11274/*********************************** EFFECTS **********************************/
11275/******************************************************************************/
11276
11277( function() {
11278
11279if ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) {
11280	$.expr.pseudos.animated = ( function( orig ) {
11281		return function( elem ) {
11282			return !!$( elem ).data( dataSpaceAnimated ) || orig( elem );
11283		};
11284	} )( $.expr.pseudos.animated );
11285}
11286
11287if ( $.uiBackCompat !== false ) {
11288	$.extend( $.effects, {
11289
11290		// Saves a set of properties in a data storage
11291		save: function( element, set ) {
11292			var i = 0, length = set.length;
11293			for ( ; i < length; i++ ) {
11294				if ( set[ i ] !== null ) {
11295					element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
11296				}
11297			}
11298		},
11299
11300		// Restores a set of previously saved properties from a data storage
11301		restore: function( element, set ) {
11302			var val, i = 0, length = set.length;
11303			for ( ; i < length; i++ ) {
11304				if ( set[ i ] !== null ) {
11305					val = element.data( dataSpace + set[ i ] );
11306					element.css( set[ i ], val );
11307				}
11308			}
11309		},
11310
11311		setMode: function( el, mode ) {
11312			if ( mode === "toggle" ) {
11313				mode = el.is( ":hidden" ) ? "show" : "hide";
11314			}
11315			return mode;
11316		},
11317
11318		// Wraps the element around a wrapper that copies position properties
11319		createWrapper: function( element ) {
11320
11321			// If the element is already wrapped, return it
11322			if ( element.parent().is( ".ui-effects-wrapper" ) ) {
11323				return element.parent();
11324			}
11325
11326			// Wrap the element
11327			var props = {
11328					width: element.outerWidth( true ),
11329					height: element.outerHeight( true ),
11330					"float": element.css( "float" )
11331				},
11332				wrapper = $( "<div></div>" )
11333					.addClass( "ui-effects-wrapper" )
11334					.css( {
11335						fontSize: "100%",
11336						background: "transparent",
11337						border: "none",
11338						margin: 0,
11339						padding: 0
11340					} ),
11341
11342				// Store the size in case width/height are defined in % - Fixes #5245
11343				size = {
11344					width: element.width(),
11345					height: element.height()
11346				},
11347				active = document.activeElement;
11348
11349			// Support: Firefox
11350			// Firefox incorrectly exposes anonymous content
11351			// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
11352			try {
11353				// eslint-disable-next-line no-unused-expressions
11354				active.id;
11355			} catch ( e ) {
11356				active = document.body;
11357			}
11358
11359			element.wrap( wrapper );
11360
11361			// Fixes #7595 - Elements lose focus when wrapped.
11362			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
11363				$( active ).trigger( "focus" );
11364			}
11365
11366			// Hotfix for jQuery 1.4 since some change in wrap() seems to actually
11367			// lose the reference to the wrapped element
11368			wrapper = element.parent();
11369
11370			// Transfer positioning properties to the wrapper
11371			if ( element.css( "position" ) === "static" ) {
11372				wrapper.css( { position: "relative" } );
11373				element.css( { position: "relative" } );
11374			} else {
11375				$.extend( props, {
11376					position: element.css( "position" ),
11377					zIndex: element.css( "z-index" )
11378				} );
11379				$.each( [ "top", "left", "bottom", "right" ], function( i, pos ) {
11380					props[ pos ] = element.css( pos );
11381					if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
11382						props[ pos ] = "auto";
11383					}
11384				} );
11385				element.css( {
11386					position: "relative",
11387					top: 0,
11388					left: 0,
11389					right: "auto",
11390					bottom: "auto"
11391				} );
11392			}
11393			element.css( size );
11394
11395			return wrapper.css( props ).show();
11396		},
11397
11398		removeWrapper: function( element ) {
11399			var active = document.activeElement;
11400
11401			if ( element.parent().is( ".ui-effects-wrapper" ) ) {
11402				element.parent().replaceWith( element );
11403
11404				// Fixes #7595 - Elements lose focus when wrapped.
11405				if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
11406					$( active ).trigger( "focus" );
11407				}
11408			}
11409
11410			return element;
11411		}
11412	} );
11413}
11414
11415$.extend( $.effects, {
11416	version: "1.13.
vendor: 2,055 bytes, lines 11416-11511
114161",
11417
11418	define: function( name, mode, effect ) {
11419		if ( !effect ) {
11420			effect = mode;
11421			mode = "effect";
11422		}
11423
11424		$.effects.effect[ name ] = effect;
11425		$.effects.effect[ name ].mode = mode;
11426
11427		return effect;
11428	},
11429
11430	scaledDimensions: function( element, percent, direction ) {
11431		if ( percent === 0 ) {
11432			return {
11433				height: 0,
11434				width: 0,
11435				outerHeight: 0,
11436				outerWidth: 0
11437			};
11438		}
11439
11440		var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1,
11441			y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1;
11442
11443		return {
11444			height: element.height() * y,
11445			width: element.width() * x,
11446			outerHeight: element.outerHeight() * y,
11447			outerWidth: element.outerWidth() * x
11448		};
11449
11450	},
11451
11452	clipToBox: function( animation ) {
11453		return {
11454			width: animation.clip.right - animation.clip.left,
11455			height: animation.clip.bottom - animation.clip.top,
11456			left: animation.clip.left,
11457			top: animation.clip.top
11458		};
11459	},
11460
11461	// Injects recently queued functions to be first in line (after "inprogress")
11462	unshift: function( element, queueLength, count ) {
11463		var queue = element.queue();
11464
11465		if ( queueLength > 1 ) {
11466			queue.splice.apply( queue,
11467				[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );
11468		}
11469		element.dequeue();
11470	},
11471
11472	saveStyle: function( element ) {
11473		element.data( dataSpaceStyle, element[ 0 ].style.cssText );
11474	},
11475
11476	restoreStyle: function( element ) {
11477		element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || "";
11478		element.removeData( dataSpaceStyle );
11479	},
11480
11481	mode: function( element, mode ) {
11482		var hidden = element.is( ":hidden" );
11483
11484		if ( mode === "toggle" ) {
11485			mode = hidden ? "show" : "hide";
11486		}
11487		if ( hidden ? mode === "hide" : mode === "show" ) {
11488			mode = "none";
11489		}
11490		return mode;
11491	},
11492
11493	// Translates a [top,left] array into a baseline value
11494	getBaseline: function( origin, original ) {
11495		var y, x;
11496
11497		switch ( origin[ 0 ] ) {
11498		case "top":
11499			y = 0;
11500			break;
11501		case "middle":
11502			y = 0.5;
11503			break;
11504		case "bottom":
11505			y = 1;
11506			break;
11507		default:
11508			y = origin[ 0 ] / original.height;
11509		}
11510
11511		switch ( origin[ 1 ] ) {
11512		case "left":
11513			x = 0;
11514			break;
11515		case "center":
11516			x = 0.5;
11517			break;
11518		case "right":
11519			x = 1;
11520			break;
11521		default:
11522			x = origin[ 1 ] / original.width;
11523		}
11524
11525		return {
11526			x: x,
11527			y: y
11528		};
11529	},
11530
11531	// Creates a placeholder element so that the original element can be made absolute
11532	createPlaceholder: function( element ) {
11533		var placeholder,
11534			cssPosition = element.css( "position" ),
11535			position = element.position();
11536
11537		// Lock in margins first to account for form elements, which
11538		// will change margin if you explicitly set height
11539		// see: http
vendor: 10,558 bytes, lines 11539-11933
11539://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380
11540		// Support: Safari
11541		element.css( {
11542			marginTop: element.css( "marginTop" ),
11543			marginBottom: element.css( "marginBottom" ),
11544			marginLeft: element.css( "marginLeft" ),
11545			marginRight: element.css( "marginRight" )
11546		} )
11547		.outerWidth( element.outerWidth() )
11548		.outerHeight( element.outerHeight() );
11549
11550		if ( /^(static|relative)/.test( cssPosition ) ) {
11551			cssPosition = "absolute";
11552
11553			placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( {
11554
11555				// Convert inline to inline block to account for inline elements
11556				// that turn to inline block based on content (like img)
11557				display: /^(inline|ruby)/.test( element.css( "display" ) ) ?
11558					"inline-block" :
11559					"block",
11560				visibility: "hidden",
11561
11562				// Margins need to be set to account for margin collapse
11563				marginTop: element.css( "marginTop" ),
11564				marginBottom: element.css( "marginBottom" ),
11565				marginLeft: element.css( "marginLeft" ),
11566				marginRight: element.css( "marginRight" ),
11567				"float": element.css( "float" )
11568			} )
11569			.outerWidth( element.outerWidth() )
11570			.outerHeight( element.outerHeight() )
11571			.addClass( "ui-effects-placeholder" );
11572
11573			element.data( dataSpace + "placeholder", placeholder );
11574		}
11575
11576		element.css( {
11577			position: cssPosition,
11578			left: position.left,
11579			top: position.top
11580		} );
11581
11582		return placeholder;
11583	},
11584
11585	removePlaceholder: function( element ) {
11586		var dataKey = dataSpace + "placeholder",
11587				placeholder = element.data( dataKey );
11588
11589		if ( placeholder ) {
11590			placeholder.remove();
11591			element.removeData( dataKey );
11592		}
11593	},
11594
11595	// Removes a placeholder if it exists and restores
11596	// properties that were modified during placeholder creation
11597	cleanUp: function( element ) {
11598		$.effects.restoreStyle( element );
11599		$.effects.removePlaceholder( element );
11600	},
11601
11602	setTransition: function( element, list, factor, value ) {
11603		value = value || {};
11604		$.each( list, function( i, x ) {
11605			var unit = element.cssUnit( x );
11606			if ( unit[ 0 ] > 0 ) {
11607				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
11608			}
11609		} );
11610		return value;
11611	}
11612} );
11613
11614// Return an effect options object for the given parameters:
11615function _normalizeArguments( effect, options, speed, callback ) {
11616
11617	// Allow passing all options as the first parameter
11618	if ( $.isPlainObject( effect ) ) {
11619		options = effect;
11620		effect = effect.effect;
11621	}
11622
11623	// Convert to an object
11624	effect = { effect: effect };
11625
11626	// Catch (effect, null, ...)
11627	if ( options == null ) {
11628		options = {};
11629	}
11630
11631	// Catch (effect, callback)
11632	if ( typeof options === "function" ) {
11633		callback = options;
11634		speed = null;
11635		options = {};
11636	}
11637
11638	// Catch (effect, speed, ?)
11639	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
11640		callback = speed;
11641		speed = options;
11642		options = {};
11643	}
11644
11645	// Catch (effect, options, callback)
11646	if ( typeof speed === "function" ) {
11647		callback = speed;
11648		speed = null;
11649	}
11650
11651	// Add options to effect
11652	if ( options ) {
11653		$.extend( effect, options );
11654	}
11655
11656	speed = speed || options.duration;
11657	effect.duration = $.fx.off ? 0 :
11658		typeof speed === "number" ? speed :
11659		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
11660		$.fx.speeds._default;
11661
11662	effect.complete = callback || options.complete;
11663
11664	return effect;
11665}
11666
11667function standardAnimationOption( option ) {
11668
11669	// Valid standard speeds (nothing, number, named speed)
11670	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
11671		return true;
11672	}
11673
11674	// Invalid strings - treat as "normal" speed
11675	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
11676		return true;
11677	}
11678
11679	// Complete callback
11680	if ( typeof option === "function" ) {
11681		return true;
11682	}
11683
11684	// Options hash (but not naming an effect)
11685	if ( typeof option === "object" && !option.effect ) {
11686		return true;
11687	}
11688
11689	// Didn't match any standard API
11690	return false;
11691}
11692
11693$.fn.extend( {
11694	effect: function( /* effect, options, speed, callback */ ) {
11695		var args = _normalizeArguments.apply( this, arguments ),
11696			effectMethod = $.effects.effect[ args.effect ],
11697			defaultMode = effectMethod.mode,
11698			queue = args.queue,
11699			queueName = queue || "fx",
11700			complete = args.complete,
11701			mode = args.mode,
11702			modes = [],
11703			prefilter = function( next ) {
11704				var el = $( this ),
11705					normalizedMode = $.effects.mode( el, mode ) || defaultMode;
11706
11707				// Sentinel for duck-punching the :animated pseudo-selector
11708				el.data( dataSpaceAnimated, true );
11709
11710				// Save effect mode for later use,
11711				// we can't just call $.effects.mode again later,
11712				// as the .show() below destroys the initial state
11713				modes.push( normalizedMode );
11714
11715				// See $.uiBackCompat inside of run() for removal of defaultMode in 1.14
11716				if ( defaultMode && ( normalizedMode === "show" ||
11717						( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) {
11718					el.show();
11719				}
11720
11721				if ( !defaultMode || normalizedMode !== "none" ) {
11722					$.effects.saveStyle( el );
11723				}
11724
11725				if ( typeof next === "function" ) {
11726					next();
11727				}
11728			};
11729
11730		if ( $.fx.off || !effectMethod ) {
11731
11732			// Delegate to the original method (e.g., .show()) if possible
11733			if ( mode ) {
11734				return this[ mode ]( args.duration, complete );
11735			} else {
11736				return this.each( function() {
11737					if ( complete ) {
11738						complete.call( this );
11739					}
11740				} );
11741			}
11742		}
11743
11744		function run( next ) {
11745			var elem = $( this );
11746
11747			function cleanup() {
11748				elem.removeData( dataSpaceAnimated );
11749
11750				$.effects.cleanUp( elem );
11751
11752				if ( args.mode === "hide" ) {
11753					elem.hide();
11754				}
11755
11756				done();
11757			}
11758
11759			function done() {
11760				if ( typeof complete === "function" ) {
11761					complete.call( elem[ 0 ] );
11762				}
11763
11764				if ( typeof next === "function" ) {
11765					next();
11766				}
11767			}
11768
11769			// Override mode option on a per element basis,
11770			// as toggle can be either show or hide depending on element state
11771			args.mode = modes.shift();
11772
11773			if ( $.uiBackCompat !== false && !defaultMode ) {
11774				if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
11775
11776					// Call the core method to track "olddisplay" properly
11777					elem[ mode ]();
11778					done();
11779				} else {
11780					effectMethod.call( elem[ 0 ], args, done );
11781				}
11782			} else {
11783				if ( args.mode === "none" ) {
11784
11785					// Call the core method to track "olddisplay" properly
11786					elem[ mode ]();
11787					done();
11788				} else {
11789					effectMethod.call( elem[ 0 ], args, cleanup );
11790				}
11791			}
11792		}
11793
11794		// Run prefilter on all elements first to ensure that
11795		// any showing or hiding happens before placeholder creation,
11796		// which ensures that any layout changes are correctly captured.
11797		return queue === false ?
11798			this.each( prefilter ).each( run ) :
11799			this.queue( queueName, prefilter ).queue( queueName, run );
11800	},
11801
11802	show: ( function( orig ) {
11803		return function( option ) {
11804			if ( standardAnimationOption( option ) ) {
11805				return orig.apply( this, arguments );
11806			} else {
11807				var args = _normalizeArguments.apply( this, arguments );
11808				args.mode = "show";
11809				return this.effect.call( this, args );
11810			}
11811		};
11812	} )( $.fn.show ),
11813
11814	hide: ( function( orig ) {
11815		return function( option ) {
11816			if ( standardAnimationOption( option ) ) {
11817				return orig.apply( this, arguments );
11818			} else {
11819				var args = _normalizeArguments.apply( this, arguments );
11820				args.mode = "hide";
11821				return this.effect.call( this, args );
11822			}
11823		};
11824	} )( $.fn.hide ),
11825
11826	toggle: ( function( orig ) {
11827		return function( option ) {
11828			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
11829				return orig.apply( this, arguments );
11830			} else {
11831				var args = _normalizeArguments.apply( this, arguments );
11832				args.mode = "toggle";
11833				return this.effect.call( this, args );
11834			}
11835		};
11836	} )( $.fn.toggle ),
11837
11838	cssUnit: function( key ) {
11839		var style = this.css( key ),
11840			val = [];
11841
11842		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
11843			if ( style.indexOf( unit ) > 0 ) {
11844				val = [ parseFloat( style ), unit ];
11845			}
11846		} );
11847		return val;
11848	},
11849
11850	cssClip: function( clipObj ) {
11851		if ( clipObj ) {
11852			return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " +
11853				clipObj.bottom + "px " + clipObj.left + "px)" );
11854		}
11855		return parseClip( this.css( "clip" ), this );
11856	},
11857
11858	transfer: function( options, done ) {
11859		var element = $( this ),
11860			target = $( options.to ),
11861			targetFixed = target.css( "position" ) === "fixed",
11862			body = $( "body" ),
11863			fixTop = targetFixed ? body.scrollTop() : 0,
11864			fixLeft = targetFixed ? body.scrollLeft() : 0,
11865			endPosition = target.offset(),
11866			animation = {
11867				top: endPosition.top - fixTop,
11868				left: endPosition.left - fixLeft,
11869				height: target.innerHeight(),
11870				width: target.innerWidth()
11871			},
11872			startPosition = element.offset(),
11873			transfer = $( "<div class='ui-effects-transfer'></div>" );
11874
11875		transfer
11876			.appendTo( "body" )
11877			.addClass( options.className )
11878			.css( {
11879				top: startPosition.top - fixTop,
11880				left: startPosition.left - fixLeft,
11881				height: element.innerHeight(),
11882				width: element.innerWidth(),
11883				position: targetFixed ? "fixed" : "absolute"
11884			} )
11885			.animate( animation, options.duration, options.easing, function() {
11886				transfer.remove();
11887				if ( typeof done === "function" ) {
11888					done();
11889				}
11890			} );
11891	}
11892} );
11893
11894function parseClip( str, element ) {
11895		var outerWidth = element.outerWidth(),
11896			outerHeight = element.outerHeight(),
11897			clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,
11898			values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ];
11899
11900		return {
11901			top: parseFloat( values[ 1 ] ) || 0,
11902			right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ),
11903			bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ),
11904			left: parseFloat( values[ 4 ] ) || 0
11905		};
11906}
11907
11908$.fx.step.clip = function( fx ) {
11909	if ( !fx.clipInit ) {
11910		fx.start = $( fx.elem ).cssClip();
11911		if ( typeof fx.end === "string" ) {
11912			fx.end = parseClip( fx.end, fx.elem );
11913		}
11914		fx.clipInit = true;
11915	}
11916
11917	$( fx.elem ).cssClip( {
11918		top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,
11919		right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,
11920		bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,
11921		left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left
11922	} );
11923};
11924
11925} )();
11926
11927/******************************************************************************/
11928/*********************************** EASING ***********************************/
11929/******************************************************************************/
11930
11931( function() {
11932
11933// Based on easing equations from Robert Penner (http://
vendor: 24,998 bytes, lines 11933-12888
11933www.robertpenner.com/easing)
11934
11935var baseEasings = {};
11936
11937$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
11938	baseEasings[ name ] = function( p ) {
11939		return Math.pow( p, i + 2 );
11940	};
11941} );
11942
11943$.extend( baseEasings, {
11944	Sine: function( p ) {
11945		return 1 - Math.cos( p * Math.PI / 2 );
11946	},
11947	Circ: function( p ) {
11948		return 1 - Math.sqrt( 1 - p * p );
11949	},
11950	Elastic: function( p ) {
11951		return p === 0 || p === 1 ? p :
11952			-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );
11953	},
11954	Back: function( p ) {
11955		return p * p * ( 3 * p - 2 );
11956	},
11957	Bounce: function( p ) {
11958		var pow2,
11959			bounce = 4;
11960
11961		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
11962		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
11963	}
11964} );
11965
11966$.each( baseEasings, function( name, easeIn ) {
11967	$.easing[ "easeIn" + name ] = easeIn;
11968	$.easing[ "easeOut" + name ] = function( p ) {
11969		return 1 - easeIn( 1 - p );
11970	};
11971	$.easing[ "easeInOut" + name ] = function( p ) {
11972		return p < 0.5 ?
11973			easeIn( p * 2 ) / 2 :
11974			1 - easeIn( p * -2 + 2 ) / 2;
11975	};
11976} );
11977
11978} )();
11979
11980var effect = $.effects;
11981
11982
11983/*!
11984 * jQuery UI Effects Blind 1.13.1
11985 * http://jqueryui.com
11986 *
11987 * Copyright jQuery Foundation and other contributors
11988 * Released under the MIT license.
11989 * http://jquery.org/license
11990 */
11991
11992//>>label: Blind Effect
11993//>>group: Effects
11994//>>description: Blinds the element.
11995//>>docs: http://api.jqueryui.com/blind-effect/
11996//>>demos: http://jqueryui.com/effect/
11997
11998
11999var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) {
12000	var map = {
12001			up: [ "bottom", "top" ],
12002			vertical: [ "bottom", "top" ],
12003			down: [ "top", "bottom" ],
12004			left: [ "right", "left" ],
12005			horizontal: [ "right", "left" ],
12006			right: [ "left", "right" ]
12007		},
12008		element = $( this ),
12009		direction = options.direction || "up",
12010		start = element.cssClip(),
12011		animate = { clip: $.extend( {}, start ) },
12012		placeholder = $.effects.createPlaceholder( element );
12013
12014	animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];
12015
12016	if ( options.mode === "show" ) {
12017		element.cssClip( animate.clip );
12018		if ( placeholder ) {
12019			placeholder.css( $.effects.clipToBox( animate ) );
12020		}
12021
12022		animate.clip = start;
12023	}
12024
12025	if ( placeholder ) {
12026		placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );
12027	}
12028
12029	element.animate( animate, {
12030		queue: false,
12031		duration: options.duration,
12032		easing: options.easing,
12033		complete: done
12034	} );
12035} );
12036
12037
12038/*!
12039 * jQuery UI Effects Bounce 1.13.1
12040 * http://jqueryui.com
12041 *
12042 * Copyright jQuery Foundation and other contributors
12043 * Released under the MIT license.
12044 * http://jquery.org/license
12045 */
12046
12047//>>label: Bounce Effect
12048//>>group: Effects
12049//>>description: Bounces an element horizontally or vertically n times.
12050//>>docs: http://api.jqueryui.com/bounce-effect/
12051//>>demos: http://jqueryui.com/effect/
12052
12053
12054var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) {
12055	var upAnim, downAnim, refValue,
12056		element = $( this ),
12057
12058		// Defaults:
12059		mode = options.mode,
12060		hide = mode === "hide",
12061		show = mode === "show",
12062		direction = options.direction || "up",
12063		distance = options.distance,
12064		times = options.times || 5,
12065
12066		// Number of internal animations
12067		anims = times * 2 + ( show || hide ? 1 : 0 ),
12068		speed = options.duration / anims,
12069		easing = options.easing,
12070
12071		// Utility:
12072		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
12073		motion = ( direction === "up" || direction === "left" ),
12074		i = 0,
12075
12076		queuelen = element.queue().length;
12077
12078	$.effects.createPlaceholder( element );
12079
12080	refValue = element.css( ref );
12081
12082	// Default distance for the BIGGEST bounce is the outer Distance / 3
12083	if ( !distance ) {
12084		distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
12085	}
12086
12087	if ( show ) {
12088		downAnim = { opacity: 1 };
12089		downAnim[ ref ] = refValue;
12090
12091		// If we are showing, force opacity 0 and set the initial position
12092		// then do the "first" animation
12093		element
12094			.css( "opacity", 0 )
12095			.css( ref, motion ? -distance * 2 : distance * 2 )
12096			.animate( downAnim, speed, easing );
12097	}
12098
12099	// Start at the smallest distance if we are hiding
12100	if ( hide ) {
12101		distance = distance / Math.pow( 2, times - 1 );
12102	}
12103
12104	downAnim = {};
12105	downAnim[ ref ] = refValue;
12106
12107	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
12108	for ( ; i < times; i++ ) {
12109		upAnim = {};
12110		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
12111
12112		element
12113			.animate( upAnim, speed, easing )
12114			.animate( downAnim, speed, easing );
12115
12116		distance = hide ? distance * 2 : distance / 2;
12117	}
12118
12119	// Last Bounce when Hiding
12120	if ( hide ) {
12121		upAnim = { opacity: 0 };
12122		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
12123
12124		element.animate( upAnim, speed, easing );
12125	}
12126
12127	element.queue( done );
12128
12129	$.effects.unshift( element, queuelen, anims + 1 );
12130} );
12131
12132
12133/*!
12134 * jQuery UI Effects Clip 1.13.1
12135 * http://jqueryui.com
12136 *
12137 * Copyright jQuery Foundation and other contributors
12138 * Released under the MIT license.
12139 * http://jquery.org/license
12140 */
12141
12142//>>label: Clip Effect
12143//>>group: Effects
12144//>>description: Clips the element on and off like an old TV.
12145//>>docs: http://api.jqueryui.com/clip-effect/
12146//>>demos: http://jqueryui.com/effect/
12147
12148
12149var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) {
12150	var start,
12151		animate = {},
12152		element = $( this ),
12153		direction = options.direction || "vertical",
12154		both = direction === "both",
12155		horizontal = both || direction === "horizontal",
12156		vertical = both || direction === "vertical";
12157
12158	start = element.cssClip();
12159	animate.clip = {
12160		top: vertical ? ( start.bottom - start.top ) / 2 : start.top,
12161		right: horizontal ? ( start.right - start.left ) / 2 : start.right,
12162		bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,
12163		left: horizontal ? ( start.right - start.left ) / 2 : start.left
12164	};
12165
12166	$.effects.createPlaceholder( element );
12167
12168	if ( options.mode === "show" ) {
12169		element.cssClip( animate.clip );
12170		animate.clip = start;
12171	}
12172
12173	element.animate( animate, {
12174		queue: false,
12175		duration: options.duration,
12176		easing: options.easing,
12177		complete: done
12178	} );
12179
12180} );
12181
12182
12183/*!
12184 * jQuery UI Effects Drop 1.13.1
12185 * http://jqueryui.com
12186 *
12187 * Copyright jQuery Foundation and other contributors
12188 * Released under the MIT license.
12189 * http://jquery.org/license
12190 */
12191
12192//>>label: Drop Effect
12193//>>group: Effects
12194//>>description: Moves an element in one direction and hides it at the same time.
12195//>>docs: http://api.jqueryui.com/drop-effect/
12196//>>demos: http://jqueryui.com/effect/
12197
12198
12199var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) {
12200
12201	var distance,
12202		element = $( this ),
12203		mode = options.mode,
12204		show = mode === "show",
12205		direction = options.direction || "left",
12206		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
12207		motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=",
12208		oppositeMotion = ( motion === "+=" ) ? "-=" : "+=",
12209		animation = {
12210			opacity: 0
12211		};
12212
12213	$.effects.createPlaceholder( element );
12214
12215	distance = options.distance ||
12216		element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
12217
12218	animation[ ref ] = motion + distance;
12219
12220	if ( show ) {
12221		element.css( animation );
12222
12223		animation[ ref ] = oppositeMotion + distance;
12224		animation.opacity = 1;
12225	}
12226
12227	// Animate
12228	element.animate( animation, {
12229		queue: false,
12230		duration: options.duration,
12231		easing: options.easing,
12232		complete: done
12233	} );
12234} );
12235
12236
12237/*!
12238 * jQuery UI Effects Explode 1.13.1
12239 * http://jqueryui.com
12240 *
12241 * Copyright jQuery Foundation and other contributors
12242 * Released under the MIT license.
12243 * http://jquery.org/license
12244 */
12245
12246//>>label: Explode Effect
12247//>>group: Effects
12248/* eslint-disable max-len */
12249//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.
12250/* eslint-enable max-len */
12251//>>docs: http://api.jqueryui.com/explode-effect/
12252//>>demos: http://jqueryui.com/effect/
12253
12254
12255var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) {
12256
12257	var i, j, left, top, mx, my,
12258		rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,
12259		cells = rows,
12260		element = $( this ),
12261		mode = options.mode,
12262		show = mode === "show",
12263
12264		// Show and then visibility:hidden the element before calculating offset
12265		offset = element.show().css( "visibility", "hidden" ).offset(),
12266
12267		// Width and height of a piece
12268		width = Math.ceil( element.outerWidth() / cells ),
12269		height = Math.ceil( element.outerHeight() / rows ),
12270		pieces = [];
12271
12272	// Children animate complete:
12273	function childComplete() {
12274		pieces.push( this );
12275		if ( pieces.length === rows * cells ) {
12276			animComplete();
12277		}
12278	}
12279
12280	// Clone the element for each row and cell.
12281	for ( i = 0; i < rows; i++ ) { // ===>
12282		top = offset.top + i * height;
12283		my = i - ( rows - 1 ) / 2;
12284
12285		for ( j = 0; j < cells; j++ ) { // |||
12286			left = offset.left + j * width;
12287			mx = j - ( cells - 1 ) / 2;
12288
12289			// Create a clone of the now hidden main element that will be absolute positioned
12290			// within a wrapper div off the -left and -top equal to size of our pieces
12291			element
12292				.clone()
12293				.appendTo( "body" )
12294				.wrap( "<div></div>" )
12295				.css( {
12296					position: "absolute",
12297					visibility: "visible",
12298					left: -j * width,
12299					top: -i * height
12300				} )
12301
12302				// Select the wrapper - make it overflow: hidden and absolute positioned based on
12303				// where the original was located +left and +top equal to the size of pieces
12304				.parent()
12305					.addClass( "ui-effects-explode" )
12306					.css( {
12307						position: "absolute",
12308						overflow: "hidden",
12309						width: width,
12310						height: height,
12311						left: left + ( show ? mx * width : 0 ),
12312						top: top + ( show ? my * height : 0 ),
12313						opacity: show ? 0 : 1
12314					} )
12315					.animate( {
12316						left: left + ( show ? 0 : mx * width ),
12317						top: top + ( show ? 0 : my * height ),
12318						opacity: show ? 1 : 0
12319					}, options.duration || 500, options.easing, childComplete );
12320		}
12321	}
12322
12323	function animComplete() {
12324		element.css( {
12325			visibility: "visible"
12326		} );
12327		$( pieces ).remove();
12328		done();
12329	}
12330} );
12331
12332
12333/*!
12334 * jQuery UI Effects Fade 1.13.1
12335 * http://jqueryui.com
12336 *
12337 * Copyright jQuery Foundation and other contributors
12338 * Released under the MIT license.
12339 * http://jquery.org/license
12340 */
12341
12342//>>label: Fade Effect
12343//>>group: Effects
12344//>>description: Fades the element.
12345//>>docs: http://api.jqueryui.com/fade-effect/
12346//>>demos: http://jqueryui.com/effect/
12347
12348
12349var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) {
12350	var show = options.mode === "show";
12351
12352	$( this )
12353		.css( "opacity", show ? 0 : 1 )
12354		.animate( {
12355			opacity: show ? 1 : 0
12356		}, {
12357			queue: false,
12358			duration: options.duration,
12359			easing: options.easing,
12360			complete: done
12361		} );
12362} );
12363
12364
12365/*!
12366 * jQuery UI Effects Fold 1.13.1
12367 * http://jqueryui.com
12368 *
12369 * Copyright jQuery Foundation and other contributors
12370 * Released under the MIT license.
12371 * http://jquery.org/license
12372 */
12373
12374//>>label: Fold Effect
12375//>>group: Effects
12376//>>description: Folds an element first horizontally and then vertically.
12377//>>docs: http://api.jqueryui.com/fold-effect/
12378//>>demos: http://jqueryui.com/effect/
12379
12380
12381var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) {
12382
12383	// Create element
12384	var element = $( this ),
12385		mode = options.mode,
12386		show = mode === "show",
12387		hide = mode === "hide",
12388		size = options.size || 15,
12389		percent = /([0-9]+)%/.exec( size ),
12390		horizFirst = !!options.horizFirst,
12391		ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ],
12392		duration = options.duration / 2,
12393
12394		placeholder = $.effects.createPlaceholder( element ),
12395
12396		start = element.cssClip(),
12397		animation1 = { clip: $.extend( {}, start ) },
12398		animation2 = { clip: $.extend( {}, start ) },
12399
12400		distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],
12401
12402		queuelen = element.queue().length;
12403
12404	if ( percent ) {
12405		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
12406	}
12407	animation1.clip[ ref[ 0 ] ] = size;
12408	animation2.clip[ ref[ 0 ] ] = size;
12409	animation2.clip[ ref[ 1 ] ] = 0;
12410
12411	if ( show ) {
12412		element.cssClip( animation2.clip );
12413		if ( placeholder ) {
12414			placeholder.css( $.effects.clipToBox( animation2 ) );
12415		}
12416
12417		animation2.clip = start;
12418	}
12419
12420	// Animate
12421	element
12422		.queue( function( next ) {
12423			if ( placeholder ) {
12424				placeholder
12425					.animate( $.effects.clipToBox( animation1 ), duration, options.easing )
12426					.animate( $.effects.clipToBox( animation2 ), duration, options.easing );
12427			}
12428
12429			next();
12430		} )
12431		.animate( animation1, duration, options.easing )
12432		.animate( animation2, duration, options.easing )
12433		.queue( done );
12434
12435	$.effects.unshift( element, queuelen, 4 );
12436} );
12437
12438
12439/*!
12440 * jQuery UI Effects Highlight 1.13.1
12441 * http://jqueryui.com
12442 *
12443 * Copyright jQuery Foundation and other contributors
12444 * Released under the MIT license.
12445 * http://jquery.org/license
12446 */
12447
12448//>>label: Highlight Effect
12449//>>group: Effects
12450//>>description: Highlights the background of an element in a defined color for a custom duration.
12451//>>docs: http://api.jqueryui.com/highlight-effect/
12452//>>demos: http://jqueryui.com/effect/
12453
12454
12455var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) {
12456	var element = $( this ),
12457		animation = {
12458			backgroundColor: element.css( "backgroundColor" )
12459		};
12460
12461	if ( options.mode === "hide" ) {
12462		animation.opacity = 0;
12463	}
12464
12465	$.effects.saveStyle( element );
12466
12467	element
12468		.css( {
12469			backgroundImage: "none",
12470			backgroundColor: options.color || "#ffff99"
12471		} )
12472		.animate( animation, {
12473			queue: false,
12474			duration: options.duration,
12475			easing: options.easing,
12476			complete: done
12477		} );
12478} );
12479
12480
12481/*!
12482 * jQuery UI Effects Size 1.13.1
12483 * http://jqueryui.com
12484 *
12485 * Copyright jQuery Foundation and other contributors
12486 * Released under the MIT license.
12487 * http://jquery.org/license
12488 */
12489
12490//>>label: Size Effect
12491//>>group: Effects
12492//>>description: Resize an element to a specified width and height.
12493//>>docs: http://api.jqueryui.com/size-effect/
12494//>>demos: http://jqueryui.com/effect/
12495
12496
12497var effectsEffectSize = $.effects.define( "size", function( options, done ) {
12498
12499	// Create element
12500	var baseline, factor, temp,
12501		element = $( this ),
12502
12503		// Copy for children
12504		cProps = [ "fontSize" ],
12505		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
12506		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
12507
12508		// Set options
12509		mode = options.mode,
12510		restore = mode !== "effect",
12511		scale = options.scale || "both",
12512		origin = options.origin || [ "middle", "center" ],
12513		position = element.css( "position" ),
12514		pos = element.position(),
12515		original = $.effects.scaledDimensions( element ),
12516		from = options.from || original,
12517		to = options.to || $.effects.scaledDimensions( element, 0 );
12518
12519	$.effects.createPlaceholder( element );
12520
12521	if ( mode === "show" ) {
12522		temp = from;
12523		from = to;
12524		to = temp;
12525	}
12526
12527	// Set scaling factor
12528	factor = {
12529		from: {
12530			y: from.height / original.height,
12531			x: from.width / original.width
12532		},
12533		to: {
12534			y: to.height / original.height,
12535			x: to.width / original.width
12536		}
12537	};
12538
12539	// Scale the css box
12540	if ( scale === "box" || scale === "both" ) {
12541
12542		// Vertical props scaling
12543		if ( factor.from.y !== factor.to.y ) {
12544			from = $.effects.setTransition( element, vProps, factor.from.y, from );
12545			to = $.effects.setTransition( element, vProps, factor.to.y, to );
12546		}
12547
12548		// Horizontal props scaling
12549		if ( factor.from.x !== factor.to.x ) {
12550			from = $.effects.setTransition( element, hProps, factor.from.x, from );
12551			to = $.effects.setTransition( element, hProps, factor.to.x, to );
12552		}
12553	}
12554
12555	// Scale the content
12556	if ( scale === "content" || scale === "both" ) {
12557
12558		// Vertical props scaling
12559		if ( factor.from.y !== factor.to.y ) {
12560			from = $.effects.setTransition( element, cProps, factor.from.y, from );
12561			to = $.effects.setTransition( element, cProps, factor.to.y, to );
12562		}
12563	}
12564
12565	// Adjust the position properties based on the provided origin points
12566	if ( origin ) {
12567		baseline = $.effects.getBaseline( origin, original );
12568		from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;
12569		from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;
12570		to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;
12571		to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;
12572	}
12573	delete from.outerHeight;
12574	delete from.outerWidth;
12575	element.css( from );
12576
12577	// Animate the children if desired
12578	if ( scale === "content" || scale === "both" ) {
12579
12580		vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps );
12581		hProps = hProps.concat( [ "marginLeft", "marginRight" ] );
12582
12583		// Only animate children with width attributes specified
12584		// TODO: is this right? should we include anything with css width specified as well
12585		element.find( "*[width]" ).each( function() {
12586			var child = $( this ),
12587				childOriginal = $.effects.scaledDimensions( child ),
12588				childFrom = {
12589					height: childOriginal.height * factor.from.y,
12590					width: childOriginal.width * factor.from.x,
12591					outerHeight: childOriginal.outerHeight * factor.from.y,
12592					outerWidth: childOriginal.outerWidth * factor.from.x
12593				},
12594				childTo = {
12595					height: childOriginal.height * factor.to.y,
12596					width: childOriginal.width * factor.to.x,
12597					outerHeight: childOriginal.height * factor.to.y,
12598					outerWidth: childOriginal.width * factor.to.x
12599				};
12600
12601			// Vertical props scaling
12602			if ( factor.from.y !== factor.to.y ) {
12603				childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );
12604				childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );
12605			}
12606
12607			// Horizontal props scaling
12608			if ( factor.from.x !== factor.to.x ) {
12609				childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );
12610				childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );
12611			}
12612
12613			if ( restore ) {
12614				$.effects.saveStyle( child );
12615			}
12616
12617			// Animate children
12618			child.css( childFrom );
12619			child.animate( childTo, options.duration, options.easing, function() {
12620
12621				// Restore children
12622				if ( restore ) {
12623					$.effects.restoreStyle( child );
12624				}
12625			} );
12626		} );
12627	}
12628
12629	// Animate
12630	element.animate( to, {
12631		queue: false,
12632		duration: options.duration,
12633		easing: options.easing,
12634		complete: function() {
12635
12636			var offset = element.offset();
12637
12638			if ( to.opacity === 0 ) {
12639				element.css( "opacity", from.opacity );
12640			}
12641
12642			if ( !restore ) {
12643				element
12644					.css( "position", position === "static" ? "relative" : position )
12645					.offset( offset );
12646
12647				// Need to save style here so that automatic style restoration
12648				// doesn't restore to the original styles from before the animation.
12649				$.effects.saveStyle( element );
12650			}
12651
12652			done();
12653		}
12654	} );
12655
12656} );
12657
12658
12659/*!
12660 * jQuery UI Effects Scale 1.13.1
12661 * http://jqueryui.com
12662 *
12663 * Copyright jQuery Foundation and other contributors
12664 * Released under the MIT license.
12665 * http://jquery.org/license
12666 */
12667
12668//>>label: Scale Effect
12669//>>group: Effects
12670//>>description: Grows or shrinks an element and its content.
12671//>>docs: http://api.jqueryui.com/scale-effect/
12672//>>demos: http://jqueryui.com/effect/
12673
12674
12675var effectsEffectScale = $.effects.define( "scale", function( options, done ) {
12676
12677	// Create element
12678	var el = $( this ),
12679		mode = options.mode,
12680		percent = parseInt( options.percent, 10 ) ||
12681			( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ),
12682
12683		newOptions = $.extend( true, {
12684			from: $.effects.scaledDimensions( el ),
12685			to: $.effects.scaledDimensions( el, percent, options.direction || "both" ),
12686			origin: options.origin || [ "middle", "center" ]
12687		}, options );
12688
12689	// Fade option to support puff
12690	if ( options.fade ) {
12691		newOptions.from.opacity = 1;
12692		newOptions.to.opacity = 0;
12693	}
12694
12695	$.effects.effect.size.call( this, newOptions, done );
12696} );
12697
12698
12699/*!
12700 * jQuery UI Effects Puff 1.13.1
12701 * http://jqueryui.com
12702 *
12703 * Copyright jQuery Foundation and other contributors
12704 * Released under the MIT license.
12705 * http://jquery.org/license
12706 */
12707
12708//>>label: Puff Effect
12709//>>group: Effects
12710//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.
12711//>>docs: http://api.jqueryui.com/puff-effect/
12712//>>demos: http://jqueryui.com/effect/
12713
12714
12715var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) {
12716	var newOptions = $.extend( true, {}, options, {
12717		fade: true,
12718		percent: parseInt( options.percent, 10 ) || 150
12719	} );
12720
12721	$.effects.effect.scale.call( this, newOptions, done );
12722} );
12723
12724
12725/*!
12726 * jQuery UI Effects Pulsate 1.13.1
12727 * http://jqueryui.com
12728 *
12729 * Copyright jQuery Foundation and other contributors
12730 * Released under the MIT license.
12731 * http://jquery.org/license
12732 */
12733
12734//>>label: Pulsate Effect
12735//>>group: Effects
12736//>>description: Pulsates an element n times by changing the opacity to zero and back.
12737//>>docs: http://api.jqueryui.com/pulsate-effect/
12738//>>demos: http://jqueryui.com/effect/
12739
12740
12741var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) {
12742	var element = $( this ),
12743		mode = options.mode,
12744		show = mode === "show",
12745		hide = mode === "hide",
12746		showhide = show || hide,
12747
12748		// Showing or hiding leaves off the "last" animation
12749		anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
12750		duration = options.duration / anims,
12751		animateTo = 0,
12752		i = 1,
12753		queuelen = element.queue().length;
12754
12755	if ( show || !element.is( ":visible" ) ) {
12756		element.css( "opacity", 0 ).show();
12757		animateTo = 1;
12758	}
12759
12760	// Anims - 1 opacity "toggles"
12761	for ( ; i < anims; i++ ) {
12762		element.animate( { opacity: animateTo }, duration, options.easing );
12763		animateTo = 1 - animateTo;
12764	}
12765
12766	element.animate( { opacity: animateTo }, duration, options.easing );
12767
12768	element.queue( done );
12769
12770	$.effects.unshift( element, queuelen, anims + 1 );
12771} );
12772
12773
12774/*!
12775 * jQuery UI Effects Shake 1.13.1
12776 * http://jqueryui.com
12777 *
12778 * Copyright jQuery Foundation and other contributors
12779 * Released under the MIT license.
12780 * http://jquery.org/license
12781 */
12782
12783//>>label: Shake Effect
12784//>>group: Effects
12785//>>description: Shakes an element horizontally or vertically n times.
12786//>>docs: http://api.jqueryui.com/shake-effect/
12787//>>demos: http://jqueryui.com/effect/
12788
12789
12790var effectsEffectShake = $.effects.define( "shake", function( options, done ) {
12791
12792	var i = 1,
12793		element = $( this ),
12794		direction = options.direction || "left",
12795		distance = options.distance || 20,
12796		times = options.times || 3,
12797		anims = times * 2 + 1,
12798		speed = Math.round( options.duration / anims ),
12799		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
12800		positiveMotion = ( direction === "up" || direction === "left" ),
12801		animation = {},
12802		animation1 = {},
12803		animation2 = {},
12804
12805		queuelen = element.queue().length;
12806
12807	$.effects.createPlaceholder( element );
12808
12809	// Animation
12810	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
12811	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
12812	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
12813
12814	// Animate
12815	element.animate( animation, speed, options.easing );
12816
12817	// Shakes
12818	for ( ; i < times; i++ ) {
12819		element
12820			.animate( animation1, speed, options.easing )
12821			.animate( animation2, speed, options.easing );
12822	}
12823
12824	element
12825		.animate( animation1, speed, options.easing )
12826		.animate( animation, speed / 2, options.easing )
12827		.queue( done );
12828
12829	$.effects.unshift( element, queuelen, anims + 1 );
12830} );
12831
12832
12833/*!
12834 * jQuery UI Effects Slide 1.13.1
12835 * http://jqueryui.com
12836 *
12837 * Copyright jQuery Foundation and other contributors
12838 * Released under the MIT license.
12839 * http://jquery.org/license
12840 */
12841
12842//>>label: Slide Effect
12843//>>group: Effects
12844//>>description: Slides an element in and out of the viewport.
12845//>>docs: http://api.jqueryui.com/slide-effect/
12846//>>demos: http://jqueryui.com/effect/
12847
12848
12849var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) {
12850	var startClip, startRef,
12851		element = $( this ),
12852		map = {
12853			up: [ "bottom", "top" ],
12854			down: [ "top", "bottom" ],
12855			left: [ "right", "left" ],
12856			right: [ "left", "right" ]
12857		},
12858		mode = options.mode,
12859		direction = options.direction || "left",
12860		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
12861		positiveMotion = ( direction === "up" || direction === "left" ),
12862		distance = options.distance ||
12863			element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ),
12864		animation = {};
12865
12866	$.effects.createPlaceholder( element );
12867
12868	startClip = element.cssClip();
12869	startRef = element.position()[ ref ];
12870
12871	// Define hide animation
12872	animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;
12873	animation.clip = element.cssClip();
12874	animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];
12875
12876	// Reverse the animation if we're showing
12877	if ( mode === "show" ) {
12878		element.cssClip( animation.clip );
12879		element.css( ref, animation[ ref ] );
12880		animation.clip = startClip;
12881		animation[ ref ] = startRef;
12882	}
12883
12884	// Actually animate
12885	element.animate( animation, {
12886		queue: false,
12887		duration: options.duration,
12888		easing: options.easing,
vendor: 10,271 bytes, lines 12889-13309
12889		complete: done
12890	} );
12891} );
12892
12893
12894/*!
12895 * jQuery UI Effects Transfer 1.13.1
12896 * http://jqueryui.com
12897 *
12898 * Copyright jQuery Foundation and other contributors
12899 * Released under the MIT license.
12900 * http://jquery.org/license
12901 */
12902
12903//>>label: Transfer Effect
12904//>>group: Effects
12905//>>description: Displays a transfer effect from one element to another.
12906//>>docs: http://api.jqueryui.com/transfer-effect/
12907//>>demos: http://jqueryui.com/effect/
12908
12909
12910var effect;
12911if ( $.uiBackCompat !== false ) {
12912	effect = $.effects.define( "transfer", function( options, done ) {
12913		$( this ).transfer( options, done );
12914	} );
12915}
12916var effectsEffectTransfer = effect;
12917
12918
12919/*!
12920 * jQuery UI Focusable 1.13.1
12921 * http://jqueryui.com
12922 *
12923 * Copyright jQuery Foundation and other contributors
12924 * Released under the MIT license.
12925 * http://jquery.org/license
12926 */
12927
12928//>>label: :focusable Selector
12929//>>group: Core
12930//>>description: Selects elements which can be focused.
12931//>>docs: http://api.jqueryui.com/focusable-selector/
12932
12933
12934// Selectors
12935$.ui.focusable = function( element, hasTabindex ) {
12936	var map, mapName, img, focusableIfVisible, fieldset,
12937		nodeName = element.nodeName.toLowerCase();
12938
12939	if ( "area" === nodeName ) {
12940		map = element.parentNode;
12941		mapName = map.name;
12942		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
12943			return false;
12944		}
12945		img = $( "img[usemap='#" + mapName + "']" );
12946		return img.length > 0 && img.is( ":visible" );
12947	}
12948
12949	if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
12950		focusableIfVisible = !element.disabled;
12951
12952		if ( focusableIfVisible ) {
12953
12954			// Form controls within a disabled fieldset are disabled.
12955			// However, controls within the fieldset's legend do not get disabled.
12956			// Since controls generally aren't placed inside legends, we skip
12957			// this portion of the check.
12958			fieldset = $( element ).closest( "fieldset" )[ 0 ];
12959			if ( fieldset ) {
12960				focusableIfVisible = !fieldset.disabled;
12961			}
12962		}
12963	} else if ( "a" === nodeName ) {
12964		focusableIfVisible = element.href || hasTabindex;
12965	} else {
12966		focusableIfVisible = hasTabindex;
12967	}
12968
12969	return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
12970};
12971
12972// Support: IE 8 only
12973// IE 8 doesn't resolve inherit to visible/hidden for computed values
12974function visible( element ) {
12975	var visibility = element.css( "visibility" );
12976	while ( visibility === "inherit" ) {
12977		element = element.parent();
12978		visibility = element.css( "visibility" );
12979	}
12980	return visibility === "visible";
12981}
12982
12983$.extend( $.expr.pseudos, {
12984	focusable: function( element ) {
12985		return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
12986	}
12987} );
12988
12989var focusable = $.ui.focusable;
12990
12991
12992
12993// Support: IE8 Only
12994// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop
12995// with a string, so we need to find the proper form.
12996var form = $.fn._form = function() {
12997	return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );
12998};
12999
13000
13001/*!
13002 * jQuery UI Form Reset Mixin 1.13.1
13003 * http://jqueryui.com
13004 *
13005 * Copyright jQuery Foundation and other contributors
13006 * Released under the MIT license.
13007 * http://jquery.org/license
13008 */
13009
13010//>>label: Form Reset Mixin
13011//>>group: Core
13012//>>description: Refresh input widgets when their form is reset
13013//>>docs: http://api.jqueryui.com/form-reset-mixin/
13014
13015
13016var formResetMixin = $.ui.formResetMixin = {
13017	_formResetHandler: function() {
13018		var form = $( this );
13019
13020		// Wait for the form reset to actually happen before refreshing
13021		setTimeout( function() {
13022			var instances = form.data( "ui-form-reset-instances" );
13023			$.each( instances, function() {
13024				this.refresh();
13025			} );
13026		} );
13027	},
13028
13029	_bindFormResetHandler: function() {
13030		this.form = this.element._form();
13031		if ( !this.form.length ) {
13032			return;
13033		}
13034
13035		var instances = this.form.data( "ui-form-reset-instances" ) || [];
13036		if ( !instances.length ) {
13037
13038			// We don't use _on() here because we use a single event handler per form
13039			this.form.on( "reset.ui-form-reset", this._formResetHandler );
13040		}
13041		instances.push( this );
13042		this.form.data( "ui-form-reset-instances", instances );
13043	},
13044
13045	_unbindFormResetHandler: function() {
13046		if ( !this.form.length ) {
13047			return;
13048		}
13049
13050		var instances = this.form.data( "ui-form-reset-instances" );
13051		instances.splice( $.inArray( this, instances ), 1 );
13052		if ( instances.length ) {
13053			this.form.data( "ui-form-reset-instances", instances );
13054		} else {
13055			this.form
13056				.removeData( "ui-form-reset-instances" )
13057				.off( "reset.ui-form-reset" );
13058		}
13059	}
13060};
13061
13062
13063/*!
13064 * jQuery UI Support for jQuery core 1.8.x and newer 1.13.1
13065 * http://jqueryui.com
13066 *
13067 * Copyright jQuery Foundation and other contributors
13068 * Released under the MIT license.
13069 * http://jquery.org/license
13070 *
13071 */
13072
13073//>>label: jQuery 1.8+ Support
13074//>>group: Core
13075//>>description: Support version 1.8.x and newer of jQuery core
13076
13077
13078// Support: jQuery 1.9.x or older
13079// $.expr[ ":" ] is deprecated.
13080if ( !$.expr.pseudos ) {
13081	$.expr.pseudos = $.expr[ ":" ];
13082}
13083
13084// Support: jQuery 1.11.x or older
13085// $.unique has been renamed to $.uniqueSort
13086if ( !$.uniqueSort ) {
13087	$.uniqueSort = $.unique;
13088}
13089
13090// Support: jQuery 2.2.x or older.
13091// This method has been defined in jQuery 3.0.0.
13092// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js
13093if ( !$.escapeSelector ) {
13094
13095	// CSS string/identifier serialization
13096	// https://drafts.csswg.org/cssom/#common-serializing-idioms
13097	var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
13098
13099	var fcssescape = function( ch, asCodePoint ) {
13100		if ( asCodePoint ) {
13101
13102			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
13103			if ( ch === "\0" ) {
13104				return "\uFFFD";
13105			}
13106
13107			// Control characters and (dependent upon position) numbers get escaped as code points
13108			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
13109		}
13110
13111		// Other potentially-special ASCII characters get backslash-escaped
13112		return "\\" + ch;
13113	};
13114
13115	$.escapeSelector = function( sel ) {
13116		return ( sel + "" ).replace( rcssescape, fcssescape );
13117	};
13118}
13119
13120// Support: jQuery 3.4.x or older
13121// These methods have been defined in jQuery 3.5.0.
13122if ( !$.fn.even || !$.fn.odd ) {
13123	$.fn.extend( {
13124		even: function() {
13125			return this.filter( function( i ) {
13126				return i % 2 === 0;
13127			} );
13128		},
13129		odd: function() {
13130			return this.filter( function( i ) {
13131				return i % 2 === 1;
13132			} );
13133		}
13134	} );
13135}
13136
13137;
13138/*!
13139 * jQuery UI Keycode 1.13.1
13140 * http://jqueryui.com
13141 *
13142 * Copyright jQuery Foundation and other contributors
13143 * Released under the MIT license.
13144 * http://jquery.org/license
13145 */
13146
13147//>>label: Keycode
13148//>>group: Core
13149//>>description: Provide keycodes as keynames
13150//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
13151
13152
13153var keycode = $.ui.keyCode = {
13154	BACKSPACE: 8,
13155	COMMA: 188,
13156	DELETE: 46,
13157	DOWN: 40,
13158	END: 35,
13159	ENTER: 13,
13160	ESCAPE: 27,
13161	HOME: 36,
13162	LEFT: 37,
13163	PAGE_DOWN: 34,
13164	PAGE_UP: 33,
13165	PERIOD: 190,
13166	RIGHT: 39,
13167	SPACE: 32,
13168	TAB: 9,
13169	UP: 38
13170};
13171
13172
13173/*!
13174 * jQuery UI Labels 1.13.1
13175 * http://jqueryui.com
13176 *
13177 * Copyright jQuery Foundation and other contributors
13178 * Released under the MIT license.
13179 * http://jquery.org/license
13180 */
13181
13182//>>label: labels
13183//>>group: Core
13184//>>description: Find all the labels associated with a given input
13185//>>docs: http://api.jqueryui.com/labels/
13186
13187
13188var labels = $.fn.labels = function() {
13189	var ancestor, selector, id, labels, ancestors;
13190
13191	if ( !this.length ) {
13192		return this.pushStack( [] );
13193	}
13194
13195	// Check control.labels first
13196	if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
13197		return this.pushStack( this[ 0 ].labels );
13198	}
13199
13200	// Support: IE <= 11, FF <= 37, Android <= 2.3 only
13201	// Above browsers do not support control.labels. Everything below is to support them
13202	// as well as document fragments. control.labels does not work on document fragments
13203	labels = this.eq( 0 ).parents( "label" );
13204
13205	// Look for the label based on the id
13206	id = this.attr( "id" );
13207	if ( id ) {
13208
13209		// We don't search against the document in case the element
13210		// is disconnected from the DOM
13211		ancestor = this.eq( 0 ).parents().last();
13212
13213		// Get a full set of top level ancestors
13214		ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
13215
13216		// Create a selector for the label based on the id
13217		selector = "label[for='" + $.escapeSelector( id ) + "']";
13218
13219		labels = labels.add( ancestors.find( selector ).addBack( selector ) );
13220
13221	}
13222
13223	// Return whatever we have found for labels
13224	return this.pushStack( labels );
13225};
13226
13227
13228/*!
13229 * jQuery UI Position 1.13.1
13230 * http://jqueryui.com
13231 *
13232 * Copyright jQuery Foundation and other contributors
13233 * Released under the MIT license.
13234 * http://jquery.org/license
13235 *
13236 * http://api.jqueryui.com/position/
13237 */
13238
13239//>>label: Position
13240//>>group: Core
13241//>>description: Positions elements relative to other elements.
13242//>>docs: http://api.jqueryui.com/position/
13243//>>demos: http://jqueryui.com/position/
13244
13245
13246( function() {
13247var cachedScrollbarWidth,
13248	max = Math.max,
13249	abs = Math.abs,
13250	rhorizontal = /left|center|right/,
13251	rvertical = /top|center|bottom/,
13252	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
13253	rposition = /^\w+/,
13254	rpercent = /%$/,
13255	_position = $.fn.position;
13256
13257function getOffsets( offsets, width, height ) {
13258	return [
13259		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
13260		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
13261	];
13262}
13263
13264function parseCss( element, property ) {
13265	return parseInt( $.css( element, property ), 10 ) || 0;
13266}
13267
13268function isWindow( obj ) {
13269	return obj != null && obj === obj.window;
13270}
13271
13272function getDimensions( elem ) {
13273	var raw = elem[ 0 ];
13274	if ( raw.nodeType === 9 ) {
13275		return {
13276			width: elem.width(),
13277			height: elem.height(),
13278			offset: { top: 0, left: 0 }
13279		};
13280	}
13281	if ( isWindow( raw ) ) {
13282		return {
13283			width: elem.width(),
13284			height: elem.height(),
13285			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
13286		};
13287	}
13288	if ( raw.preventDefault ) {
13289		return {
13290			width: 0,
13291			height: 0,
13292			offset: { top: raw.pageY, left: raw.pageX }
13293		};
13294	}
13295	return {
13296		width: elem.outerWidth(),
13297		height: elem.outerHeight(),
13298		offset: elem.offset()
13299	};
13300}
13301
13302$.position = {
13303	scrollbarWidth: function() {
13304		if ( cachedScrollbarWidth !== undefined ) {
13305			return cachedScrollbarWidth;
13306		}
13307		var w1, w2,
13308			div = $( "<div style=" +
13309				"'display:block;position:absolute;
vendor: 4,494 bytes, lines 13309-13453
13309width:200px;height:200px;overflow:hidden;'>" +
13310				"<div style='height:300px;width:auto;'></div></div>" ),
13311			innerDiv = div.children()[ 0 ];
13312
13313		$( "body" ).append( div );
13314		w1 = innerDiv.offsetWidth;
13315		div.css( "overflow", "scroll" );
13316
13317		w2 = innerDiv.offsetWidth;
13318
13319		if ( w1 === w2 ) {
13320			w2 = div[ 0 ].clientWidth;
13321		}
13322
13323		div.remove();
13324
13325		return ( cachedScrollbarWidth = w1 - w2 );
13326	},
13327	getScrollInfo: function( within ) {
13328		var overflowX = within.isWindow || within.isDocument ? "" :
13329				within.element.css( "overflow-x" ),
13330			overflowY = within.isWindow || within.isDocument ? "" :
13331				within.element.css( "overflow-y" ),
13332			hasOverflowX = overflowX === "scroll" ||
13333				( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
13334			hasOverflowY = overflowY === "scroll" ||
13335				( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
13336		return {
13337			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
13338			height: hasOverflowX ? $.position.scrollbarWidth() : 0
13339		};
13340	},
13341	getWithinInfo: function( element ) {
13342		var withinElement = $( element || window ),
13343			isElemWindow = isWindow( withinElement[ 0 ] ),
13344			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
13345			hasOffset = !isElemWindow && !isDocument;
13346		return {
13347			element: withinElement,
13348			isWindow: isElemWindow,
13349			isDocument: isDocument,
13350			offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
13351			scrollLeft: withinElement.scrollLeft(),
13352			scrollTop: withinElement.scrollTop(),
13353			width: withinElement.outerWidth(),
13354			height: withinElement.outerHeight()
13355		};
13356	}
13357};
13358
13359$.fn.position = function( options ) {
13360	if ( !options || !options.of ) {
13361		return _position.apply( this, arguments );
13362	}
13363
13364	// Make a copy, we don't want to modify arguments
13365	options = $.extend( {}, options );
13366
13367	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
13368
13369		// Make sure string options are treated as CSS selectors
13370		target = typeof options.of === "string" ?
13371			$( document ).find( options.of ) :
13372			$( options.of ),
13373
13374		within = $.position.getWithinInfo( options.within ),
13375		scrollInfo = $.position.getScrollInfo( within ),
13376		collision = ( options.collision || "flip" ).split( " " ),
13377		offsets = {};
13378
13379	dimensions = getDimensions( target );
13380	if ( target[ 0 ].preventDefault ) {
13381
13382		// Force left top to allow flipping
13383		options.at = "left top";
13384	}
13385	targetWidth = dimensions.width;
13386	targetHeight = dimensions.height;
13387	targetOffset = dimensions.offset;
13388
13389	// Clone to reuse original targetOffset later
13390	basePosition = $.extend( {}, targetOffset );
13391
13392	// Force my and at to have valid horizontal and vertical positions
13393	// if a value is missing or invalid, it will be converted to center
13394	$.each( [ "my", "at" ], function() {
13395		var pos = ( options[ this ] || "" ).split( " " ),
13396			horizontalOffset,
13397			verticalOffset;
13398
13399		if ( pos.length === 1 ) {
13400			pos = rhorizontal.test( pos[ 0 ] ) ?
13401				pos.concat( [ "center" ] ) :
13402				rvertical.test( pos[ 0 ] ) ?
13403					[ "center" ].concat( pos ) :
13404					[ "center", "center" ];
13405		}
13406		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
13407		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
13408
13409		// Calculate offsets
13410		horizontalOffset = roffset.exec( pos[ 0 ] );
13411		verticalOffset = roffset.exec( pos[ 1 ] );
13412		offsets[ this ] = [
13413			horizontalOffset ? horizontalOffset[ 0 ] : 0,
13414			verticalOffset ? verticalOffset[ 0 ] : 0
13415		];
13416
13417		// Reduce to just the positions without the offsets
13418		options[ this ] = [
13419			rposition.exec( pos[ 0 ] )[ 0 ],
13420			rposition.exec( pos[ 1 ] )[ 0 ]
13421		];
13422	} );
13423
13424	// Normalize collision option
13425	if ( collision.length === 1 ) {
13426		collision[ 1 ] = collision[ 0 ];
13427	}
13428
13429	if ( options.at[ 0 ] === "right" ) {
13430		basePosition.left += targetWidth;
13431	} else if ( options.at[ 0 ] === "center" ) {
13432		basePosition.left += targetWidth / 2;
13433	}
13434
13435	if ( options.at[ 1 ] === "bottom" ) {
13436		basePosition.top += targetHeight;
13437	} else if ( options.at[ 1 ] === "center" ) {
13438		basePosition.top += targetHeight / 2;
13439	}
13440
13441	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
13442	basePosition.left += atOffset[ 0 ];
13443	basePosition.top += atOffset[ 1 ];
13444
13445	return this.each( function() {
13446		var collisionPosition, using,
13447			elem = $( this ),
13448			elemWidth = elem.outerWidth(),
13449			elemHeight = elem.outerHeight(),
13450			marginLeft = parseCss( this, "marginLeft" ),
13451			marginTop = parseCss( this, "marginTop" ),
13452			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
13453				scrollInfo.width,
vendor: 9,275 bytes, lines 13454-13747
13454			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
13455				scrollInfo.height,
13456			position = $.extend( {}, basePosition ),
13457			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
13458
13459		if ( options.my[ 0 ] === "right" ) {
13460			position.left -= elemWidth;
13461		} else if ( options.my[ 0 ] === "center" ) {
13462			position.left -= elemWidth / 2;
13463		}
13464
13465		if ( options.my[ 1 ] === "bottom" ) {
13466			position.top -= elemHeight;
13467		} else if ( options.my[ 1 ] === "center" ) {
13468			position.top -= elemHeight / 2;
13469		}
13470
13471		position.left += myOffset[ 0 ];
13472		position.top += myOffset[ 1 ];
13473
13474		collisionPosition = {
13475			marginLeft: marginLeft,
13476			marginTop: marginTop
13477		};
13478
13479		$.each( [ "left", "top" ], function( i, dir ) {
13480			if ( $.ui.position[ collision[ i ] ] ) {
13481				$.ui.position[ collision[ i ] ][ dir ]( position, {
13482					targetWidth: targetWidth,
13483					targetHeight: targetHeight,
13484					elemWidth: elemWidth,
13485					elemHeight: elemHeight,
13486					collisionPosition: collisionPosition,
13487					collisionWidth: collisionWidth,
13488					collisionHeight: collisionHeight,
13489					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
13490					my: options.my,
13491					at: options.at,
13492					within: within,
13493					elem: elem
13494				} );
13495			}
13496		} );
13497
13498		if ( options.using ) {
13499
13500			// Adds feedback as second argument to using callback, if present
13501			using = function( props ) {
13502				var left = targetOffset.left - position.left,
13503					right = left + targetWidth - elemWidth,
13504					top = targetOffset.top - position.top,
13505					bottom = top + targetHeight - elemHeight,
13506					feedback = {
13507						target: {
13508							element: target,
13509							left: targetOffset.left,
13510							top: targetOffset.top,
13511							width: targetWidth,
13512							height: targetHeight
13513						},
13514						element: {
13515							element: elem,
13516							left: position.left,
13517							top: position.top,
13518							width: elemWidth,
13519							height: elemHeight
13520						},
13521						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
13522						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
13523					};
13524				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
13525					feedback.horizontal = "center";
13526				}
13527				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
13528					feedback.vertical = "middle";
13529				}
13530				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
13531					feedback.important = "horizontal";
13532				} else {
13533					feedback.important = "vertical";
13534				}
13535				options.using.call( this, props, feedback );
13536			};
13537		}
13538
13539		elem.offset( $.extend( position, { using: using } ) );
13540	} );
13541};
13542
13543$.ui.position = {
13544	fit: {
13545		left: function( position, data ) {
13546			var within = data.within,
13547				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
13548				outerWidth = within.width,
13549				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
13550				overLeft = withinOffset - collisionPosLeft,
13551				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
13552				newOverRight;
13553
13554			// Element is wider than within
13555			if ( data.collisionWidth > outerWidth ) {
13556
13557				// Element is initially over the left side of within
13558				if ( overLeft > 0 && overRight <= 0 ) {
13559					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
13560						withinOffset;
13561					position.left += overLeft - newOverRight;
13562
13563				// Element is initially over right side of within
13564				} else if ( overRight > 0 && overLeft <= 0 ) {
13565					position.left = withinOffset;
13566
13567				// Element is initially over both left and right sides of within
13568				} else {
13569					if ( overLeft > overRight ) {
13570						position.left = withinOffset + outerWidth - data.collisionWidth;
13571					} else {
13572						position.left = withinOffset;
13573					}
13574				}
13575
13576			// Too far left -> align with left edge
13577			} else if ( overLeft > 0 ) {
13578				position.left += overLeft;
13579
13580			// Too far right -> align with right edge
13581			} else if ( overRight > 0 ) {
13582				position.left -= overRight;
13583
13584			// Adjust based on position and margin
13585			} else {
13586				position.left = max( position.left - collisionPosLeft, position.left );
13587			}
13588		},
13589		top: function( position, data ) {
13590			var within = data.within,
13591				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
13592				outerHeight = data.within.height,
13593				collisionPosTop = position.top - data.collisionPosition.marginTop,
13594				overTop = withinOffset - collisionPosTop,
13595				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
13596				newOverBottom;
13597
13598			// Element is taller than within
13599			if ( data.collisionHeight > outerHeight ) {
13600
13601				// Element is initially over the top of within
13602				if ( overTop > 0 && overBottom <= 0 ) {
13603					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
13604						withinOffset;
13605					position.top += overTop - newOverBottom;
13606
13607				// Element is initially over bottom of within
13608				} else if ( overBottom > 0 && overTop <= 0 ) {
13609					position.top = withinOffset;
13610
13611				// Element is initially over both top and bottom of within
13612				} else {
13613					if ( overTop > overBottom ) {
13614						position.top = withinOffset + outerHeight - data.collisionHeight;
13615					} else {
13616						position.top = withinOffset;
13617					}
13618				}
13619
13620			// Too far up -> align with top
13621			} else if ( overTop > 0 ) {
13622				position.top += overTop;
13623
13624			// Too far down -> align with bottom edge
13625			} else if ( overBottom > 0 ) {
13626				position.top -= overBottom;
13627
13628			// Adjust based on position and margin
13629			} else {
13630				position.top = max( position.top - collisionPosTop, position.top );
13631			}
13632		}
13633	},
13634	flip: {
13635		left: function( position, data ) {
13636			var within = data.within,
13637				withinOffset = within.offset.left + within.scrollLeft,
13638				outerWidth = within.width,
13639				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
13640				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
13641				overLeft = collisionPosLeft - offsetLeft,
13642				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
13643				myOffset = data.my[ 0 ] === "left" ?
13644					-data.elemWidth :
13645					data.my[ 0 ] === "right" ?
13646						data.elemWidth :
13647						0,
13648				atOffset = data.at[ 0 ] === "left" ?
13649					data.targetWidth :
13650					data.at[ 0 ] === "right" ?
13651						-data.targetWidth :
13652						0,
13653				offset = -2 * data.offset[ 0 ],
13654				newOverRight,
13655				newOverLeft;
13656
13657			if ( overLeft < 0 ) {
13658				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
13659					outerWidth - withinOffset;
13660				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
13661					position.left += myOffset + atOffset + offset;
13662				}
13663			} else if ( overRight > 0 ) {
13664				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
13665					atOffset + offset - offsetLeft;
13666				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
13667					position.left += myOffset + atOffset + offset;
13668				}
13669			}
13670		},
13671		top: function( position, data ) {
13672			var within = data.within,
13673				withinOffset = within.offset.top + within.scrollTop,
13674				outerHeight = within.height,
13675				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
13676				collisionPosTop = position.top - data.collisionPosition.marginTop,
13677				overTop = collisionPosTop - offsetTop,
13678				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
13679				top = data.my[ 1 ] === "top",
13680				myOffset = top ?
13681					-data.elemHeight :
13682					data.my[ 1 ] === "bottom" ?
13683						data.elemHeight :
13684						0,
13685				atOffset = data.at[ 1 ] === "top" ?
13686					data.targetHeight :
13687					data.at[ 1 ] === "bottom" ?
13688						-data.targetHeight :
13689						0,
13690				offset = -2 * data.offset[ 1 ],
13691				newOverTop,
13692				newOverBottom;
13693			if ( overTop < 0 ) {
13694				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
13695					outerHeight - withinOffset;
13696				if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
13697					position.top += myOffset + atOffset + offset;
13698				}
13699			} else if ( overBottom > 0 ) {
13700				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
13701					offset - offsetTop;
13702				if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
13703					position.top += myOffset + atOffset + offset;
13704				}
13705			}
13706		}
13707	},
13708	flipfit: {
13709		left: function() {
13710			$.ui.position.flip.left.apply( this, arguments );
13711			$.ui.position.fit.left.apply( this, arguments );
13712		},
13713		top: function() {
13714			$.ui.position.flip.top.apply( this, arguments );
13715			$.ui.position.fit.top.apply( this, arguments );
13716		}
13717	}
13718};
13719
13720} )();
13721
13722var position = $.ui.position;
13723
13724
13725/*!
13726 * jQuery UI Scroll Parent 1.13.1
13727 * http://jqueryui.com
13728 *
13729 * Copyright jQuery Foundation and other contributors
13730 * Released under the MIT license.
13731 * http://jquery.org/license
13732 */
13733
13734//>>label: scrollParent
13735//>>group: Core
13736//>>description: Get the closest ancestor element that is scrollable.
13737//>>docs: http://api.jqueryui.com/scrollParent/
13738
13739
13740var scrollParent = $.fn.scrollParent = function( includeHidden ) {
13741	var position = this.css( "position" ),
13742		excludeStaticParent = position === "absolute",
13743		overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
13744		scrollParent = this.parents().filter( function() {
13745			var parent = $( this );
13746			if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
13747				return false;
vendor: 2,777 bytes, lines 13748-13864
13748			}
13749			return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
13750				parent.css( "overflow-x" ) );
13751		} ).eq( 0 );
13752
13753	return position === "fixed" || !scrollParent.length ?
13754		$( this[ 0 ].ownerDocument || document ) :
13755		scrollParent;
13756};
13757
13758
13759/*!
13760 * jQuery UI Tabbable 1.13.1
13761 * http://jqueryui.com
13762 *
13763 * Copyright jQuery Foundation and other contributors
13764 * Released under the MIT license.
13765 * http://jquery.org/license
13766 */
13767
13768//>>label: :tabbable Selector
13769//>>group: Core
13770//>>description: Selects elements which can be tabbed to.
13771//>>docs: http://api.jqueryui.com/tabbable-selector/
13772
13773
13774var tabbable = $.extend( $.expr.pseudos, {
13775	tabbable: function( element ) {
13776		var tabIndex = $.attr( element, "tabindex" ),
13777			hasTabindex = tabIndex != null;
13778		return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );
13779	}
13780} );
13781
13782
13783/*!
13784 * jQuery UI Unique ID 1.13.1
13785 * http://jqueryui.com
13786 *
13787 * Copyright jQuery Foundation and other contributors
13788 * Released under the MIT license.
13789 * http://jquery.org/license
13790 */
13791
13792//>>label: uniqueId
13793//>>group: Core
13794//>>description: Functions to generate and remove uniqueId's
13795//>>docs: http://api.jqueryui.com/uniqueId/
13796
13797
13798var uniqueId = $.fn.extend( {
13799	uniqueId: ( function() {
13800		var uuid = 0;
13801
13802		return function() {
13803			return this.each( function() {
13804				if ( !this.id ) {
13805					this.id = "ui-id-" + ( ++uuid );
13806				}
13807			} );
13808		};
13809	} )(),
13810
13811	removeUniqueId: function() {
13812		return this.each( function() {
13813			if ( /^ui-id-\d+$/.test( this.id ) ) {
13814				$( this ).removeAttr( "id" );
13815			}
13816		} );
13817	}
13818} );
13819
13820
13821/*!
13822 * jQuery UI Widget 1.13.1
13823 * http://jqueryui.com
13824 *
13825 * Copyright jQuery Foundation and other contributors
13826 * Released under the MIT license.
13827 * http://jquery.org/license
13828 */
13829
13830//>>label: Widget
13831//>>group: Core
13832//>>description: Provides a factory for creating stateful widgets with a common API.
13833//>>docs: http://api.jqueryui.com/jQuery.widget/
13834//>>demos: http://jqueryui.com/widget/
13835
13836
13837var widgetUuid = 0;
13838var widgetHasOwnProperty = Array.prototype.hasOwnProperty;
13839var widgetSlice = Array.prototype.slice;
13840
13841$.cleanData = ( function( orig ) {
13842	return function( elems ) {
13843		var events, elem, i;
13844		for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
13845
13846			// Only trigger remove when necessary to save time
13847			events = $._data( elem, "events" );
13848			if ( events && events.remove ) {
13849				$( elem ).triggerHandler( "remove" );
13850			}
13851		}
13852		orig( elems );
13853	};
13854} )( $.cleanData );
13855
13856$.widget = function( name, base, prototype ) {
13857	var existingConstructor, constructor, basePrototype;
13858
13859	// ProxiedPrototype allows the provided prototype to remain unmodified
13860	// so that it can be used as a mixin for multiple widgets (#8876)
13861	var proxiedPrototype = {};
13862
13863	var namespace = name.split( "." )[ 0 ];
13864	name = name.split( "." )[ 1 ];
vendor: 18,811 bytes, lines 13864-14564
13864
13865	var fullName = namespace + "-" + name;
13866
13867	if ( !prototype ) {
13868		prototype = base;
13869		base = $.Widget;
13870	}
13871
13872	if ( Array.isArray( prototype ) ) {
13873		prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
13874	}
13875
13876	// Create selector for plugin
13877	$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {
13878		return !!$.data( elem, fullName );
13879	};
13880
13881	$[ namespace ] = $[ namespace ] || {};
13882	existingConstructor = $[ namespace ][ name ];
13883	constructor = $[ namespace ][ name ] = function( options, element ) {
13884
13885		// Allow instantiation without "new" keyword
13886		if ( !this || !this._createWidget ) {
13887			return new constructor( options, element );
13888		}
13889
13890		// Allow instantiation without initializing for simple inheritance
13891		// must use "new" keyword (the code above always passes args)
13892		if ( arguments.length ) {
13893			this._createWidget( options, element );
13894		}
13895	};
13896
13897	// Extend with the existing constructor to carry over any static properties
13898	$.extend( constructor, existingConstructor, {
13899		version: prototype.version,
13900
13901		// Copy the object used to create the prototype in case we need to
13902		// redefine the widget later
13903		_proto: $.extend( {}, prototype ),
13904
13905		// Track widgets that inherit from this widget in case this widget is
13906		// redefined after a widget inherits from it
13907		_childConstructors: []
13908	} );
13909
13910	basePrototype = new base();
13911
13912	// We need to make the options hash a property directly on the new instance
13913	// otherwise we'll modify the options hash on the prototype that we're
13914	// inheriting from
13915	basePrototype.options = $.widget.extend( {}, basePrototype.options );
13916	$.each( prototype, function( prop, value ) {
13917		if ( typeof value !== "function" ) {
13918			proxiedPrototype[ prop ] = value;
13919			return;
13920		}
13921		proxiedPrototype[ prop ] = ( function() {
13922			function _super() {
13923				return base.prototype[ prop ].apply( this, arguments );
13924			}
13925
13926			function _superApply( args ) {
13927				return base.prototype[ prop ].apply( this, args );
13928			}
13929
13930			return function() {
13931				var __super = this._super;
13932				var __superApply = this._superApply;
13933				var returnValue;
13934
13935				this._super = _super;
13936				this._superApply = _superApply;
13937
13938				returnValue = value.apply( this, arguments );
13939
13940				this._super = __super;
13941				this._superApply = __superApply;
13942
13943				return returnValue;
13944			};
13945		} )();
13946	} );
13947	constructor.prototype = $.widget.extend( basePrototype, {
13948
13949		// TODO: remove support for widgetEventPrefix
13950		// always use the name + a colon as the prefix, e.g., draggable:start
13951		// don't prefix for widgets that aren't DOM-based
13952		widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
13953	}, proxiedPrototype, {
13954		constructor: constructor,
13955		namespace: namespace,
13956		widgetName: name,
13957		widgetFullName: fullName
13958	} );
13959
13960	// If this widget is being redefined then we need to find all widgets that
13961	// are inheriting from it and redefine all of them so that they inherit from
13962	// the new version of this widget. We're essentially trying to replace one
13963	// level in the prototype chain.
13964	if ( existingConstructor ) {
13965		$.each( existingConstructor._childConstructors, function( i, child ) {
13966			var childPrototype = child.prototype;
13967
13968			// Redefine the child widget using the same prototype that was
13969			// originally used, but inherit from the new version of the base
13970			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
13971				child._proto );
13972		} );
13973
13974		// Remove the list of existing child constructors from the old constructor
13975		// so the old child constructors can be garbage collected
13976		delete existingConstructor._childConstructors;
13977	} else {
13978		base._childConstructors.push( constructor );
13979	}
13980
13981	$.widget.bridge( name, constructor );
13982
13983	return constructor;
13984};
13985
13986$.widget.extend = function( target ) {
13987	var input = widgetSlice.call( arguments, 1 );
13988	var inputIndex = 0;
13989	var inputLength = input.length;
13990	var key;
13991	var value;
13992
13993	for ( ; inputIndex < inputLength; inputIndex++ ) {
13994		for ( key in input[ inputIndex ] ) {
13995			value = input[ inputIndex ][ key ];
13996			if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {
13997
13998				// Clone objects
13999				if ( $.isPlainObject( value ) ) {
14000					target[ key ] = $.isPlainObject( target[ key ] ) ?
14001						$.widget.extend( {}, target[ key ], value ) :
14002
14003						// Don't extend strings, arrays, etc. with objects
14004						$.widget.extend( {}, value );
14005
14006				// Copy everything else by reference
14007				} else {
14008					target[ key ] = value;
14009				}
14010			}
14011		}
14012	}
14013	return target;
14014};
14015
14016$.widget.bridge = function( name, object ) {
14017	var fullName = object.prototype.widgetFullName || name;
14018	$.fn[ name ] = function( options ) {
14019		var isMethodCall = typeof options === "string";
14020		var args = widgetSlice.call( arguments, 1 );
14021		var returnValue = this;
14022
14023		if ( isMethodCall ) {
14024
14025			// If this is an empty collection, we need to have the instance method
14026			// return undefined instead of the jQuery instance
14027			if ( !this.length && options === "instance" ) {
14028				returnValue = undefined;
14029			} else {
14030				this.each( function() {
14031					var methodValue;
14032					var instance = $.data( this, fullName );
14033
14034					if ( options === "instance" ) {
14035						returnValue = instance;
14036						return false;
14037					}
14038
14039					if ( !instance ) {
14040						return $.error( "cannot call methods on " + name +
14041							" prior to initialization; " +
14042							"attempted to call method '" + options + "'" );
14043					}
14044
14045					if ( typeof instance[ options ] !== "function" ||
14046						options.charAt( 0 ) === "_" ) {
14047						return $.error( "no such method '" + options + "' for " + name +
14048							" widget instance" );
14049					}
14050
14051					methodValue = instance[ options ].apply( instance, args );
14052
14053					if ( methodValue !== instance && methodValue !== undefined ) {
14054						returnValue = methodValue && methodValue.jquery ?
14055							returnValue.pushStack( methodValue.get() ) :
14056							methodValue;
14057						return false;
14058					}
14059				} );
14060			}
14061		} else {
14062
14063			// Allow multiple hashes to be passed on init
14064			if ( args.length ) {
14065				options = $.widget.extend.apply( null, [ options ].concat( args ) );
14066			}
14067
14068			this.each( function() {
14069				var instance = $.data( this, fullName );
14070				if ( instance ) {
14071					instance.option( options || {} );
14072					if ( instance._init ) {
14073						instance._init();
14074					}
14075				} else {
14076					$.data( this, fullName, new object( options, this ) );
14077				}
14078			} );
14079		}
14080
14081		return returnValue;
14082	};
14083};
14084
14085$.Widget = function( /* options, element */ ) {};
14086$.Widget._childConstructors = [];
14087
14088$.Widget.prototype = {
14089	widgetName: "widget",
14090	widgetEventPrefix: "",
14091	defaultElement: "<div>",
14092
14093	options: {
14094		classes: {},
14095		disabled: false,
14096
14097		// Callbacks
14098		create: null
14099	},
14100
14101	_createWidget: function( options, element ) {
14102		element = $( element || this.defaultElement || this )[ 0 ];
14103		this.element = $( element );
14104		this.uuid = widgetUuid++;
14105		this.eventNamespace = "." + this.widgetName + this.uuid;
14106
14107		this.bindings = $();
14108		this.hoverable = $();
14109		this.focusable = $();
14110		this.classesElementLookup = {};
14111
14112		if ( element !== this ) {
14113			$.data( element, this.widgetFullName, this );
14114			this._on( true, this.element, {
14115				remove: function( event ) {
14116					if ( event.target === element ) {
14117						this.destroy();
14118					}
14119				}
14120			} );
14121			this.document = $( element.style ?
14122
14123				// Element within the document
14124				element.ownerDocument :
14125
14126				// Element is window or document
14127				element.document || element );
14128			this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
14129		}
14130
14131		this.options = $.widget.extend( {},
14132			this.options,
14133			this._getCreateOptions(),
14134			options );
14135
14136		this._create();
14137
14138		if ( this.options.disabled ) {
14139			this._setOptionDisabled( this.options.disabled );
14140		}
14141
14142		this._trigger( "create", null, this._getCreateEventData() );
14143		this._init();
14144	},
14145
14146	_getCreateOptions: function() {
14147		return {};
14148	},
14149
14150	_getCreateEventData: $.noop,
14151
14152	_create: $.noop,
14153
14154	_init: $.noop,
14155
14156	destroy: function() {
14157		var that = this;
14158
14159		this._destroy();
14160		$.each( this.classesElementLookup, function( key, value ) {
14161			that._removeClass( value, key );
14162		} );
14163
14164		// We can probably remove the unbind calls in 2.0
14165		// all event bindings should go through this._on()
14166		this.element
14167			.off( this.eventNamespace )
14168			.removeData( this.widgetFullName );
14169		this.widget()
14170			.off( this.eventNamespace )
14171			.removeAttr( "aria-disabled" );
14172
14173		// Clean up events and states
14174		this.bindings.off( this.eventNamespace );
14175	},
14176
14177	_destroy: $.noop,
14178
14179	widget: function() {
14180		return this.element;
14181	},
14182
14183	option: function( key, value ) {
14184		var options = key;
14185		var parts;
14186		var curOption;
14187		var i;
14188
14189		if ( arguments.length === 0 ) {
14190
14191			// Don't return a reference to the internal hash
14192			return $.widget.extend( {}, this.options );
14193		}
14194
14195		if ( typeof key === "string" ) {
14196
14197			// Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
14198			options = {};
14199			parts = key.split( "." );
14200			key = parts.shift();
14201			if ( parts.length ) {
14202				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
14203				for ( i = 0; i < parts.length - 1; i++ ) {
14204					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
14205					curOption = curOption[ parts[ i ] ];
14206				}
14207				key = parts.pop();
14208				if ( arguments.length === 1 ) {
14209					return curOption[ key ] === undefined ? null : curOption[ key ];
14210				}
14211				curOption[ key ] = value;
14212			} else {
14213				if ( arguments.length === 1 ) {
14214					return this.options[ key ] === undefined ? null : this.options[ key ];
14215				}
14216				options[ key ] = value;
14217			}
14218		}
14219
14220		this._setOptions( options );
14221
14222		return this;
14223	},
14224
14225	_setOptions: function( options ) {
14226		var key;
14227
14228		for ( key in options ) {
14229			this._setOption( key, options[ key ] );
14230		}
14231
14232		return this;
14233	},
14234
14235	_setOption: function( key, value ) {
14236		if ( key === "classes" ) {
14237			this._setOptionClasses( value );
14238		}
14239
14240		this.options[ key ] = value;
14241
14242		if ( key === "disabled" ) {
14243			this._setOptionDisabled( value );
14244		}
14245
14246		return this;
14247	},
14248
14249	_setOptionClasses: function( value ) {
14250		var classKey, elements, currentElements;
14251
14252		for ( classKey in value ) {
14253			currentElements = this.classesElementLookup[ classKey ];
14254			if ( value[ classKey ] === this.options.classes[ classKey ] ||
14255					!currentElements ||
14256					!currentElements.length ) {
14257				continue;
14258			}
14259
14260			// We are doing this to create a new jQuery object because the _removeClass() call
14261			// on the next line is going to destroy the reference to the current elements being
14262			// tracked. We need to save a copy of this collection so that we can add the new classes
14263			// below.
14264			elements = $( currentElements.get() );
14265			this._removeClass( currentElements, classKey );
14266
14267			// We don't use _addClass() here, because that uses this.options.classes
14268			// for generating the string of classes. We want to use the value passed in from
14269			// _setOption(), this is the new value of the classes option which was passed to
14270			// _setOption(). We pass this value directly to _classes().
14271			elements.addClass( this._classes( {
14272				element: elements,
14273				keys: classKey,
14274				classes: value,
14275				add: true
14276			} ) );
14277		}
14278	},
14279
14280	_setOptionDisabled: function( value ) {
14281		this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
14282
14283		// If the widget is becoming disabled, then nothing is interactive
14284		if ( value ) {
14285			this._removeClass( this.hoverable, null, "ui-state-hover" );
14286			this._removeClass( this.focusable, null, "ui-state-focus" );
14287		}
14288	},
14289
14290	enable: function() {
14291		return this._setOptions( { disabled: false } );
14292	},
14293
14294	disable: function() {
14295		return this._setOptions( { disabled: true } );
14296	},
14297
14298	_classes: function( options ) {
14299		var full = [];
14300		var that = this;
14301
14302		options = $.extend( {
14303			element: this.element,
14304			classes: this.options.classes || {}
14305		}, options );
14306
14307		function bindRemoveEvent() {
14308			var nodesToBind = [];
14309
14310			options.element.each( function( _, element ) {
14311				var isTracked = $.map( that.classesElementLookup, function( elements ) {
14312					return elements;
14313				} )
14314					.some( function( elements ) {
14315						return elements.is( element );
14316					} );
14317
14318				if ( !isTracked ) {
14319					nodesToBind.push( element );
14320				}
14321			} );
14322
14323			that._on( $( nodesToBind ), {
14324				remove: "_untrackClassesElement"
14325			} );
14326		}
14327
14328		function processClassString( classes, checkOption ) {
14329			var current, i;
14330			for ( i = 0; i < classes.length; i++ ) {
14331				current = that.classesElementLookup[ classes[ i ] ] || $();
14332				if ( options.add ) {
14333					bindRemoveEvent();
14334					current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );
14335				} else {
14336					current = $( current.not( options.element ).get() );
14337				}
14338				that.classesElementLookup[ classes[ i ] ] = current;
14339				full.push( classes[ i ] );
14340				if ( checkOption && options.classes[ classes[ i ] ] ) {
14341					full.push( options.classes[ classes[ i ] ] );
14342				}
14343			}
14344		}
14345
14346		if ( options.keys ) {
14347			processClassString( options.keys.match( /\S+/g ) || [], true );
14348		}
14349		if ( options.extra ) {
14350			processClassString( options.extra.match( /\S+/g ) || [] );
14351		}
14352
14353		return full.join( " " );
14354	},
14355
14356	_untrackClassesElement: function( event ) {
14357		var that = this;
14358		$.each( that.classesElementLookup, function( key, value ) {
14359			if ( $.inArray( event.target, value ) !== -1 ) {
14360				that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
14361			}
14362		} );
14363
14364		this._off( $( event.target ) );
14365	},
14366
14367	_removeClass: function( element, keys, extra ) {
14368		return this._toggleClass( element, keys, extra, false );
14369	},
14370
14371	_addClass: function( element, keys, extra ) {
14372		return this._toggleClass( element, keys, extra, true );
14373	},
14374
14375	_toggleClass: function( element, keys, extra, add ) {
14376		add = ( typeof add === "boolean" ) ? add : extra;
14377		var shift = ( typeof element === "string" || element === null ),
14378			options = {
14379				extra: shift ? keys : extra,
14380				keys: shift ? element : keys,
14381				element: shift ? this.element : element,
14382				add: add
14383			};
14384		options.element.toggleClass( this._classes( options ), add );
14385		return this;
14386	},
14387
14388	_on: function( suppressDisabledCheck, element, handlers ) {
14389		var delegateElement;
14390		var instance = this;
14391
14392		// No suppressDisabledCheck flag, shuffle arguments
14393		if ( typeof suppressDisabledCheck !== "boolean" ) {
14394			handlers = element;
14395			element = suppressDisabledCheck;
14396			suppressDisabledCheck = false;
14397		}
14398
14399		// No element argument, shuffle and use this.element
14400		if ( !handlers ) {
14401			handlers = element;
14402			element = this.element;
14403			delegateElement = this.widget();
14404		} else {
14405			element = delegateElement = $( element );
14406			this.bindings = this.bindings.add( element );
14407		}
14408
14409		$.each( handlers, function( event, handler ) {
14410			function handlerProxy() {
14411
14412				// Allow widgets to customize the disabled handling
14413				// - disabled as an array instead of boolean
14414				// - disabled class as method for disabling individual parts
14415				if ( !suppressDisabledCheck &&
14416						( instance.options.disabled === true ||
14417						$( this ).hasClass( "ui-state-disabled" ) ) ) {
14418					return;
14419				}
14420				return ( typeof handler === "string" ? instance[ handler ] : handler )
14421					.apply( instance, arguments );
14422			}
14423
14424			// Copy the guid so direct unbinding works
14425			if ( typeof handler !== "string" ) {
14426				handlerProxy.guid = handler.guid =
14427					handler.guid || handlerProxy.guid || $.guid++;
14428			}
14429
14430			var match = event.match( /^([\w:-]*)\s*(.*)$/ );
14431			var eventName = match[ 1 ] + instance.eventNamespace;
14432			var selector = match[ 2 ];
14433
14434			if ( selector ) {
14435				delegateElement.on( eventName, selector, handlerProxy );
14436			} else {
14437				element.on( eventName, handlerProxy );
14438			}
14439		} );
14440	},
14441
14442	_off: function( element, eventName ) {
14443		eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
14444			this.eventNamespace;
14445		element.off( eventName );
14446
14447		// Clear the stack to avoid memory leaks (#10056)
14448		this.bindings = $( this.bindings.not( element ).get() );
14449		this.focusable = $( this.focusable.not( element ).get() );
14450		this.hoverable = $( this.hoverable.not( element ).get() );
14451	},
14452
14453	_delay: function( handler, delay ) {
14454		function handlerProxy() {
14455			return ( typeof handler === "string" ? instance[ handler ] : handler )
14456				.apply( instance, arguments );
14457		}
14458		var instance = this;
14459		return setTimeout( handlerProxy, delay || 0 );
14460	},
14461
14462	_hoverable: function( element ) {
14463		this.hoverable = this.hoverable.add( element );
14464		this._on( element, {
14465			mouseenter: function( event ) {
14466				this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
14467			},
14468			mouseleave: function( event ) {
14469				this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
14470			}
14471		} );
14472	},
14473
14474	_focusable: function( element ) {
14475		this.focusable = this.focusable.add( element );
14476		this._on( element, {
14477			focusin: function( event ) {
14478				this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
14479			},
14480			focusout: function( event ) {
14481				this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
14482			}
14483		} );
14484	},
14485
14486	_trigger: function( type, event, data ) {
14487		var prop, orig;
14488		var callback = this.options[ type ];
14489
14490		data = data || {};
14491		event = $.Event( event );
14492		event.type = ( type === this.widgetEventPrefix ?
14493			type :
14494			this.widgetEventPrefix + type ).toLowerCase();
14495
14496		// The original event may come from any element
14497		// so we need to reset the target on the new event
14498		event.target = this.element[ 0 ];
14499
14500		// Copy original event properties over to the new event
14501		orig = event.originalEvent;
14502		if ( orig ) {
14503			for ( prop in orig ) {
14504				if ( !( prop in event ) ) {
14505					event[ prop ] = orig[ prop ];
14506				}
14507			}
14508		}
14509
14510		this.element.trigger( event, data );
14511		return !( typeof callback === "function" &&
14512			callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
14513			event.isDefaultPrevented() );
14514	}
14515};
14516
14517$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
14518	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
14519		if ( typeof options === "string" ) {
14520			options = { effect: options };
14521		}
14522
14523		var hasOptions;
14524		var effectName = !options ?
14525			method :
14526			options === true || typeof options === "number" ?
14527				defaultEffect :
14528				options.effect || defaultEffect;
14529
14530		options = options || {};
14531		if ( typeof options === "number" ) {
14532			options = { duration: options };
14533		} else if ( options === true ) {
14534			options = {};
14535		}
14536
14537		hasOptions = !$.isEmptyObject( options );
14538		options.complete = callback;
14539
14540		if ( options.delay ) {
14541			element.delay( options.delay );
14542		}
14543
14544		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
14545			element[ method ]( options );
14546		} else if ( effectName !== method && element[ effectName ] ) {
14547			element[ effectName ]( options.duration, options.easing, callback );
14548		} else {
14549			element.queue( function( next ) {
14550				$( this )[ method ]();
14551				if ( callback ) {
14552					callback.call( element[ 0 ] );
14553				}
14554				next();
14555			} );
14556		}
14557	};
14558} );
14559
14560var widget = $.widget;
14561
14562
14563/*!
14564 * jQuery UI 
14564Accordion 1.13.1
14565 * http://jqueryui.com
14566 *
14567 * Copyright jQuery Foundation and other contributors
14568 * Released under the MIT license.
14569 * http://jquery.org/license
14570 */
14571
14572//>>label: Accordion
14573//>>group: Widgets
14574/* eslint-disable max-len */
14575//>>description: Displays collapsible content panels for presenting information in a limited amount of space.
14576/* eslint-enable max-len */
14577//>>docs: http://api.jqueryui.com/accordion/
14578//>>demos: http://jqueryui.com/accordion/
14579//>>css.structure: ../../themes/base/core.css
14580//>>css.structure: ../../themes/base/accordion.css
14581//>>css.theme: ../../themes/base/theme.css
14582
14583
14584var widgetsAccordion = $.widget( "ui.accordion", {
14585	version: "1.13.1
vendor: 15,900 bytes, lines 14585-15196
14585",
14586	options: {
14587		active: 0,
14588		animate: {},
14589		classes: {
14590			"ui-accordion-header": "ui-corner-top",
14591			"ui-accordion-header-collapsed": "ui-corner-all",
14592			"ui-accordion-content": "ui-corner-bottom"
14593		},
14594		collapsible: false,
14595		event: "click",
14596		header: function( elem ) {
14597			return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() );
14598		},
14599		heightStyle: "auto",
14600		icons: {
14601			activeHeader: "ui-icon-triangle-1-s",
14602			header: "ui-icon-triangle-1-e"
14603		},
14604
14605		// Callbacks
14606		activate: null,
14607		beforeActivate: null
14608	},
14609
14610	hideProps: {
14611		borderTopWidth: "hide",
14612		borderBottomWidth: "hide",
14613		paddingTop: "hide",
14614		paddingBottom: "hide",
14615		height: "hide"
14616	},
14617
14618	showProps: {
14619		borderTopWidth: "show",
14620		borderBottomWidth: "show",
14621		paddingTop: "show",
14622		paddingBottom: "show",
14623		height: "show"
14624	},
14625
14626	_create: function() {
14627		var options = this.options;
14628
14629		this.prevShow = this.prevHide = $();
14630		this._addClass( "ui-accordion", "ui-widget ui-helper-reset" );
14631		this.element.attr( "role", "tablist" );
14632
14633		// Don't allow collapsible: false and active: false / null
14634		if ( !options.collapsible && ( options.active === false || options.active == null ) ) {
14635			options.active = 0;
14636		}
14637
14638		this._processPanels();
14639
14640		// handle negative values
14641		if ( options.active < 0 ) {
14642			options.active += this.headers.length;
14643		}
14644		this._refresh();
14645	},
14646
14647	_getCreateEventData: function() {
14648		return {
14649			header: this.active,
14650			panel: !this.active.length ? $() : this.active.next()
14651		};
14652	},
14653
14654	_createIcons: function() {
14655		var icon, children,
14656			icons = this.options.icons;
14657
14658		if ( icons ) {
14659			icon = $( "<span>" );
14660			this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header );
14661			icon.prependTo( this.headers );
14662			children = this.active.children( ".ui-accordion-header-icon" );
14663			this._removeClass( children, icons.header )
14664				._addClass( children, null, icons.activeHeader )
14665				._addClass( this.headers, "ui-accordion-icons" );
14666		}
14667	},
14668
14669	_destroyIcons: function() {
14670		this._removeClass( this.headers, "ui-accordion-icons" );
14671		this.headers.children( ".ui-accordion-header-icon" ).remove();
14672	},
14673
14674	_destroy: function() {
14675		var contents;
14676
14677		// Clean up main element
14678		this.element.removeAttr( "role" );
14679
14680		// Clean up headers
14681		this.headers
14682			.removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" )
14683			.removeUniqueId();
14684
14685		this._destroyIcons();
14686
14687		// Clean up content panels
14688		contents = this.headers.next()
14689			.css( "display", "" )
14690			.removeAttr( "role aria-hidden aria-labelledby" )
14691			.removeUniqueId();
14692
14693		if ( this.options.heightStyle !== "content" ) {
14694			contents.css( "height", "" );
14695		}
14696	},
14697
14698	_setOption: function( key, value ) {
14699		if ( key === "active" ) {
14700
14701			// _activate() will handle invalid values and update this.options
14702			this._activate( value );
14703			return;
14704		}
14705
14706		if ( key === "event" ) {
14707			if ( this.options.event ) {
14708				this._off( this.headers, this.options.event );
14709			}
14710			this._setupEvents( value );
14711		}
14712
14713		this._super( key, value );
14714
14715		// Setting collapsible: false while collapsed; open first panel
14716		if ( key === "collapsible" && !value && this.options.active === false ) {
14717			this._activate( 0 );
14718		}
14719
14720		if ( key === "icons" ) {
14721			this._destroyIcons();
14722			if ( value ) {
14723				this._createIcons();
14724			}
14725		}
14726	},
14727
14728	_setOptionDisabled: function( value ) {
14729		this._super( value );
14730
14731		this.element.attr( "aria-disabled", value );
14732
14733		// Support: IE8 Only
14734		// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE
14735		// so we need to add the disabled class to the headers and panels
14736		this._toggleClass( null, "ui-state-disabled", !!value );
14737		this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled",
14738			!!value );
14739	},
14740
14741	_keydown: function( event ) {
14742		if ( event.altKey || event.ctrlKey ) {
14743			return;
14744		}
14745
14746		var keyCode = $.ui.keyCode,
14747			length = this.headers.length,
14748			currentIndex = this.headers.index( event.target ),
14749			toFocus = false;
14750
14751		switch ( event.keyCode ) {
14752		case keyCode.RIGHT:
14753		case keyCode.DOWN:
14754			toFocus = this.headers[ ( currentIndex + 1 ) % length ];
14755			break;
14756		case keyCode.LEFT:
14757		case keyCode.UP:
14758			toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
14759			break;
14760		case keyCode.SPACE:
14761		case keyCode.ENTER:
14762			this._eventHandler( event );
14763			break;
14764		case keyCode.HOME:
14765			toFocus = this.headers[ 0 ];
14766			break;
14767		case keyCode.END:
14768			toFocus = this.headers[ length - 1 ];
14769			break;
14770		}
14771
14772		if ( toFocus ) {
14773			$( event.target ).attr( "tabIndex", -1 );
14774			$( toFocus ).attr( "tabIndex", 0 );
14775			$( toFocus ).trigger( "focus" );
14776			event.preventDefault();
14777		}
14778	},
14779
14780	_panelKeyDown: function( event ) {
14781		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
14782			$( event.currentTarget ).prev().trigger( "focus" );
14783		}
14784	},
14785
14786	refresh: function() {
14787		var options = this.options;
14788		this._processPanels();
14789
14790		// Was collapsed or no panel
14791		if ( ( options.active === false && options.collapsible === true ) ||
14792				!this.headers.length ) {
14793			options.active = false;
14794			this.active = $();
14795
14796		// active false only when collapsible is true
14797		} else if ( options.active === false ) {
14798			this._activate( 0 );
14799
14800		// was active, but active panel is gone
14801		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
14802
14803			// all remaining panel are disabled
14804			if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) {
14805				options.active = false;
14806				this.active = $();
14807
14808			// activate previous panel
14809			} else {
14810				this._activate( Math.max( 0, options.active - 1 ) );
14811			}
14812
14813		// was active, active panel still exists
14814		} else {
14815
14816			// make sure active index is correct
14817			options.active = this.headers.index( this.active );
14818		}
14819
14820		this._destroyIcons();
14821
14822		this._refresh();
14823	},
14824
14825	_processPanels: function() {
14826		var prevHeaders = this.headers,
14827			prevPanels = this.panels;
14828
14829		if ( typeof this.options.header === "function" ) {
14830			this.headers = this.options.header( this.element );
14831		} else {
14832			this.headers = this.element.find( this.options.header );
14833		}
14834		this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed",
14835			"ui-state-default" );
14836
14837		this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide();
14838		this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" );
14839
14840		// Avoid memory leaks (#10056)
14841		if ( prevPanels ) {
14842			this._off( prevHeaders.not( this.headers ) );
14843			this._off( prevPanels.not( this.panels ) );
14844		}
14845	},
14846
14847	_refresh: function() {
14848		var maxHeight,
14849			options = this.options,
14850			heightStyle = options.heightStyle,
14851			parent = this.element.parent();
14852
14853		this.active = this._findActive( options.active );
14854		this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" )
14855			._removeClass( this.active, "ui-accordion-header-collapsed" );
14856		this._addClass( this.active.next(), "ui-accordion-content-active" );
14857		this.active.next().show();
14858
14859		this.headers
14860			.attr( "role", "tab" )
14861			.each( function() {
14862				var header = $( this ),
14863					headerId = header.uniqueId().attr( "id" ),
14864					panel = header.next(),
14865					panelId = panel.uniqueId().attr( "id" );
14866				header.attr( "aria-controls", panelId );
14867				panel.attr( "aria-labelledby", headerId );
14868			} )
14869			.next()
14870				.attr( "role", "tabpanel" );
14871
14872		this.headers
14873			.not( this.active )
14874				.attr( {
14875					"aria-selected": "false",
14876					"aria-expanded": "false",
14877					tabIndex: -1
14878				} )
14879				.next()
14880					.attr( {
14881						"aria-hidden": "true"
14882					} )
14883					.hide();
14884
14885		// Make sure at least one header is in the tab order
14886		if ( !this.active.length ) {
14887			this.headers.eq( 0 ).attr( "tabIndex", 0 );
14888		} else {
14889			this.active.attr( {
14890				"aria-selected": "true",
14891				"aria-expanded": "true",
14892				tabIndex: 0
14893			} )
14894				.next()
14895					.attr( {
14896						"aria-hidden": "false"
14897					} );
14898		}
14899
14900		this._createIcons();
14901
14902		this._setupEvents( options.event );
14903
14904		if ( heightStyle === "fill" ) {
14905			maxHeight = parent.height();
14906			this.element.siblings( ":visible" ).each( function() {
14907				var elem = $( this ),
14908					position = elem.css( "position" );
14909
14910				if ( position === "absolute" || position === "fixed" ) {
14911					return;
14912				}
14913				maxHeight -= elem.outerHeight( true );
14914			} );
14915
14916			this.headers.each( function() {
14917				maxHeight -= $( this ).outerHeight( true );
14918			} );
14919
14920			this.headers.next()
14921				.each( function() {
14922					$( this ).height( Math.max( 0, maxHeight -
14923						$( this ).innerHeight() + $( this ).height() ) );
14924				} )
14925				.css( "overflow", "auto" );
14926		} else if ( heightStyle === "auto" ) {
14927			maxHeight = 0;
14928			this.headers.next()
14929				.each( function() {
14930					var isVisible = $( this ).is( ":visible" );
14931					if ( !isVisible ) {
14932						$( this ).show();
14933					}
14934					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
14935					if ( !isVisible ) {
14936						$( this ).hide();
14937					}
14938				} )
14939				.height( maxHeight );
14940		}
14941	},
14942
14943	_activate: function( index ) {
14944		var active = this._findActive( index )[ 0 ];
14945
14946		// Trying to activate the already active panel
14947		if ( active === this.active[ 0 ] ) {
14948			return;
14949		}
14950
14951		// Trying to collapse, simulate a click on the currently active header
14952		active = active || this.active[ 0 ];
14953
14954		this._eventHandler( {
14955			target: active,
14956			currentTarget: active,
14957			preventDefault: $.noop
14958		} );
14959	},
14960
14961	_findActive: function( selector ) {
14962		return typeof selector === "number" ? this.headers.eq( selector ) : $();
14963	},
14964
14965	_setupEvents: function( event ) {
14966		var events = {
14967			keydown: "_keydown"
14968		};
14969		if ( event ) {
14970			$.each( event.split( " " ), function( index, eventName ) {
14971				events[ eventName ] = "_eventHandler";
14972			} );
14973		}
14974
14975		this._off( this.headers.add( this.headers.next() ) );
14976		this._on( this.headers, events );
14977		this._on( this.headers.next(), { keydown: "_panelKeyDown" } );
14978		this._hoverable( this.headers );
14979		this._focusable( this.headers );
14980	},
14981
14982	_eventHandler: function( event ) {
14983		var activeChildren, clickedChildren,
14984			options = this.options,
14985			active = this.active,
14986			clicked = $( event.currentTarget ),
14987			clickedIsActive = clicked[ 0 ] === active[ 0 ],
14988			collapsing = clickedIsActive && options.collapsible,
14989			toShow = collapsing ? $() : clicked.next(),
14990			toHide = active.next(),
14991			eventData = {
14992				oldHeader: active,
14993				oldPanel: toHide,
14994				newHeader: collapsing ? $() : clicked,
14995				newPanel: toShow
14996			};
14997
14998		event.preventDefault();
14999
15000		if (
15001
15002				// click on active header, but not collapsible
15003				( clickedIsActive && !options.collapsible ) ||
15004
15005				// allow canceling activation
15006				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
15007			return;
15008		}
15009
15010		options.active = collapsing ? false : this.headers.index( clicked );
15011
15012		// When the call to ._toggle() comes after the class changes
15013		// it causes a very odd bug in IE 8 (see #6720)
15014		this.active = clickedIsActive ? $() : clicked;
15015		this._toggle( eventData );
15016
15017		// Switch classes
15018		// corner classes on the previously active header stay after the animation
15019		this._removeClass( active, "ui-accordion-header-active", "ui-state-active" );
15020		if ( options.icons ) {
15021			activeChildren = active.children( ".ui-accordion-header-icon" );
15022			this._removeClass( activeChildren, null, options.icons.activeHeader )
15023				._addClass( activeChildren, null, options.icons.header );
15024		}
15025
15026		if ( !clickedIsActive ) {
15027			this._removeClass( clicked, "ui-accordion-header-collapsed" )
15028				._addClass( clicked, "ui-accordion-header-active", "ui-state-active" );
15029			if ( options.icons ) {
15030				clickedChildren = clicked.children( ".ui-accordion-header-icon" );
15031				this._removeClass( clickedChildren, null, options.icons.header )
15032					._addClass( clickedChildren, null, options.icons.activeHeader );
15033			}
15034
15035			this._addClass( clicked.next(), "ui-accordion-content-active" );
15036		}
15037	},
15038
15039	_toggle: function( data ) {
15040		var toShow = data.newPanel,
15041			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
15042
15043		// Handle activating a panel during the animation for another activation
15044		this.prevShow.add( this.prevHide ).stop( true, true );
15045		this.prevShow = toShow;
15046		this.prevHide = toHide;
15047
15048		if ( this.options.animate ) {
15049			this._animate( toShow, toHide, data );
15050		} else {
15051			toHide.hide();
15052			toShow.show();
15053			this._toggleComplete( data );
15054		}
15055
15056		toHide.attr( {
15057			"aria-hidden": "true"
15058		} );
15059		toHide.prev().attr( {
15060			"aria-selected": "false",
15061			"aria-expanded": "false"
15062		} );
15063
15064		// if we're switching panels, remove the old header from the tab order
15065		// if we're opening from collapsed state, remove the previous header from the tab order
15066		// if we're collapsing, then keep the collapsing header in the tab order
15067		if ( toShow.length && toHide.length ) {
15068			toHide.prev().attr( {
15069				"tabIndex": -1,
15070				"aria-expanded": "false"
15071			} );
15072		} else if ( toShow.length ) {
15073			this.headers.filter( function() {
15074				return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
15075			} )
15076				.attr( "tabIndex", -1 );
15077		}
15078
15079		toShow
15080			.attr( "aria-hidden", "false" )
15081			.prev()
15082				.attr( {
15083					"aria-selected": "true",
15084					"aria-expanded": "true",
15085					tabIndex: 0
15086				} );
15087	},
15088
15089	_animate: function( toShow, toHide, data ) {
15090		var total, easing, duration,
15091			that = this,
15092			adjust = 0,
15093			boxSizing = toShow.css( "box-sizing" ),
15094			down = toShow.length &&
15095				( !toHide.length || ( toShow.index() < toHide.index() ) ),
15096			animate = this.options.animate || {},
15097			options = down && animate.down || animate,
15098			complete = function() {
15099				that._toggleComplete( data );
15100			};
15101
15102		if ( typeof options === "number" ) {
15103			duration = options;
15104		}
15105		if ( typeof options === "string" ) {
15106			easing = options;
15107		}
15108
15109		// fall back from options to animation in case of partial down settings
15110		easing = easing || options.easing || animate.easing;
15111		duration = duration || options.duration || animate.duration;
15112
15113		if ( !toHide.length ) {
15114			return toShow.animate( this.showProps, duration, easing, complete );
15115		}
15116		if ( !toShow.length ) {
15117			return toHide.animate( this.hideProps, duration, easing, complete );
15118		}
15119
15120		total = toShow.show().outerHeight();
15121		toHide.animate( this.hideProps, {
15122			duration: duration,
15123			easing: easing,
15124			step: function( now, fx ) {
15125				fx.now = Math.round( now );
15126			}
15127		} );
15128		toShow
15129			.hide()
15130			.animate( this.showProps, {
15131				duration: duration,
15132				easing: easing,
15133				complete: complete,
15134				step: function( now, fx ) {
15135					fx.now = Math.round( now );
15136					if ( fx.prop !== "height" ) {
15137						if ( boxSizing === "content-box" ) {
15138							adjust += fx.now;
15139						}
15140					} else if ( that.options.heightStyle !== "content" ) {
15141						fx.now = Math.round( total - toHide.outerHeight() - adjust );
15142						adjust = 0;
15143					}
15144				}
15145			} );
15146	},
15147
15148	_toggleComplete: function( data ) {
15149		var toHide = data.oldPanel,
15150			prev = toHide.prev();
15151
15152		this._removeClass( toHide, "ui-accordion-content-active" );
15153		this._removeClass( prev, "ui-accordion-header-active" )
15154			._addClass( prev, "ui-accordion-header-collapsed" );
15155
15156		// Work around for rendering bug in IE (#5421)
15157		if ( toHide.length ) {
15158			toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
15159		}
15160		this._trigger( "activate", null, data );
15161	}
15162} );
15163
15164
15165
15166var safeActiveElement = $.ui.safeActiveElement = function( document ) {
15167	var activeElement;
15168
15169	// Support: IE 9 only
15170	// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
15171	try {
15172		activeElement = document.activeElement;
15173	} catch ( error ) {
15174		activeElement = document.body;
15175	}
15176
15177	// Support: IE 9 - 11 only
15178	// IE may return null instead of an element
15179	// Interestingly, this only seems to occur when NOT in an iframe
15180	if ( !activeElement ) {
15181		activeElement = document.body;
15182	}
15183
15184	// Support: IE 11 only
15185	// IE11 returns a seemingly empty object in some cases when accessing
15186	// document.activeElement from an <iframe>
15187	if ( !activeElement.nodeName ) {
15188		activeElement = document.body;
15189	}
15190
15191	return activeElement;
15192};
15193
15194
15195/*!
15196 * jQuery UI Menu 1.13.
151961
15197 * http://jqueryui.com
15198 *
15199 * Copyright jQuery Foundation and other contributors
15200 * Released under the MIT license.
15201 * http://jquery.org/license
15202 */
15203
15204//>>label: Menu
15205//>>group: Widgets
15206//>>description: Creates nestable menus.
15207//>>docs: http://api.jqueryui.com/menu/
15208//>>demos: http://jqueryui.com/menu/
15209//>>css.structure: ../../themes/base/core.css
15210//>>css.structure: ../../themes/base/menu.css
15211//>>css.theme: ../../themes/base/theme.css
15212
15213
15214var widgetsMenu = $.widget( "ui.menu", {
15215	version: "1.13.1
vendor: 2,668 bytes, lines 15215-15317
15215",
15216	defaultElement: "<ul>",
15217	delay: 300,
15218	options: {
15219		icons: {
15220			submenu: "ui-icon-caret-1-e"
15221		},
15222		items: "> *",
15223		menus: "ul",
15224		position: {
15225			my: "left top",
15226			at: "right top"
15227		},
15228		role: "menu",
15229
15230		// Callbacks
15231		blur: null,
15232		focus: null,
15233		select: null
15234	},
15235
15236	_create: function() {
15237		this.activeMenu = this.element;
15238
15239		// Flag used to prevent firing of the click handler
15240		// as the event bubbles up through nested menus
15241		this.mouseHandled = false;
15242		this.lastMousePosition = { x: null, y: null };
15243		this.element
15244			.uniqueId()
15245			.attr( {
15246				role: this.options.role,
15247				tabIndex: 0
15248			} );
15249
15250		this._addClass( "ui-menu", "ui-widget ui-widget-content" );
15251		this._on( {
15252
15253			// Prevent focus from sticking to links inside menu after clicking
15254			// them (focus should always stay on UL during navigation).
15255			"mousedown .ui-menu-item": function( event ) {
15256				event.preventDefault();
15257
15258				this._activateItem( event );
15259			},
15260			"click .ui-menu-item": function( event ) {
15261				var target = $( event.target );
15262				var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
15263				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
15264					this.select( event );
15265
15266					// Only set the mouseHandled flag if the event will bubble, see #9469.
15267					if ( !event.isPropagationStopped() ) {
15268						this.mouseHandled = true;
15269					}
15270
15271					// Open submenu on click
15272					if ( target.has( ".ui-menu" ).length ) {
15273						this.expand( event );
15274					} else if ( !this.element.is( ":focus" ) &&
15275							active.closest( ".ui-menu" ).length ) {
15276
15277						// Redirect focus to the menu
15278						this.element.trigger( "focus", [ true ] );
15279
15280						// If the active item is on the top level, let it stay active.
15281						// Otherwise, blur the active item since it is no longer visible.
15282						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
15283							clearTimeout( this.timer );
15284						}
15285					}
15286				}
15287			},
15288			"mouseenter .ui-menu-item": "_activateItem",
15289			"mousemove .ui-menu-item": "_activateItem",
15290			mouseleave: "collapseAll",
15291			"mouseleave .ui-menu": "collapseAll",
15292			focus: function( event, keepActiveItem ) {
15293
15294				// If there's already an active item, keep it active
15295				// If not, activate the first item
15296				var item = this.active || this._menuItems().first();
15297
15298				if ( !keepActiveItem ) {
15299					this.focus( event, item );
15300				}
15301			},
15302			blur: function( event ) {
15303				this._delay( function() {
15304					var notContained = !$.contains(
15305						this.element[ 0 ],
15306						$.ui.safeActiveElement( this.document[ 0 ] )
15307					);
15308					if ( notContained ) {
15309						this.collapseAll( event );
15310					}
15311				} );
15312			},
15313			keydown: "_keydown"
15314		} );
15315
15316		this.refresh();
15317
vendor: 3,056 bytes, lines 15318-15434
15318		// Clicks outside of a menu collapse any open menus
15319		this._on( this.document, {
15320			click: function( event ) {
15321				if ( this._closeOnDocumentClick( event ) ) {
15322					this.collapseAll( event, true );
15323				}
15324
15325				// Reset the mouseHandled flag
15326				this.mouseHandled = false;
15327			}
15328		} );
15329	},
15330
15331	_activateItem: function( event ) {
15332
15333		// Ignore mouse events while typeahead is active, see #10458.
15334		// Prevents focusing the wrong item when typeahead causes a scroll while the mouse
15335		// is over an item in the menu
15336		if ( this.previousFilter ) {
15337			return;
15338		}
15339
15340		// If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356)
15341		if ( event.clientX === this.lastMousePosition.x &&
15342				event.clientY === this.lastMousePosition.y ) {
15343			return;
15344		}
15345
15346		this.lastMousePosition = {
15347			x: event.clientX,
15348			y: event.clientY
15349		};
15350
15351		var actualTarget = $( event.target ).closest( ".ui-menu-item" ),
15352			target = $( event.currentTarget );
15353
15354		// Ignore bubbled events on parent items, see #11641
15355		if ( actualTarget[ 0 ] !== target[ 0 ] ) {
15356			return;
15357		}
15358
15359		// If the item is already active, there's nothing to do
15360		if ( target.is( ".ui-state-active" ) ) {
15361			return;
15362		}
15363
15364		// Remove ui-state-active class from siblings of the newly focused menu item
15365		// to avoid a jump caused by adjacent elements both having a class with a border
15366		this._removeClass( target.siblings().children( ".ui-state-active" ),
15367			null, "ui-state-active" );
15368		this.focus( event, target );
15369	},
15370
15371	_destroy: function() {
15372		var items = this.element.find( ".ui-menu-item" )
15373				.removeAttr( "role aria-disabled" ),
15374			submenus = items.children( ".ui-menu-item-wrapper" )
15375				.removeUniqueId()
15376				.removeAttr( "tabIndex role aria-haspopup" );
15377
15378		// Destroy (sub)menus
15379		this.element
15380			.removeAttr( "aria-activedescendant" )
15381			.find( ".ui-menu" ).addBack()
15382				.removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +
15383					"tabIndex" )
15384				.removeUniqueId()
15385				.show();
15386
15387		submenus.children().each( function() {
15388			var elem = $( this );
15389			if ( elem.data( "ui-menu-submenu-caret" ) ) {
15390				elem.remove();
15391			}
15392		} );
15393	},
15394
15395	_keydown: function( event ) {
15396		var match, prev, character, skip,
15397			preventDefault = true;
15398
15399		switch ( event.keyCode ) {
15400		case $.ui.keyCode.PAGE_UP:
15401			this.previousPage( event );
15402			break;
15403		case $.ui.keyCode.PAGE_DOWN:
15404			this.nextPage( event );
15405			break;
15406		case $.ui.keyCode.HOME:
15407			this._move( "first", "first", event );
15408			break;
15409		case $.ui.keyCode.END:
15410			this._move( "last", "last", event );
15411			break;
15412		case $.ui.keyCode.UP:
15413			this.previous( event );
15414			break;
15415		case $.ui.keyCode.DOWN:
15416			this.next( event );
15417			break;
15418		case $.ui.keyCode.LEFT:
15419			this.collapse( event );
15420			break;
15421		case $.ui.keyCode.RIGHT:
15422			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
15423				this.expand( event );
15424			}
15425			break;
15426		case $.ui.keyCode.ENTER:
15427		case $.ui.keyCode.SPACE:
15428			this._activate( event );
15429			break;
15430		case $.ui.keyCode.ESCAPE:
15431			this.collapse( event );
15432			break;
15433		default:
15434			preventDefault = false;
vendor: 6,930 bytes, lines 15435-15683
15435			prev = this.previousFilter || "";
15436			skip = false;
15437
15438			// Support number pad values
15439			character = event.keyCode >= 96 && event.keyCode <= 105 ?
15440				( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );
15441
15442			clearTimeout( this.filterTimer );
15443
15444			if ( character === prev ) {
15445				skip = true;
15446			} else {
15447				character = prev + character;
15448			}
15449
15450			match = this._filterMenuItems( character );
15451			match = skip && match.index( this.active.next() ) !== -1 ?
15452				this.active.nextAll( ".ui-menu-item" ) :
15453				match;
15454
15455			// If no matches on the current filter, reset to the last character pressed
15456			// to move down the menu to the first item that starts with that character
15457			if ( !match.length ) {
15458				character = String.fromCharCode( event.keyCode );
15459				match = this._filterMenuItems( character );
15460			}
15461
15462			if ( match.length ) {
15463				this.focus( event, match );
15464				this.previousFilter = character;
15465				this.filterTimer = this._delay( function() {
15466					delete this.previousFilter;
15467				}, 1000 );
15468			} else {
15469				delete this.previousFilter;
15470			}
15471		}
15472
15473		if ( preventDefault ) {
15474			event.preventDefault();
15475		}
15476	},
15477
15478	_activate: function( event ) {
15479		if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
15480			if ( this.active.children( "[aria-haspopup='true']" ).length ) {
15481				this.expand( event );
15482			} else {
15483				this.select( event );
15484			}
15485		}
15486	},
15487
15488	refresh: function() {
15489		var menus, items, newSubmenus, newItems, newWrappers,
15490			that = this,
15491			icon = this.options.icons.submenu,
15492			submenus = this.element.find( this.options.menus );
15493
15494		this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length );
15495
15496		// Initialize nested menus
15497		newSubmenus = submenus.filter( ":not(.ui-menu)" )
15498			.hide()
15499			.attr( {
15500				role: this.options.role,
15501				"aria-hidden": "true",
15502				"aria-expanded": "false"
15503			} )
15504			.each( function() {
15505				var menu = $( this ),
15506					item = menu.prev(),
15507					submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true );
15508
15509				that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon );
15510				item
15511					.attr( "aria-haspopup", "true" )
15512					.prepend( submenuCaret );
15513				menu.attr( "aria-labelledby", item.attr( "id" ) );
15514			} );
15515
15516		this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" );
15517
15518		menus = submenus.add( this.element );
15519		items = menus.find( this.options.items );
15520
15521		// Initialize menu-items containing spaces and/or dashes only as dividers
15522		items.not( ".ui-menu-item" ).each( function() {
15523			var item = $( this );
15524			if ( that._isDivider( item ) ) {
15525				that._addClass( item, "ui-menu-divider", "ui-widget-content" );
15526			}
15527		} );
15528
15529		// Don't refresh list items that are already adapted
15530		newItems = items.not( ".ui-menu-item, .ui-menu-divider" );
15531		newWrappers = newItems.children()
15532			.not( ".ui-menu" )
15533				.uniqueId()
15534				.attr( {
15535					tabIndex: -1,
15536					role: this._itemRole()
15537				} );
15538		this._addClass( newItems, "ui-menu-item" )
15539			._addClass( newWrappers, "ui-menu-item-wrapper" );
15540
15541		// Add aria-disabled attribute to any disabled menu item
15542		items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
15543
15544		// If the active item has been removed, blur the menu
15545		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
15546			this.blur();
15547		}
15548	},
15549
15550	_itemRole: function() {
15551		return {
15552			menu: "menuitem",
15553			listbox: "option"
15554		}[ this.options.role ];
15555	},
15556
15557	_setOption: function( key, value ) {
15558		if ( key === "icons" ) {
15559			var icons = this.element.find( ".ui-menu-icon" );
15560			this._removeClass( icons, null, this.options.icons.submenu )
15561				._addClass( icons, null, value.submenu );
15562		}
15563		this._super( key, value );
15564	},
15565
15566	_setOptionDisabled: function( value ) {
15567		this._super( value );
15568
15569		this.element.attr( "aria-disabled", String( value ) );
15570		this._toggleClass( null, "ui-state-disabled", !!value );
15571	},
15572
15573	focus: function( event, item ) {
15574		var nested, focused, activeParent;
15575		this.blur( event, event && event.type === "focus" );
15576
15577		this._scrollIntoView( item );
15578
15579		this.active = item.first();
15580
15581		focused = this.active.children( ".ui-menu-item-wrapper" );
15582		this._addClass( focused, null, "ui-state-active" );
15583
15584		// Only update aria-activedescendant if there's a role
15585		// otherwise we assume focus is managed elsewhere
15586		if ( this.options.role ) {
15587			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
15588		}
15589
15590		// Highlight active parent menu item, if any
15591		activeParent = this.active
15592			.parent()
15593				.closest( ".ui-menu-item" )
15594					.children( ".ui-menu-item-wrapper" );
15595		this._addClass( activeParent, null, "ui-state-active" );
15596
15597		if ( event && event.type === "keydown" ) {
15598			this._close();
15599		} else {
15600			this.timer = this._delay( function() {
15601				this._close();
15602			}, this.delay );
15603		}
15604
15605		nested = item.children( ".ui-menu" );
15606		if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
15607			this._startOpening( nested );
15608		}
15609		this.activeMenu = item.parent();
15610
15611		this._trigger( "focus", event, { item: item } );
15612	},
15613
15614	_scrollIntoView: function( item ) {
15615		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
15616		if ( this._hasScroll() ) {
15617			borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
15618			paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
15619			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
15620			scroll = this.activeMenu.scrollTop();
15621			elementHeight = this.activeMenu.height();
15622			itemHeight = item.outerHeight();
15623
15624			if ( offset < 0 ) {
15625				this.activeMenu.scrollTop( scroll + offset );
15626			} else if ( offset + itemHeight > elementHeight ) {
15627				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
15628			}
15629		}
15630	},
15631
15632	blur: function( event, fromFocus ) {
15633		if ( !fromFocus ) {
15634			clearTimeout( this.timer );
15635		}
15636
15637		if ( !this.active ) {
15638			return;
15639		}
15640
15641		this._removeClass( this.active.children( ".ui-menu-item-wrapper" ),
15642			null, "ui-state-active" );
15643
15644		this._trigger( "blur", event, { item: this.active } );
15645		this.active = null;
15646	},
15647
15648	_startOpening: function( submenu ) {
15649		clearTimeout( this.timer );
15650
15651		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
15652		// shift in the submenu position when mousing over the caret icon
15653		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
15654			return;
15655		}
15656
15657		this.timer = this._delay( function() {
15658			this._close();
15659			this._open( submenu );
15660		}, this.delay );
15661	},
15662
15663	_open: function( submenu ) {
15664		var position = $.extend( {
15665			of: this.active
15666		}, this.options.position );
15667
15668		clearTimeout( this.timer );
15669		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
15670			.hide()
15671			.attr( "aria-hidden", "true" );
15672
15673		submenu
15674			.show()
15675			.removeAttr( "aria-hidden" )
15676			.attr( "aria-expanded", "true" )
15677			.position( position );
15678	},
15679
15680	collapseAll: function( event, all ) {
15681		clearTimeout( this.timer );
15682		this.timer = this._delay( function() {
15683
vendor: 5,432 bytes, lines 15684-15887
15684			// If we were passed an event, look for the submenu that contains the event
15685			var currentMenu = all ? this.element :
15686				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
15687
15688			// If we found no valid submenu ancestor, use the main menu to close all
15689			// sub menus anyway
15690			if ( !currentMenu.length ) {
15691				currentMenu = this.element;
15692			}
15693
15694			this._close( currentMenu );
15695
15696			this.blur( event );
15697
15698			// Work around active item staying active after menu is blurred
15699			this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );
15700
15701			this.activeMenu = currentMenu;
15702		}, all ? 0 : this.delay );
15703	},
15704
15705	// With no arguments, closes the currently active menu - if nothing is active
15706	// it closes all menus.  If passed an argument, it will search for menus BELOW
15707	_close: function( startMenu ) {
15708		if ( !startMenu ) {
15709			startMenu = this.active ? this.active.parent() : this.element;
15710		}
15711
15712		startMenu.find( ".ui-menu" )
15713			.hide()
15714			.attr( "aria-hidden", "true" )
15715			.attr( "aria-expanded", "false" );
15716	},
15717
15718	_closeOnDocumentClick: function( event ) {
15719		return !$( event.target ).closest( ".ui-menu" ).length;
15720	},
15721
15722	_isDivider: function( item ) {
15723
15724		// Match hyphen, em dash, en dash
15725		return !/[^\-\u2014\u2013\s]/.test( item.text() );
15726	},
15727
15728	collapse: function( event ) {
15729		var newItem = this.active &&
15730			this.active.parent().closest( ".ui-menu-item", this.element );
15731		if ( newItem && newItem.length ) {
15732			this._close();
15733			this.focus( event, newItem );
15734		}
15735	},
15736
15737	expand: function( event ) {
15738		var newItem = this.active && this._menuItems( this.active.children( ".ui-menu" ) ).first();
15739
15740		if ( newItem && newItem.length ) {
15741			this._open( newItem.parent() );
15742
15743			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
15744			this._delay( function() {
15745				this.focus( event, newItem );
15746			} );
15747		}
15748	},
15749
15750	next: function( event ) {
15751		this._move( "next", "first", event );
15752	},
15753
15754	previous: function( event ) {
15755		this._move( "prev", "last", event );
15756	},
15757
15758	isFirstItem: function() {
15759		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
15760	},
15761
15762	isLastItem: function() {
15763		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
15764	},
15765
15766	_menuItems: function( menu ) {
15767		return ( menu || this.element )
15768			.find( this.options.items )
15769			.filter( ".ui-menu-item" );
15770	},
15771
15772	_move: function( direction, filter, event ) {
15773		var next;
15774		if ( this.active ) {
15775			if ( direction === "first" || direction === "last" ) {
15776				next = this.active
15777					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
15778					.last();
15779			} else {
15780				next = this.active
15781					[ direction + "All" ]( ".ui-menu-item" )
15782					.first();
15783			}
15784		}
15785		if ( !next || !next.length || !this.active ) {
15786			next = this._menuItems( this.activeMenu )[ filter ]();
15787		}
15788
15789		this.focus( event, next );
15790	},
15791
15792	nextPage: function( event ) {
15793		var item, base, height;
15794
15795		if ( !this.active ) {
15796			this.next( event );
15797			return;
15798		}
15799		if ( this.isLastItem() ) {
15800			return;
15801		}
15802		if ( this._hasScroll() ) {
15803			base = this.active.offset().top;
15804			height = this.element.innerHeight();
15805
15806			// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.
15807			if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) {
15808				height += this.element[ 0 ].offsetHeight - this.element.outerHeight();
15809			}
15810
15811			this.active.nextAll( ".ui-menu-item" ).each( function() {
15812				item = $( this );
15813				return item.offset().top - base - height < 0;
15814			} );
15815
15816			this.focus( event, item );
15817		} else {
15818			this.focus( event, this._menuItems( this.activeMenu )
15819				[ !this.active ? "first" : "last" ]() );
15820		}
15821	},
15822
15823	previousPage: function( event ) {
15824		var item, base, height;
15825		if ( !this.active ) {
15826			this.next( event );
15827			return;
15828		}
15829		if ( this.isFirstItem() ) {
15830			return;
15831		}
15832		if ( this._hasScroll() ) {
15833			base = this.active.offset().top;
15834			height = this.element.innerHeight();
15835
15836			// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.
15837			if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) {
15838				height += this.element[ 0 ].offsetHeight - this.element.outerHeight();
15839			}
15840
15841			this.active.prevAll( ".ui-menu-item" ).each( function() {
15842				item = $( this );
15843				return item.offset().top - base + height > 0;
15844			} );
15845
15846			this.focus( event, item );
15847		} else {
15848			this.focus( event, this._menuItems( this.activeMenu ).first() );
15849		}
15850	},
15851
15852	_hasScroll: function() {
15853		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
15854	},
15855
15856	select: function( event ) {
15857
15858		// TODO: It should never be possible to not have an active item at this
15859		// point, but the tests don't trigger mouseenter before click.
15860		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
15861		var ui = { item: this.active };
15862		if ( !this.active.has( ".ui-menu" ).length ) {
15863			this.collapseAll( event, true );
15864		}
15865		this._trigger( "select", event, ui );
15866	},
15867
15868	_filterMenuItems: function( character ) {
15869		var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
15870			regex = new RegExp( "^" + escapedCharacter, "i" );
15871
15872		return this.activeMenu
15873			.find( this.options.items )
15874
15875				// Only match on items, not dividers or other content (#10571)
15876				.filter( ".ui-menu-item" )
15877					.filter( function() {
15878						return regex.test(
15879							String.prototype.trim.call(
15880								$( this ).children( ".ui-menu-item-wrapper" ).text() ) );
15881					} );
15882	}
15883} );
15884
15885
15886/*!
15887 * jQuery UI Autocomplete 1.1
158873.1
15888 * http://jqueryui.com
15889 *
15890 * Copyright jQuery Foundation and other contributors
15891 * Released under the MIT license.
15892 * http://jquery.org/license
15893 */
15894
15895//>>label: Autocomplete
15896//>>group: Widgets
15897//>>description: Lists suggested words as the user is typing.
15898//>>docs: http://api.jqueryui.com/autocomplete/
15899//>>demos: http://jqueryui.com/autocomplete/
15900//>>css.structure: ../../themes/base/core.css
15901//>>css.structure: ../../themes/base/autocomplete.css
15902//>>css.theme: ../../themes/base/theme.css
15903
15904
15905$.widget( "ui.autocomplete", {
15906	version: "1.13.1
vendor: 16,621 bytes, lines 15906-16543
15906",
15907	defaultElement: "<input>",
15908	options: {
15909		appendTo: null,
15910		autoFocus: false,
15911		delay: 300,
15912		minLength: 1,
15913		position: {
15914			my: "left top",
15915			at: "left bottom",
15916			collision: "none"
15917		},
15918		source: null,
15919
15920		// Callbacks
15921		change: null,
15922		close: null,
15923		focus: null,
15924		open: null,
15925		response: null,
15926		search: null,
15927		select: null
15928	},
15929
15930	requestIndex: 0,
15931	pending: 0,
15932	liveRegionTimer: null,
15933
15934	_create: function() {
15935
15936		// Some browsers only repeat keydown events, not keypress events,
15937		// so we use the suppressKeyPress flag to determine if we've already
15938		// handled the keydown event. #7269
15939		// Unfortunately the code for & in keypress is the same as the up arrow,
15940		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
15941		// events when we know the keydown event was used to modify the
15942		// search term. #7799
15943		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
15944			nodeName = this.element[ 0 ].nodeName.toLowerCase(),
15945			isTextarea = nodeName === "textarea",
15946			isInput = nodeName === "input";
15947
15948		// Textareas are always multi-line
15949		// Inputs are always single-line, even if inside a contentEditable element
15950		// IE also treats inputs as contentEditable
15951		// All other element types are determined by whether or not they're contentEditable
15952		this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );
15953
15954		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
15955		this.isNewMenu = true;
15956
15957		this._addClass( "ui-autocomplete-input" );
15958		this.element.attr( "autocomplete", "off" );
15959
15960		this._on( this.element, {
15961			keydown: function( event ) {
15962				if ( this.element.prop( "readOnly" ) ) {
15963					suppressKeyPress = true;
15964					suppressInput = true;
15965					suppressKeyPressRepeat = true;
15966					return;
15967				}
15968
15969				suppressKeyPress = false;
15970				suppressInput = false;
15971				suppressKeyPressRepeat = false;
15972				var keyCode = $.ui.keyCode;
15973				switch ( event.keyCode ) {
15974				case keyCode.PAGE_UP:
15975					suppressKeyPress = true;
15976					this._move( "previousPage", event );
15977					break;
15978				case keyCode.PAGE_DOWN:
15979					suppressKeyPress = true;
15980					this._move( "nextPage", event );
15981					break;
15982				case keyCode.UP:
15983					suppressKeyPress = true;
15984					this._keyEvent( "previous", event );
15985					break;
15986				case keyCode.DOWN:
15987					suppressKeyPress = true;
15988					this._keyEvent( "next", event );
15989					break;
15990				case keyCode.ENTER:
15991
15992					// when menu is open and has focus
15993					if ( this.menu.active ) {
15994
15995						// #6055 - Opera still allows the keypress to occur
15996						// which causes forms to submit
15997						suppressKeyPress = true;
15998						event.preventDefault();
15999						this.menu.select( event );
16000					}
16001					break;
16002				case keyCode.TAB:
16003					if ( this.menu.active ) {
16004						this.menu.select( event );
16005					}
16006					break;
16007				case keyCode.ESCAPE:
16008					if ( this.menu.element.is( ":visible" ) ) {
16009						if ( !this.isMultiLine ) {
16010							this._value( this.term );
16011						}
16012						this.close( event );
16013
16014						// Different browsers have different default behavior for escape
16015						// Single press can mean undo or clear
16016						// Double press in IE means clear the whole form
16017						event.preventDefault();
16018					}
16019					break;
16020				default:
16021					suppressKeyPressRepeat = true;
16022
16023					// search timeout should be triggered before the input value is changed
16024					this._searchTimeout( event );
16025					break;
16026				}
16027			},
16028			keypress: function( event ) {
16029				if ( suppressKeyPress ) {
16030					suppressKeyPress = false;
16031					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
16032						event.preventDefault();
16033					}
16034					return;
16035				}
16036				if ( suppressKeyPressRepeat ) {
16037					return;
16038				}
16039
16040				// Replicate some key handlers to allow them to repeat in Firefox and Opera
16041				var keyCode = $.ui.keyCode;
16042				switch ( event.keyCode ) {
16043				case keyCode.PAGE_UP:
16044					this._move( "previousPage", event );
16045					break;
16046				case keyCode.PAGE_DOWN:
16047					this._move( "nextPage", event );
16048					break;
16049				case keyCode.UP:
16050					this._keyEvent( "previous", event );
16051					break;
16052				case keyCode.DOWN:
16053					this._keyEvent( "next", event );
16054					break;
16055				}
16056			},
16057			input: function( event ) {
16058				if ( suppressInput ) {
16059					suppressInput = false;
16060					event.preventDefault();
16061					return;
16062				}
16063				this._searchTimeout( event );
16064			},
16065			focus: function() {
16066				this.selectedItem = null;
16067				this.previous = this._value();
16068			},
16069			blur: function( event ) {
16070				clearTimeout( this.searching );
16071				this.close( event );
16072				this._change( event );
16073			}
16074		} );
16075
16076		this._initSource();
16077		this.menu = $( "<ul>" )
16078			.appendTo( this._appendTo() )
16079			.menu( {
16080
16081				// disable ARIA support, the live region takes care of that
16082				role: null
16083			} )
16084			.hide()
16085
16086			// Support: IE 11 only, Edge <= 14
16087			// For other browsers, we preventDefault() on the mousedown event
16088			// to keep the dropdown from taking focus from the input. This doesn't
16089			// work for IE/Edge, causing problems with selection and scrolling (#9638)
16090			// Happily, IE and Edge support an "unselectable" attribute that
16091			// prevents an element from receiving focus, exactly what we want here.
16092			.attr( {
16093				"unselectable": "on"
16094			} )
16095			.menu( "instance" );
16096
16097		this._addClass( this.menu.element, "ui-autocomplete", "ui-front" );
16098		this._on( this.menu.element, {
16099			mousedown: function( event ) {
16100
16101				// Prevent moving focus out of the text field
16102				event.preventDefault();
16103			},
16104			menufocus: function( event, ui ) {
16105				var label, item;
16106
16107				// support: Firefox
16108				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
16109				if ( this.isNewMenu ) {
16110					this.isNewMenu = false;
16111					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
16112						this.menu.blur();
16113
16114						this.document.one( "mousemove", function() {
16115							$( event.target ).trigger( event.originalEvent );
16116						} );
16117
16118						return;
16119					}
16120				}
16121
16122				item = ui.item.data( "ui-autocomplete-item" );
16123				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
16124
16125					// use value to match what will end up in the input, if it was a key event
16126					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
16127						this._value( item.value );
16128					}
16129				}
16130
16131				// Announce the value in the liveRegion
16132				label = ui.item.attr( "aria-label" ) || item.value;
16133				if ( label && String.prototype.trim.call( label ).length ) {
16134					clearTimeout( this.liveRegionTimer );
16135					this.liveRegionTimer = this._delay( function() {
16136						this.liveRegion.html( $( "<div>" ).text( label ) );
16137					}, 100 );
16138				}
16139			},
16140			menuselect: function( event, ui ) {
16141				var item = ui.item.data( "ui-autocomplete-item" ),
16142					previous = this.previous;
16143
16144				// Only trigger when focus was lost (click on menu)
16145				if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
16146					this.element.trigger( "focus" );
16147					this.previous = previous;
16148
16149					// #6109 - IE triggers two focus events and the second
16150					// is asynchronous, so we need to reset the previous
16151					// term synchronously and asynchronously :-(
16152					this._delay( function() {
16153						this.previous = previous;
16154						this.selectedItem = item;
16155					} );
16156				}
16157
16158				if ( false !== this._trigger( "select", event, { item: item } ) ) {
16159					this._value( item.value );
16160				}
16161
16162				// reset the term after the select event
16163				// this allows custom select handling to work properly
16164				this.term = this._value();
16165
16166				this.close( event );
16167				this.selectedItem = item;
16168			}
16169		} );
16170
16171		this.liveRegion = $( "<div>", {
16172			role: "status",
16173			"aria-live": "assertive",
16174			"aria-relevant": "additions"
16175		} )
16176			.appendTo( this.document[ 0 ].body );
16177
16178		this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );
16179
16180		// Turning off autocomplete prevents the browser from remembering the
16181		// value when navigating through history, so we re-enable autocomplete
16182		// if the page is unloaded before the widget is destroyed. #7790
16183		this._on( this.window, {
16184			beforeunload: function() {
16185				this.element.removeAttr( "autocomplete" );
16186			}
16187		} );
16188	},
16189
16190	_destroy: function() {
16191		clearTimeout( this.searching );
16192		this.element.removeAttr( "autocomplete" );
16193		this.menu.element.remove();
16194		this.liveRegion.remove();
16195	},
16196
16197	_setOption: function( key, value ) {
16198		this._super( key, value );
16199		if ( key === "source" ) {
16200			this._initSource();
16201		}
16202		if ( key === "appendTo" ) {
16203			this.menu.element.appendTo( this._appendTo() );
16204		}
16205		if ( key === "disabled" && value && this.xhr ) {
16206			this.xhr.abort();
16207		}
16208	},
16209
16210	_isEventTargetInWidget: function( event ) {
16211		var menuElement = this.menu.element[ 0 ];
16212
16213		return event.target === this.element[ 0 ] ||
16214			event.target === menuElement ||
16215			$.contains( menuElement, event.target );
16216	},
16217
16218	_closeOnClickOutside: function( event ) {
16219		if ( !this._isEventTargetInWidget( event ) ) {
16220			this.close();
16221		}
16222	},
16223
16224	_appendTo: function() {
16225		var element = this.options.appendTo;
16226
16227		if ( element ) {
16228			element = element.jquery || element.nodeType ?
16229				$( element ) :
16230				this.document.find( element ).eq( 0 );
16231		}
16232
16233		if ( !element || !element[ 0 ] ) {
16234			element = this.element.closest( ".ui-front, dialog" );
16235		}
16236
16237		if ( !element.length ) {
16238			element = this.document[ 0 ].body;
16239		}
16240
16241		return element;
16242	},
16243
16244	_initSource: function() {
16245		var array, url,
16246			that = this;
16247		if ( Array.isArray( this.options.source ) ) {
16248			array = this.options.source;
16249			this.source = function( request, response ) {
16250				response( $.ui.autocomplete.filter( array, request.term ) );
16251			};
16252		} else if ( typeof this.options.source === "string" ) {
16253			url = this.options.source;
16254			this.source = function( request, response ) {
16255				if ( that.xhr ) {
16256					that.xhr.abort();
16257				}
16258				that.xhr = $.ajax( {
16259					url: url,
16260					data: request,
16261					dataType: "json",
16262					success: function( data ) {
16263						response( data );
16264					},
16265					error: function() {
16266						response( [] );
16267					}
16268				} );
16269			};
16270		} else {
16271			this.source = this.options.source;
16272		}
16273	},
16274
16275	_searchTimeout: function( event ) {
16276		clearTimeout( this.searching );
16277		this.searching = this._delay( function() {
16278
16279			// Search if the value has changed, or if the user retypes the same value (see #7434)
16280			var equalValues = this.term === this._value(),
16281				menuVisible = this.menu.element.is( ":visible" ),
16282				modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
16283
16284			if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
16285				this.selectedItem = null;
16286				this.search( null, event );
16287			}
16288		}, this.options.delay );
16289	},
16290
16291	search: function( value, event ) {
16292		value = value != null ? value : this._value();
16293
16294		// Always save the actual value, not the one passed as an argument
16295		this.term = this._value();
16296
16297		if ( value.length < this.options.minLength ) {
16298			return this.close( event );
16299		}
16300
16301		if ( this._trigger( "search", event ) === false ) {
16302			return;
16303		}
16304
16305		return this._search( value );
16306	},
16307
16308	_search: function( value ) {
16309		this.pending++;
16310		this._addClass( "ui-autocomplete-loading" );
16311		this.cancelSearch = false;
16312
16313		this.source( { term: value }, this._response() );
16314	},
16315
16316	_response: function() {
16317		var index = ++this.requestIndex;
16318
16319		return function( content ) {
16320			if ( index === this.requestIndex ) {
16321				this.__response( content );
16322			}
16323
16324			this.pending--;
16325			if ( !this.pending ) {
16326				this._removeClass( "ui-autocomplete-loading" );
16327			}
16328		}.bind( this );
16329	},
16330
16331	__response: function( content ) {
16332		if ( content ) {
16333			content = this._normalize( content );
16334		}
16335		this._trigger( "response", null, { content: content } );
16336		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
16337			this._suggest( content );
16338			this._trigger( "open" );
16339		} else {
16340
16341			// use ._close() instead of .close() so we don't cancel future searches
16342			this._close();
16343		}
16344	},
16345
16346	close: function( event ) {
16347		this.cancelSearch = true;
16348		this._close( event );
16349	},
16350
16351	_close: function( event ) {
16352
16353		// Remove the handler that closes the menu on outside clicks
16354		this._off( this.document, "mousedown" );
16355
16356		if ( this.menu.element.is( ":visible" ) ) {
16357			this.menu.element.hide();
16358			this.menu.blur();
16359			this.isNewMenu = true;
16360			this._trigger( "close", event );
16361		}
16362	},
16363
16364	_change: function( event ) {
16365		if ( this.previous !== this._value() ) {
16366			this._trigger( "change", event, { item: this.selectedItem } );
16367		}
16368	},
16369
16370	_normalize: function( items ) {
16371
16372		// assume all items have the right format when the first item is complete
16373		if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
16374			return items;
16375		}
16376		return $.map( items, function( item ) {
16377			if ( typeof item === "string" ) {
16378				return {
16379					label: item,
16380					value: item
16381				};
16382			}
16383			return $.extend( {}, item, {
16384				label: item.label || item.value,
16385				value: item.value || item.label
16386			} );
16387		} );
16388	},
16389
16390	_suggest: function( items ) {
16391		var ul = this.menu.element.empty();
16392		this._renderMenu( ul, items );
16393		this.isNewMenu = true;
16394		this.menu.refresh();
16395
16396		// Size and position menu
16397		ul.show();
16398		this._resizeMenu();
16399		ul.position( $.extend( {
16400			of: this.element
16401		}, this.options.position ) );
16402
16403		if ( this.options.autoFocus ) {
16404			this.menu.next();
16405		}
16406
16407		// Listen for interactions outside of the widget (#6642)
16408		this._on( this.document, {
16409			mousedown: "_closeOnClickOutside"
16410		} );
16411	},
16412
16413	_resizeMenu: function() {
16414		var ul = this.menu.element;
16415		ul.outerWidth( Math.max(
16416
16417			// Firefox wraps long text (possibly a rounding bug)
16418			// so we add 1px to avoid the wrapping (#7513)
16419			ul.width( "" ).outerWidth() + 1,
16420			this.element.outerWidth()
16421		) );
16422	},
16423
16424	_renderMenu: function( ul, items ) {
16425		var that = this;
16426		$.each( items, function( index, item ) {
16427			that._renderItemData( ul, item );
16428		} );
16429	},
16430
16431	_renderItemData: function( ul, item ) {
16432		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
16433	},
16434
16435	_renderItem: function( ul, item ) {
16436		return $( "<li>" )
16437			.append( $( "<div>" ).text( item.label ) )
16438			.appendTo( ul );
16439	},
16440
16441	_move: function( direction, event ) {
16442		if ( !this.menu.element.is( ":visible" ) ) {
16443			this.search( null, event );
16444			return;
16445		}
16446		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
16447				this.menu.isLastItem() && /^next/.test( direction ) ) {
16448
16449			if ( !this.isMultiLine ) {
16450				this._value( this.term );
16451			}
16452
16453			this.menu.blur();
16454			return;
16455		}
16456		this.menu[ direction ]( event );
16457	},
16458
16459	widget: function() {
16460		return this.menu.element;
16461	},
16462
16463	_value: function() {
16464		return this.valueMethod.apply( this.element, arguments );
16465	},
16466
16467	_keyEvent: function( keyEvent, event ) {
16468		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
16469			this._move( keyEvent, event );
16470
16471			// Prevents moving cursor to beginning/end of the text field in some browsers
16472			event.preventDefault();
16473		}
16474	},
16475
16476	// Support: Chrome <=50
16477	// We should be able to just use this.element.prop( "isContentEditable" )
16478	// but hidden elements always report false in Chrome.
16479	// https://code.google.com/p/chromium/issues/detail?id=313082
16480	_isContentEditable: function( element ) {
16481		if ( !element.length ) {
16482			return false;
16483		}
16484
16485		var editable = element.prop( "contentEditable" );
16486
16487		if ( editable === "inherit" ) {
16488			return this._isContentEditable( element.parent() );
16489		}
16490
16491		return editable === "true";
16492	}
16493} );
16494
16495$.extend( $.ui.autocomplete, {
16496	escapeRegex: function( value ) {
16497		return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
16498	},
16499	filter: function( array, term ) {
16500		var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
16501		return $.grep( array, function( value ) {
16502			return matcher.test( value.label || value.value || value );
16503		} );
16504	}
16505} );
16506
16507// Live region extension, adding a `messages` option
16508// NOTE: This is an experimental API. We are still investigating
16509// a full solution for string manipulation and internationalization.
16510$.widget( "ui.autocomplete", $.ui.autocomplete, {
16511	options: {
16512		messages: {
16513			noResults: "No search results.",
16514			results: function( amount ) {
16515				return amount + ( amount > 1 ? " results are" : " result is" ) +
16516					" available, use up and down arrow keys to navigate.";
16517			}
16518		}
16519	},
16520
16521	__response: function( content ) {
16522		var message;
16523		this._superApply( arguments );
16524		if ( this.options.disabled || this.cancelSearch ) {
16525			return;
16526		}
16527		if ( content && content.length ) {
16528			message = this.options.messages.results( content.length );
16529		} else {
16530			message = this.options.messages.noResults;
16531		}
16532		clearTimeout( this.liveRegionTimer );
16533		this.liveRegionTimer = this._delay( function() {
16534			this.liveRegion.html( $( "<div>" ).text( message ) );
16535		}, 100 );
16536	}
16537} );
16538
16539var widgetsAutocomplete = $.ui.autocomplete;
16540
16541
16542/*!
16543 * jQuery UI Controlgroup 1.13.
165431
16544 * http://jqueryui.com
16545 *
16546 * Copyright jQuery Foundation and other contributors
16547 * Released under the MIT license.
16548 * http://jquery.org/license
16549 */
16550
16551//>>label: Controlgroup
16552//>>group: Widgets
16553//>>description: Visually groups form control widgets
16554//>>docs: http://api.jqueryui.com/controlgroup/
16555//>>demos: http://jqueryui.com/controlgroup/
16556//>>css.structure: ../../themes/base/core.css
16557//>>css.structure: ../../themes/base/controlgroup.css
16558//>>css.theme: ../../themes/base/theme.css
16559
16560
16561var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
16562
16563var widgetsControlgroup = $.widget( "ui.controlgroup", {
16564	version: "1.13.1
vendor: 7,734 bytes, lines 16564-16828
16564",
16565	defaultElement: "<div>",
16566	options: {
16567		direction: "horizontal",
16568		disabled: null,
16569		onlyVisible: true,
16570		items: {
16571			"button": "input[type=button], input[type=submit], input[type=reset], button, a",
16572			"controlgroupLabel": ".ui-controlgroup-label",
16573			"checkboxradio": "input[type='checkbox'], input[type='radio']",
16574			"selectmenu": "select",
16575			"spinner": ".ui-spinner-input"
16576		}
16577	},
16578
16579	_create: function() {
16580		this._enhance();
16581	},
16582
16583	// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation
16584	_enhance: function() {
16585		this.element.attr( "role", "toolbar" );
16586		this.refresh();
16587	},
16588
16589	_destroy: function() {
16590		this._callChildMethod( "destroy" );
16591		this.childWidgets.removeData( "ui-controlgroup-data" );
16592		this.element.removeAttr( "role" );
16593		if ( this.options.items.controlgroupLabel ) {
16594			this.element
16595				.find( this.options.items.controlgroupLabel )
16596				.find( ".ui-controlgroup-label-contents" )
16597				.contents().unwrap();
16598		}
16599	},
16600
16601	_initWidgets: function() {
16602		var that = this,
16603			childWidgets = [];
16604
16605		// First we iterate over each of the items options
16606		$.each( this.options.items, function( widget, selector ) {
16607			var labels;
16608			var options = {};
16609
16610			// Make sure the widget has a selector set
16611			if ( !selector ) {
16612				return;
16613			}
16614
16615			if ( widget === "controlgroupLabel" ) {
16616				labels = that.element.find( selector );
16617				labels.each( function() {
16618					var element = $( this );
16619
16620					if ( element.children( ".ui-controlgroup-label-contents" ).length ) {
16621						return;
16622					}
16623					element.contents()
16624						.wrapAll( "<span class='ui-controlgroup-label-contents'></span>" );
16625				} );
16626				that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );
16627				childWidgets = childWidgets.concat( labels.get() );
16628				return;
16629			}
16630
16631			// Make sure the widget actually exists
16632			if ( !$.fn[ widget ] ) {
16633				return;
16634			}
16635
16636			// We assume everything is in the middle to start because we can't determine
16637			// first / last elements until all enhancments are done.
16638			if ( that[ "_" + widget + "Options" ] ) {
16639				options = that[ "_" + widget + "Options" ]( "middle" );
16640			} else {
16641				options = { classes: {} };
16642			}
16643
16644			// Find instances of this widget inside controlgroup and init them
16645			that.element
16646				.find( selector )
16647				.each( function() {
16648					var element = $( this );
16649					var instance = element[ widget ]( "instance" );
16650
16651					// We need to clone the default options for this type of widget to avoid
16652					// polluting the variable options which has a wider scope than a single widget.
16653					var instanceOptions = $.widget.extend( {}, options );
16654
16655					// If the button is the child of a spinner ignore it
16656					// TODO: Find a more generic solution
16657					if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
16658						return;
16659					}
16660
16661					// Create the widget if it doesn't exist
16662					if ( !instance ) {
16663						instance = element[ widget ]()[ widget ]( "instance" );
16664					}
16665					if ( instance ) {
16666						instanceOptions.classes =
16667							that._resolveClassesValues( instanceOptions.classes, instance );
16668					}
16669					element[ widget ]( instanceOptions );
16670
16671					// Store an instance of the controlgroup to be able to reference
16672					// from the outermost element for changing options and refresh
16673					var widgetElement = element[ widget ]( "widget" );
16674					$.data( widgetElement[ 0 ], "ui-controlgroup-data",
16675						instance ? instance : element[ widget ]( "instance" ) );
16676
16677					childWidgets.push( widgetElement[ 0 ] );
16678				} );
16679		} );
16680
16681		this.childWidgets = $( $.uniqueSort( childWidgets ) );
16682		this._addClass( this.childWidgets, "ui-controlgroup-item" );
16683	},
16684
16685	_callChildMethod: function( method ) {
16686		this.childWidgets.each( function() {
16687			var element = $( this ),
16688				data = element.data( "ui-controlgroup-data" );
16689			if ( data && data[ method ] ) {
16690				data[ method ]();
16691			}
16692		} );
16693	},
16694
16695	_updateCornerClass: function( element, position ) {
16696		var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";
16697		var add = this._buildSimpleOptions( position, "label" ).classes.label;
16698
16699		this._removeClass( element, null, remove );
16700		this._addClass( element, null, add );
16701	},
16702
16703	_buildSimpleOptions: function( position, key ) {
16704		var direction = this.options.direction === "vertical";
16705		var result = {
16706			classes: {}
16707		};
16708		result.classes[ key ] = {
16709			"middle": "",
16710			"first": "ui-corner-" + ( direction ? "top" : "left" ),
16711			"last": "ui-corner-" + ( direction ? "bottom" : "right" ),
16712			"only": "ui-corner-all"
16713		}[ position ];
16714
16715		return result;
16716	},
16717
16718	_spinnerOptions: function( position ) {
16719		var options = this._buildSimpleOptions( position, "ui-spinner" );
16720
16721		options.classes[ "ui-spinner-up" ] = "";
16722		options.classes[ "ui-spinner-down" ] = "";
16723
16724		return options;
16725	},
16726
16727	_buttonOptions: function( position ) {
16728		return this._buildSimpleOptions( position, "ui-button" );
16729	},
16730
16731	_checkboxradioOptions: function( position ) {
16732		return this._buildSimpleOptions( position, "ui-checkboxradio-label" );
16733	},
16734
16735	_selectmenuOptions: function( position ) {
16736		var direction = this.options.direction === "vertical";
16737		return {
16738			width: direction ? "auto" : false,
16739			classes: {
16740				middle: {
16741					"ui-selectmenu-button-open": "",
16742					"ui-selectmenu-button-closed": ""
16743				},
16744				first: {
16745					"ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),
16746					"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )
16747				},
16748				last: {
16749					"ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",
16750					"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )
16751				},
16752				only: {
16753					"ui-selectmenu-button-open": "ui-corner-top",
16754					"ui-selectmenu-button-closed": "ui-corner-all"
16755				}
16756
16757			}[ position ]
16758		};
16759	},
16760
16761	_resolveClassesValues: function( classes, instance ) {
16762		var result = {};
16763		$.each( classes, function( key ) {
16764			var current = instance.options.classes[ key ] || "";
16765			current = String.prototype.trim.call( current.replace( controlgroupCornerRegex, "" ) );
16766			result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " );
16767		} );
16768		return result;
16769	},
16770
16771	_setOption: function( key, value ) {
16772		if ( key === "direction" ) {
16773			this._removeClass( "ui-controlgroup-" + this.options.direction );
16774		}
16775
16776		this._super( key, value );
16777		if ( key === "disabled" ) {
16778			this._callChildMethod( value ? "disable" : "enable" );
16779			return;
16780		}
16781
16782		this.refresh();
16783	},
16784
16785	refresh: function() {
16786		var children,
16787			that = this;
16788
16789		this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );
16790
16791		if ( this.options.direction === "horizontal" ) {
16792			this._addClass( null, "ui-helper-clearfix" );
16793		}
16794		this._initWidgets();
16795
16796		children = this.childWidgets;
16797
16798		// We filter here because we need to track all childWidgets not just the visible ones
16799		if ( this.options.onlyVisible ) {
16800			children = children.filter( ":visible" );
16801		}
16802
16803		if ( children.length ) {
16804
16805			// We do this last because we need to make sure all enhancment is done
16806			// before determining first and last
16807			$.each( [ "first", "last" ], function( index, value ) {
16808				var instance = children[ value ]().data( "ui-controlgroup-data" );
16809
16810				if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
16811					var options = that[ "_" + instance.widgetName + "Options" ](
16812						children.length === 1 ? "only" : value
16813					);
16814					options.classes = that._resolveClassesValues( options.classes, instance );
16815					instance.element[ instance.widgetName ]( options );
16816				} else {
16817					that._updateCornerClass( children[ value ](), value );
16818				}
16819			} );
16820
16821			// Finally call the refresh method on each of the child widgets.
16822			this._callChildMethod( "refresh" );
16823		}
16824	}
16825} );
16826
16827/*!
16828 * jQuery UI Checkboxradio 1.1
vendor: 4,983 bytes, lines 16828-17006
168283.1
16829 * http://jqueryui.com
16830 *
16831 * Copyright jQuery Foundation and other contributors
16832 * Released under the MIT license.
16833 * http://jquery.org/license
16834 */
16835
16836//>>label: Checkboxradio
16837//>>group: Widgets
16838//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.
16839//>>docs: http://api.jqueryui.com/checkboxradio/
16840//>>demos: http://jqueryui.com/checkboxradio/
16841//>>css.structure: ../../themes/base/core.css
16842//>>css.structure: ../../themes/base/button.css
16843//>>css.structure: ../../themes/base/checkboxradio.css
16844//>>css.theme: ../../themes/base/theme.css
16845
16846
16847$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
16848	version: "1.13.1",
16849	options: {
16850		disabled: null,
16851		label: null,
16852		icon: true,
16853		classes: {
16854			"ui-checkboxradio-label": "ui-corner-all",
16855			"ui-checkboxradio-icon": "ui-corner-all"
16856		}
16857	},
16858
16859	_getCreateOptions: function() {
16860		var disabled, labels;
16861		var that = this;
16862		var options = this._super() || {};
16863
16864		// We read the type here, because it makes more sense to throw a element type error first,
16865		// rather then the error for lack of a label. Often if its the wrong type, it
16866		// won't have a label (e.g. calling on a div, btn, etc)
16867		this._readType();
16868
16869		labels = this.element.labels();
16870
16871		// If there are multiple labels, use the last one
16872		this.label = $( labels[ labels.length - 1 ] );
16873		if ( !this.label.length ) {
16874			$.error( "No label found for checkboxradio widget" );
16875		}
16876
16877		this.originalLabel = "";
16878
16879		// We need to get the label text but this may also need to make sure it does not contain the
16880		// input itself.
16881		this.label.contents().not( this.element[ 0 ] ).each( function() {
16882
16883			// The label contents could be text, html, or a mix. We concat each element to get a
16884			// string representation of the label, without the input as part of it.
16885			that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;
16886		} );
16887
16888		// Set the label option if we found label text
16889		if ( this.originalLabel ) {
16890			options.label = this.originalLabel;
16891		}
16892
16893		disabled = this.element[ 0 ].disabled;
16894		if ( disabled != null ) {
16895			options.disabled = disabled;
16896		}
16897		return options;
16898	},
16899
16900	_create: function() {
16901		var checked = this.element[ 0 ].checked;
16902
16903		this._bindFormResetHandler();
16904
16905		if ( this.options.disabled == null ) {
16906			this.options.disabled = this.element[ 0 ].disabled;
16907		}
16908
16909		this._setOption( "disabled", this.options.disabled );
16910		this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" );
16911		this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" );
16912
16913		if ( this.type === "radio" ) {
16914			this._addClass( this.label, "ui-checkboxradio-radio-label" );
16915		}
16916
16917		if ( this.options.label && this.options.label !== this.originalLabel ) {
16918			this._updateLabel();
16919		} else if ( this.originalLabel ) {
16920			this.options.label = this.originalLabel;
16921		}
16922
16923		this._enhance();
16924
16925		if ( checked ) {
16926			this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" );
16927		}
16928
16929		this._on( {
16930			change: "_toggleClasses",
16931			focus: function() {
16932				this._addClass( this.label, null, "ui-state-focus ui-visual-focus" );
16933			},
16934			blur: function() {
16935				this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" );
16936			}
16937		} );
16938	},
16939
16940	_readType: function() {
16941		var nodeName = this.element[ 0 ].nodeName.toLowerCase();
16942		this.type = this.element[ 0 ].type;
16943		if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) {
16944			$.error( "Can't create checkboxradio on element.nodeName=" + nodeName +
16945				" and element.type=" + this.type );
16946		}
16947	},
16948
16949	// Support jQuery Mobile enhanced option
16950	_enhance: function() {
16951		this._updateIcon( this.element[ 0 ].checked );
16952	},
16953
16954	widget: function() {
16955		return this.label;
16956	},
16957
16958	_getRadioGroup: function() {
16959		var group;
16960		var name = this.element[ 0 ].name;
16961		var nameSelector = "input[name='" + $.escapeSelector( name ) + "']";
16962
16963		if ( !name ) {
16964			return $( [] );
16965		}
16966
16967		if ( this.form.length ) {
16968			group = $( this.form[ 0 ].elements ).filter( nameSelector );
16969		} else {
16970
16971			// Not inside a form, check all inputs that also are not inside a form
16972			group = $( nameSelector ).filter( function() {
16973				return $( this )._form().length === 0;
16974			} );
16975		}
16976
16977		return group.not( this.element );
16978	},
16979
16980	_toggleClasses: function() {
16981		var checked = this.element[ 0 ].checked;
16982		this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
16983
16984		if ( this.options.icon && this.type === "checkbox" ) {
16985			this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked )
16986				._toggleClass( this.icon, null, "ui-icon-blank", !checked );
16987		}
16988
16989		if ( this.type === "radio" ) {
16990			this._getRadioGroup()
16991				.each( function() {
16992					var instance = $( this ).checkboxradio( "instance" );
16993
16994					if ( instance ) {
16995						instance._removeClass( instance.label,
16996							"ui-checkboxradio-checked", "ui-state-active" );
16997					}
16998				} );
16999		}
17000	},
17001
17002	_destroy: function() {
17003		this._unbindFormResetHandler();
17004
17005		if ( this.icon ) {
17006			this.icon.remove();
vendor: 2,708 bytes, lines 17007-17113
17007			this.iconSpace.remove();
17008		}
17009	},
17010
17011	_setOption: function( key, value ) {
17012
17013		// We don't allow the value to be set to nothing
17014		if ( key === "label" && !value ) {
17015			return;
17016		}
17017
17018		this._super( key, value );
17019
17020		if ( key === "disabled" ) {
17021			this._toggleClass( this.label, null, "ui-state-disabled", value );
17022			this.element[ 0 ].disabled = value;
17023
17024			// Don't refresh when setting disabled
17025			return;
17026		}
17027		this.refresh();
17028	},
17029
17030	_updateIcon: function( checked ) {
17031		var toAdd = "ui-icon ui-icon-background ";
17032
17033		if ( this.options.icon ) {
17034			if ( !this.icon ) {
17035				this.icon = $( "<span>" );
17036				this.iconSpace = $( "<span> </span>" );
17037				this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" );
17038			}
17039
17040			if ( this.type === "checkbox" ) {
17041				toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank";
17042				this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" );
17043			} else {
17044				toAdd += "ui-icon-blank";
17045			}
17046			this._addClass( this.icon, "ui-checkboxradio-icon", toAdd );
17047			if ( !checked ) {
17048				this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" );
17049			}
17050			this.icon.prependTo( this.label ).after( this.iconSpace );
17051		} else if ( this.icon !== undefined ) {
17052			this.icon.remove();
17053			this.iconSpace.remove();
17054			delete this.icon;
17055		}
17056	},
17057
17058	_updateLabel: function() {
17059
17060		// Remove the contents of the label ( minus the icon, icon space, and input )
17061		var contents = this.label.contents().not( this.element[ 0 ] );
17062		if ( this.icon ) {
17063			contents = contents.not( this.icon[ 0 ] );
17064		}
17065		if ( this.iconSpace ) {
17066			contents = contents.not( this.iconSpace[ 0 ] );
17067		}
17068		contents.remove();
17069
17070		this.label.append( this.options.label );
17071	},
17072
17073	refresh: function() {
17074		var checked = this.element[ 0 ].checked,
17075			isDisabled = this.element[ 0 ].disabled;
17076
17077		this._updateIcon( checked );
17078		this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
17079		if ( this.options.label !== null ) {
17080			this._updateLabel();
17081		}
17082
17083		if ( isDisabled !== this.options.disabled ) {
17084			this._setOptions( { "disabled": isDisabled } );
17085		}
17086	}
17087
17088} ] );
17089
17090var widgetsCheckboxradio = $.ui.checkboxradio;
17091
17092
17093/*!
17094 * jQuery UI Button 1.13.1
17095 * http://jqueryui.com
17096 *
17097 * Copyright jQuery Foundation and other contributors
17098 * Released under the MIT license.
17099 * http://jquery.org/license
17100 */
17101
17102//>>label: Button
17103//>>group: Widgets
17104//>>description: Enhances a form with themeable buttons.
17105//>>docs: http://api.jqueryui.com/button/
17106//>>demos: http://jqueryui.com/button/
17107//>>css.structure: ../../themes/base/core.css
17108//>>css.structure: ../../themes/base/button.css
17109//>>css.theme: ../../themes/base/theme.css
17110
17111
17112$.widget( "ui.button", {
17113	version: "1.13.1
vendor: 10,836 bytes, lines 17113-17520
17113",
17114	defaultElement: "<button>",
17115	options: {
17116		classes: {
17117			"ui-button": "ui-corner-all"
17118		},
17119		disabled: null,
17120		icon: null,
17121		iconPosition: "beginning",
17122		label: null,
17123		showLabel: true
17124	},
17125
17126	_getCreateOptions: function() {
17127		var disabled,
17128
17129			// This is to support cases like in jQuery Mobile where the base widget does have
17130			// an implementation of _getCreateOptions
17131			options = this._super() || {};
17132
17133		this.isInput = this.element.is( "input" );
17134
17135		disabled = this.element[ 0 ].disabled;
17136		if ( disabled != null ) {
17137			options.disabled = disabled;
17138		}
17139
17140		this.originalLabel = this.isInput ? this.element.val() : this.element.html();
17141		if ( this.originalLabel ) {
17142			options.label = this.originalLabel;
17143		}
17144
17145		return options;
17146	},
17147
17148	_create: function() {
17149		if ( !this.option.showLabel & !this.options.icon ) {
17150			this.options.showLabel = true;
17151		}
17152
17153		// We have to check the option again here even though we did in _getCreateOptions,
17154		// because null may have been passed on init which would override what was set in
17155		// _getCreateOptions
17156		if ( this.options.disabled == null ) {
17157			this.options.disabled = this.element[ 0 ].disabled || false;
17158		}
17159
17160		this.hasTitle = !!this.element.attr( "title" );
17161
17162		// Check to see if the label needs to be set or if its already correct
17163		if ( this.options.label && this.options.label !== this.originalLabel ) {
17164			if ( this.isInput ) {
17165				this.element.val( this.options.label );
17166			} else {
17167				this.element.html( this.options.label );
17168			}
17169		}
17170		this._addClass( "ui-button", "ui-widget" );
17171		this._setOption( "disabled", this.options.disabled );
17172		this._enhance();
17173
17174		if ( this.element.is( "a" ) ) {
17175			this._on( {
17176				"keyup": function( event ) {
17177					if ( event.keyCode === $.ui.keyCode.SPACE ) {
17178						event.preventDefault();
17179
17180						// Support: PhantomJS <= 1.9, IE 8 Only
17181						// If a native click is available use it so we actually cause navigation
17182						// otherwise just trigger a click event
17183						if ( this.element[ 0 ].click ) {
17184							this.element[ 0 ].click();
17185						} else {
17186							this.element.trigger( "click" );
17187						}
17188					}
17189				}
17190			} );
17191		}
17192	},
17193
17194	_enhance: function() {
17195		if ( !this.element.is( "button" ) ) {
17196			this.element.attr( "role", "button" );
17197		}
17198
17199		if ( this.options.icon ) {
17200			this._updateIcon( "icon", this.options.icon );
17201			this._updateTooltip();
17202		}
17203	},
17204
17205	_updateTooltip: function() {
17206		this.title = this.element.attr( "title" );
17207
17208		if ( !this.options.showLabel && !this.title ) {
17209			this.element.attr( "title", this.options.label );
17210		}
17211	},
17212
17213	_updateIcon: function( option, value ) {
17214		var icon = option !== "iconPosition",
17215			position = icon ? this.options.iconPosition : value,
17216			displayBlock = position === "top" || position === "bottom";
17217
17218		// Create icon
17219		if ( !this.icon ) {
17220			this.icon = $( "<span>" );
17221
17222			this._addClass( this.icon, "ui-button-icon", "ui-icon" );
17223
17224			if ( !this.options.showLabel ) {
17225				this._addClass( "ui-button-icon-only" );
17226			}
17227		} else if ( icon ) {
17228
17229			// If we are updating the icon remove the old icon class
17230			this._removeClass( this.icon, null, this.options.icon );
17231		}
17232
17233		// If we are updating the icon add the new icon class
17234		if ( icon ) {
17235			this._addClass( this.icon, null, value );
17236		}
17237
17238		this._attachIcon( position );
17239
17240		// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
17241		// the iconSpace if there is one.
17242		if ( displayBlock ) {
17243			this._addClass( this.icon, null, "ui-widget-icon-block" );
17244			if ( this.iconSpace ) {
17245				this.iconSpace.remove();
17246			}
17247		} else {
17248
17249			// Position is beginning or end so remove the ui-widget-icon-block class and add the
17250			// space if it does not exist
17251			if ( !this.iconSpace ) {
17252				this.iconSpace = $( "<span> </span>" );
17253				this._addClass( this.iconSpace, "ui-button-icon-space" );
17254			}
17255			this._removeClass( this.icon, null, "ui-wiget-icon-block" );
17256			this._attachIconSpace( position );
17257		}
17258	},
17259
17260	_destroy: function() {
17261		this.element.removeAttr( "role" );
17262
17263		if ( this.icon ) {
17264			this.icon.remove();
17265		}
17266		if ( this.iconSpace ) {
17267			this.iconSpace.remove();
17268		}
17269		if ( !this.hasTitle ) {
17270			this.element.removeAttr( "title" );
17271		}
17272	},
17273
17274	_attachIconSpace: function( iconPosition ) {
17275		this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
17276	},
17277
17278	_attachIcon: function( iconPosition ) {
17279		this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
17280	},
17281
17282	_setOptions: function( options ) {
17283		var newShowLabel = options.showLabel === undefined ?
17284				this.options.showLabel :
17285				options.showLabel,
17286			newIcon = options.icon === undefined ? this.options.icon : options.icon;
17287
17288		if ( !newShowLabel && !newIcon ) {
17289			options.showLabel = true;
17290		}
17291		this._super( options );
17292	},
17293
17294	_setOption: function( key, value ) {
17295		if ( key === "icon" ) {
17296			if ( value ) {
17297				this._updateIcon( key, value );
17298			} else if ( this.icon ) {
17299				this.icon.remove();
17300				if ( this.iconSpace ) {
17301					this.iconSpace.remove();
17302				}
17303			}
17304		}
17305
17306		if ( key === "iconPosition" ) {
17307			this._updateIcon( key, value );
17308		}
17309
17310		// Make sure we can't end up with a button that has neither text nor icon
17311		if ( key === "showLabel" ) {
17312				this._toggleClass( "ui-button-icon-only", null, !value );
17313				this._updateTooltip();
17314		}
17315
17316		if ( key === "label" ) {
17317			if ( this.isInput ) {
17318				this.element.val( value );
17319			} else {
17320
17321				// If there is an icon, append it, else nothing then append the value
17322				// this avoids removal of the icon when setting label text
17323				this.element.html( value );
17324				if ( this.icon ) {
17325					this._attachIcon( this.options.iconPosition );
17326					this._attachIconSpace( this.options.iconPosition );
17327				}
17328			}
17329		}
17330
17331		this._super( key, value );
17332
17333		if ( key === "disabled" ) {
17334			this._toggleClass( null, "ui-state-disabled", value );
17335			this.element[ 0 ].disabled = value;
17336			if ( value ) {
17337				this.element.trigger( "blur" );
17338			}
17339		}
17340	},
17341
17342	refresh: function() {
17343
17344		// Make sure to only check disabled if its an element that supports this otherwise
17345		// check for the disabled class to determine state
17346		var isDisabled = this.element.is( "input, button" ) ?
17347			this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
17348
17349		if ( isDisabled !== this.options.disabled ) {
17350			this._setOptions( { disabled: isDisabled } );
17351		}
17352
17353		this._updateTooltip();
17354	}
17355} );
17356
17357// DEPRECATED
17358if ( $.uiBackCompat !== false ) {
17359
17360	// Text and Icons options
17361	$.widget( "ui.button", $.ui.button, {
17362		options: {
17363			text: true,
17364			icons: {
17365				primary: null,
17366				secondary: null
17367			}
17368		},
17369
17370		_create: function() {
17371			if ( this.options.showLabel && !this.options.text ) {
17372				this.options.showLabel = this.options.text;
17373			}
17374			if ( !this.options.showLabel && this.options.text ) {
17375				this.options.text = this.options.showLabel;
17376			}
17377			if ( !this.options.icon && ( this.options.icons.primary ||
17378					this.options.icons.secondary ) ) {
17379				if ( this.options.icons.primary ) {
17380					this.options.icon = this.options.icons.primary;
17381				} else {
17382					this.options.icon = this.options.icons.secondary;
17383					this.options.iconPosition = "end";
17384				}
17385			} else if ( this.options.icon ) {
17386				this.options.icons.primary = this.options.icon;
17387			}
17388			this._super();
17389		},
17390
17391		_setOption: function( key, value ) {
17392			if ( key === "text" ) {
17393				this._super( "showLabel", value );
17394				return;
17395			}
17396			if ( key === "showLabel" ) {
17397				this.options.text = value;
17398			}
17399			if ( key === "icon" ) {
17400				this.options.icons.primary = value;
17401			}
17402			if ( key === "icons" ) {
17403				if ( value.primary ) {
17404					this._super( "icon", value.primary );
17405					this._super( "iconPosition", "beginning" );
17406				} else if ( value.secondary ) {
17407					this._super( "icon", value.secondary );
17408					this._super( "iconPosition", "end" );
17409				}
17410			}
17411			this._superApply( arguments );
17412		}
17413	} );
17414
17415	$.fn.button = ( function( orig ) {
17416		return function( options ) {
17417			var isMethodCall = typeof options === "string";
17418			var args = Array.prototype.slice.call( arguments, 1 );
17419			var returnValue = this;
17420
17421			if ( isMethodCall ) {
17422
17423				// If this is an empty collection, we need to have the instance method
17424				// return undefined instead of the jQuery instance
17425				if ( !this.length && options === "instance" ) {
17426					returnValue = undefined;
17427				} else {
17428					this.each( function() {
17429						var methodValue;
17430						var type = $( this ).attr( "type" );
17431						var name = type !== "checkbox" && type !== "radio" ?
17432							"button" :
17433							"checkboxradio";
17434						var instance = $.data( this, "ui-" + name );
17435
17436						if ( options === "instance" ) {
17437							returnValue = instance;
17438							return false;
17439						}
17440
17441						if ( !instance ) {
17442							return $.error( "cannot call methods on button" +
17443								" prior to initialization; " +
17444								"attempted to call method '" + options + "'" );
17445						}
17446
17447						if ( typeof instance[ options ] !== "function" ||
17448							options.charAt( 0 ) === "_" ) {
17449							return $.error( "no such method '" + options + "' for button" +
17450								" widget instance" );
17451						}
17452
17453						methodValue = instance[ options ].apply( instance, args );
17454
17455						if ( methodValue !== instance && methodValue !== undefined ) {
17456							returnValue = methodValue && methodValue.jquery ?
17457								returnValue.pushStack( methodValue.get() ) :
17458								methodValue;
17459							return false;
17460						}
17461					} );
17462				}
17463			} else {
17464
17465				// Allow multiple hashes to be passed on init
17466				if ( args.length ) {
17467					options = $.widget.extend.apply( null, [ options ].concat( args ) );
17468				}
17469
17470				this.each( function() {
17471					var type = $( this ).attr( "type" );
17472					var name = type !== "checkbox" && type !== "radio" ? "button" : "checkboxradio";
17473					var instance = $.data( this, "ui-" + name );
17474
17475					if ( instance ) {
17476						instance.option( options || {} );
17477						if ( instance._init ) {
17478							instance._init();
17479						}
17480					} else {
17481						if ( name === "button" ) {
17482							orig.call( $( this ), options );
17483							return;
17484						}
17485
17486						$( this ).checkboxradio( $.extend( { icon: false }, options ) );
17487					}
17488				} );
17489			}
17490
17491			return returnValue;
17492		};
17493	} )( $.fn.button );
17494
17495	$.fn.buttonset = function() {
17496		if ( !$.ui.controlgroup ) {
17497			$.error( "Controlgroup widget missing" );
17498		}
17499		if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
17500			return this.controlgroup.apply( this,
17501				[ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
17502		}
17503		if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
17504			return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
17505		}
17506		if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
17507			arguments[ 0 ].items = {
17508				button: arguments[ 0 ].items
17509			};
17510		}
17511		return this.controlgroup.apply( this, arguments );
17512	};
17513}
17514
17515var widgetsButton = $.ui.button;
17516
17517
17518/* eslint-disable max-len, camelcase */
17519/*!
17520 * jQuery UI Datepicker 1.13.
175201
17521 * http://jqueryui.com
17522 *
17523 * Copyright jQuery Foundation and other contributors
17524 * Released under the MIT license.
17525 * http://jquery.org/license
17526 */
17527
17528//>>label: Datepicker
17529//>>group: Widgets
17530//>>description: Displays a calendar from an input or inline for selecting dates.
17531//>>docs: http://api.jqueryui.com/datepicker/
17532//>>demos: http://jqueryui.com/datepicker/
17533//>>css.structure: ../../themes/base/core.css
17534//>>css.structure: ../../themes/base/datepicker.css
17535//>>css.theme: ../../themes/base/theme.css
17536
17537
17538$.extend( $.ui, { datepicker: { version: "1.13.1
vendor: 14,162 bytes, lines 17538-17855
17538" } } );
17539
17540var datepicker_instActive;
17541
17542function datepicker_getZindex( elem ) {
17543	var position, value;
17544	while ( elem.length && elem[ 0 ] !== document ) {
17545
17546		// Ignore z-index if position is set to a value where z-index is ignored by the browser
17547		// This makes behavior of this function consistent across browsers
17548		// WebKit always returns auto if the element is positioned
17549		position = elem.css( "position" );
17550		if ( position === "absolute" || position === "relative" || position === "fixed" ) {
17551
17552			// IE returns 0 when zIndex is not specified
17553			// other browsers return a string
17554			// we ignore the case of nested elements with an explicit value of 0
17555			// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
17556			value = parseInt( elem.css( "zIndex" ), 10 );
17557			if ( !isNaN( value ) && value !== 0 ) {
17558				return value;
17559			}
17560		}
17561		elem = elem.parent();
17562	}
17563
17564	return 0;
17565}
17566
17567/* Date picker manager.
17568   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
17569   Settings for (groups of) date pickers are maintained in an instance object,
17570   allowing multiple different settings on the same page. */
17571
17572function Datepicker() {
17573	this._curInst = null; // The current instance in use
17574	this._keyEvent = false; // If the last event was a key event
17575	this._disabledInputs = []; // List of date picker inputs that have been disabled
17576	this._datepickerShowing = false; // True if the popup picker is showing , false if not
17577	this._inDialog = false; // True if showing within a "dialog", false if not
17578	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
17579	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
17580	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
17581	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
17582	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
17583	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
17584	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
17585	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
17586	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
17587	this.regional = []; // Available regional settings, indexed by language code
17588	this.regional[ "" ] = { // Default regional settings
17589		closeText: "Done", // Display text for close link
17590		prevText: "Prev", // Display text for previous month link
17591		nextText: "Next", // Display text for next month link
17592		currentText: "Today", // Display text for current month link
17593		monthNames: [ "January", "February", "March", "April", "May", "June",
17594			"July", "August", "September", "October", "November", "December" ], // Names of months for drop-down and formatting
17595		monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting
17596		dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting
17597		dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting
17598		dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], // Column headings for days starting at Sunday
17599		weekHeader: "Wk", // Column header for week of the year
17600		dateFormat: "mm/dd/yy", // See format options on parseDate
17601		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
17602		isRTL: false, // True if right-to-left language, false if left-to-right
17603		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
17604		yearSuffix: "", // Additional text to append to the year in the month headers,
17605		selectMonthLabel: "Select month", // Invisible label for month selector
17606		selectYearLabel: "Select year" // Invisible label for year selector
17607	};
17608	this._defaults = { // Global defaults for all the date picker instances
17609		showOn: "focus", // "focus" for popup on focus,
17610			// "button" for trigger button, or "both" for either
17611		showAnim: "fadeIn", // Name of jQuery animation for popup
17612		showOptions: {}, // Options for enhanced animations
17613		defaultDate: null, // Used when field is blank: actual date,
17614			// +/-number for offset from today, null for today
17615		appendText: "", // Display text following the input box, e.g. showing the format
17616		buttonText: "...", // Text for trigger button
17617		buttonImage: "", // URL for trigger button image
17618		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
17619		hideIfNoPrevNext: false, // True to hide next/previous month links
17620			// if not applicable, false to just disable them
17621		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
17622		gotoCurrent: false, // True if today link goes back to current selection instead
17623		changeMonth: false, // True if month can be selected directly, false if only prev/next
17624		changeYear: false, // True if year can be selected directly, false if only prev/next
17625		yearRange: "c-10:c+10", // Range of years to display in drop-down,
17626			// either relative to today's year (-nn:+nn), relative to currently displayed year
17627			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
17628		showOtherMonths: false, // True to show dates in other months, false to leave blank
17629		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
17630		showWeek: false, // True to show week of the year, false to not show it
17631		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
17632			// takes a Date and returns the number of the week for it
17633		shortYearCutoff: "+10", // Short year values < this are in the current century,
17634			// > this are in the previous century,
17635			// string value starting with "+" for current year + value
17636		minDate: null, // The earliest selectable date, or null for no limit
17637		maxDate: null, // The latest selectable date, or null for no limit
17638		duration: "fast", // Duration of display/closure
17639		beforeShowDay: null, // Function that takes a date and returns an array with
17640			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
17641			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
17642		beforeShow: null, // Function that takes an input field and
17643			// returns a set of custom settings for the date picker
17644		onSelect: null, // Define a callback function when a date is selected
17645		onChangeMonthYear: null, // Define a callback function when the month or year is changed
17646		onClose: null, // Define a callback function when the datepicker is closed
17647		onUpdateDatepicker: null, // Define a callback function when the datepicker is updated
17648		numberOfMonths: 1, // Number of months to show at a time
17649		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
17650		stepMonths: 1, // Number of months to step back/forward
17651		stepBigMonths: 12, // Number of months to step back/forward for the big links
17652		altField: "", // Selector for an alternate field to store selected dates into
17653		altFormat: "", // The date format to use for the alternate field
17654		constrainInput: true, // The input is constrained by the current date format
17655		showButtonPanel: false, // True to show button panel, false to not show it
17656		autoSize: false, // True to size the input for the date format, false to leave as is
17657		disabled: false // The initial disabled state
17658	};
17659	$.extend( this._defaults, this.regional[ "" ] );
17660	this.regional.en = $.extend( true, {}, this.regional[ "" ] );
17661	this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
17662	this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) );
17663}
17664
17665$.extend( Datepicker.prototype, {
17666
17667	/* Class name added to elements to indicate already configured with a date picker. */
17668	markerClassName: "hasDatepicker",
17669
17670	//Keep track of the maximum number of rows displayed (see #7043)
17671	maxRows: 4,
17672
17673	// TODO rename to "widget" when switching to widget factory
17674	_widgetDatepicker: function() {
17675		return this.dpDiv;
17676	},
17677
17678	/* Override the default settings for all instances of the date picker.
17679	 * @param  settings  object - the new settings to use as defaults (anonymous object)
17680	 * @return the manager object
17681	 */
17682	setDefaults: function( settings ) {
17683		datepicker_extendRemove( this._defaults, settings || {} );
17684		return this;
17685	},
17686
17687	/* Attach the date picker to a jQuery selection.
17688	 * @param  target	element - the target input field or division or span
17689	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
17690	 */
17691	_attachDatepicker: function( target, settings ) {
17692		var nodeName, inline, inst;
17693		nodeName = target.nodeName.toLowerCase();
17694		inline = ( nodeName === "div" || nodeName === "span" );
17695		if ( !target.id ) {
17696			this.uuid += 1;
17697			target.id = "dp" + this.uuid;
17698		}
17699		inst = this._newInst( $( target ), inline );
17700		inst.settings = $.extend( {}, settings || {} );
17701		if ( nodeName === "input" ) {
17702			this._connectDatepicker( target, inst );
17703		} else if ( inline ) {
17704			this._inlineDatepicker( target, inst );
17705		}
17706	},
17707
17708	/* Create a new instance object. */
17709	_newInst: function( target, inline ) {
17710		var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars
17711		return { id: id, input: target, // associated target
17712			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
17713			drawMonth: 0, drawYear: 0, // month being drawn
17714			inline: inline, // is datepicker inline or not
17715			dpDiv: ( !inline ? this.dpDiv : // presentation div
17716			datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) };
17717	},
17718
17719	/* Attach the date picker to an input field. */
17720	_connectDatepicker: function( target, inst ) {
17721		var input = $( target );
17722		inst.append = $( [] );
17723		inst.trigger = $( [] );
17724		if ( input.hasClass( this.markerClassName ) ) {
17725			return;
17726		}
17727		this._attachments( input, inst );
17728		input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ).
17729			on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp );
17730		this._autoSize( inst );
17731		$.data( target, "datepicker", inst );
17732
17733		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
17734		if ( inst.settings.disabled ) {
17735			this._disableDatepicker( target );
17736		}
17737	},
17738
17739	/* Make attachments based on settings. */
17740	_attachments: function( input, inst ) {
17741		var showOn, buttonText, buttonImage,
17742			appendText = this._get( inst, "appendText" ),
17743			isRTL = this._get( inst, "isRTL" );
17744
17745		if ( inst.append ) {
17746			inst.append.remove();
17747		}
17748		if ( appendText ) {
17749			inst.append = $( "<span>" )
17750				.addClass( this._appendClass )
17751				.text( appendText );
17752			input[ isRTL ? "before" : "after" ]( inst.append );
17753		}
17754
17755		input.off( "focus", this._showDatepicker );
17756
17757		if ( inst.trigger ) {
17758			inst.trigger.remove();
17759		}
17760
17761		showOn = this._get( inst, "showOn" );
17762		if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field
17763			input.on( "focus", this._showDatepicker );
17764		}
17765		if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked
17766			buttonText = this._get( inst, "buttonText" );
17767			buttonImage = this._get( inst, "buttonImage" );
17768
17769			if ( this._get( inst, "buttonImageOnly" ) ) {
17770				inst.trigger = $( "<img>" )
17771					.addClass( this._triggerClass )
17772					.attr( {
17773						src: buttonImage,
17774						alt: buttonText,
17775						title: buttonText
17776					} );
17777			} else {
17778				inst.trigger = $( "<button type='button'>" )
17779					.addClass( this._triggerClass );
17780				if ( buttonImage ) {
17781					inst.trigger.html(
17782						$( "<img>" )
17783							.attr( {
17784								src: buttonImage,
17785								alt: buttonText,
17786								title: buttonText
17787							} )
17788					);
17789				} else {
17790					inst.trigger.text( buttonText );
17791				}
17792			}
17793
17794			input[ isRTL ? "before" : "after" ]( inst.trigger );
17795			inst.trigger.on( "click", function() {
17796				if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {
17797					$.datepicker._hideDatepicker();
17798				} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {
17799					$.datepicker._hideDatepicker();
17800					$.datepicker._showDatepicker( input[ 0 ] );
17801				} else {
17802					$.datepicker._showDatepicker( input[ 0 ] );
17803				}
17804				return false;
17805			} );
17806		}
17807	},
17808
17809	/* Apply the maximum length for the date format. */
17810	_autoSize: function( inst ) {
17811		if ( this._get( inst, "autoSize" ) && !inst.inline ) {
17812			var findMax, max, maxI, i,
17813				date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits
17814				dateFormat = this._get( inst, "dateFormat" );
17815
17816			if ( dateFormat.match( /[DM]/ ) ) {
17817				findMax = function( names ) {
17818					max = 0;
17819					maxI = 0;
17820					for ( i = 0; i < names.length; i++ ) {
17821						if ( names[ i ].length > max ) {
17822							max = names[ i ].length;
17823							maxI = i;
17824						}
17825					}
17826					return maxI;
17827				};
17828				date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?
17829					"monthNames" : "monthNamesShort" ) ) ) );
17830				date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?
17831					"dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() );
17832			}
17833			inst.input.attr( "size", this._formatDate( inst, date ).length );
17834		}
17835	},
17836
17837	/* Attach an inline date picker to a div. */
17838	_inlineDatepicker: function( target, inst ) {
17839		var divSpan = $( target );
17840		if ( divSpan.hasClass( this.markerClassName ) ) {
17841			return;
17842		}
17843		divSpan.addClass( this.markerClassName ).append( inst.dpDiv );
17844		$.data( target, "datepicker", inst );
17845		this._setDate( inst, this._getDefaultDate( inst ), true );
17846		this._updateDatepicker( inst );
17847		this._updateAlternate( inst );
17848
17849		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
17850		if ( inst.settings.disabled ) {
17851			this._disableDatepicker( target );
17852		}
17853
17854		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
17855		// http
vendor: 14,693 bytes, lines 17855-18277
17855://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
17856		inst.dpDiv.css( "display", "block" );
17857	},
17858
17859	/* Pop-up the date picker in a "dialog" box.
17860	 * @param  input element - ignored
17861	 * @param  date	string or Date - the initial date to display
17862	 * @param  onSelect  function - the function to call when a date is selected
17863	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
17864	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
17865	 *					event - with x/y coordinates or
17866	 *					leave empty for default (screen centre)
17867	 * @return the manager object
17868	 */
17869	_dialogDatepicker: function( input, date, onSelect, settings, pos ) {
17870		var id, browserWidth, browserHeight, scrollX, scrollY,
17871			inst = this._dialogInst; // internal instance
17872
17873		if ( !inst ) {
17874			this.uuid += 1;
17875			id = "dp" + this.uuid;
17876			this._dialogInput = $( "<input type='text' id='" + id +
17877				"' style='position: absolute; top: -100px; width: 0px;'/>" );
17878			this._dialogInput.on( "keydown", this._doKeyDown );
17879			$( "body" ).append( this._dialogInput );
17880			inst = this._dialogInst = this._newInst( this._dialogInput, false );
17881			inst.settings = {};
17882			$.data( this._dialogInput[ 0 ], "datepicker", inst );
17883		}
17884		datepicker_extendRemove( inst.settings, settings || {} );
17885		date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );
17886		this._dialogInput.val( date );
17887
17888		this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );
17889		if ( !this._pos ) {
17890			browserWidth = document.documentElement.clientWidth;
17891			browserHeight = document.documentElement.clientHeight;
17892			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
17893			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
17894			this._pos = // should use actual width/height below
17895				[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];
17896		}
17897
17898		// Move input on screen for focus, but hidden behind dialog
17899		this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" );
17900		inst.settings.onSelect = onSelect;
17901		this._inDialog = true;
17902		this.dpDiv.addClass( this._dialogClass );
17903		this._showDatepicker( this._dialogInput[ 0 ] );
17904		if ( $.blockUI ) {
17905			$.blockUI( this.dpDiv );
17906		}
17907		$.data( this._dialogInput[ 0 ], "datepicker", inst );
17908		return this;
17909	},
17910
17911	/* Detach a datepicker from its control.
17912	 * @param  target	element - the target input field or division or span
17913	 */
17914	_destroyDatepicker: function( target ) {
17915		var nodeName,
17916			$target = $( target ),
17917			inst = $.data( target, "datepicker" );
17918
17919		if ( !$target.hasClass( this.markerClassName ) ) {
17920			return;
17921		}
17922
17923		nodeName = target.nodeName.toLowerCase();
17924		$.removeData( target, "datepicker" );
17925		if ( nodeName === "input" ) {
17926			inst.append.remove();
17927			inst.trigger.remove();
17928			$target.removeClass( this.markerClassName ).
17929				off( "focus", this._showDatepicker ).
17930				off( "keydown", this._doKeyDown ).
17931				off( "keypress", this._doKeyPress ).
17932				off( "keyup", this._doKeyUp );
17933		} else if ( nodeName === "div" || nodeName === "span" ) {
17934			$target.removeClass( this.markerClassName ).empty();
17935		}
17936
17937		if ( datepicker_instActive === inst ) {
17938			datepicker_instActive = null;
17939			this._curInst = null;
17940		}
17941	},
17942
17943	/* Enable the date picker to a jQuery selection.
17944	 * @param  target	element - the target input field or division or span
17945	 */
17946	_enableDatepicker: function( target ) {
17947		var nodeName, inline,
17948			$target = $( target ),
17949			inst = $.data( target, "datepicker" );
17950
17951		if ( !$target.hasClass( this.markerClassName ) ) {
17952			return;
17953		}
17954
17955		nodeName = target.nodeName.toLowerCase();
17956		if ( nodeName === "input" ) {
17957			target.disabled = false;
17958			inst.trigger.filter( "button" ).
17959				each( function() {
17960					this.disabled = false;
17961				} ).end().
17962				filter( "img" ).css( { opacity: "1.0", cursor: "" } );
17963		} else if ( nodeName === "div" || nodeName === "span" ) {
17964			inline = $target.children( "." + this._inlineClass );
17965			inline.children().removeClass( "ui-state-disabled" );
17966			inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
17967				prop( "disabled", false );
17968		}
17969		this._disabledInputs = $.map( this._disabledInputs,
17970
17971			// Delete entry
17972			function( value ) {
17973				return ( value === target ? null : value );
17974			} );
17975	},
17976
17977	/* Disable the date picker to a jQuery selection.
17978	 * @param  target	element - the target input field or division or span
17979	 */
17980	_disableDatepicker: function( target ) {
17981		var nodeName, inline,
17982			$target = $( target ),
17983			inst = $.data( target, "datepicker" );
17984
17985		if ( !$target.hasClass( this.markerClassName ) ) {
17986			return;
17987		}
17988
17989		nodeName = target.nodeName.toLowerCase();
17990		if ( nodeName === "input" ) {
17991			target.disabled = true;
17992			inst.trigger.filter( "button" ).
17993				each( function() {
17994					this.disabled = true;
17995				} ).end().
17996				filter( "img" ).css( { opacity: "0.5", cursor: "default" } );
17997		} else if ( nodeName === "div" || nodeName === "span" ) {
17998			inline = $target.children( "." + this._inlineClass );
17999			inline.children().addClass( "ui-state-disabled" );
18000			inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
18001				prop( "disabled", true );
18002		}
18003		this._disabledInputs = $.map( this._disabledInputs,
18004
18005			// Delete entry
18006			function( value ) {
18007				return ( value === target ? null : value );
18008			} );
18009		this._disabledInputs[ this._disabledInputs.length ] = target;
18010	},
18011
18012	/* Is the first field in a jQuery collection disabled as a datepicker?
18013	 * @param  target	element - the target input field or division or span
18014	 * @return boolean - true if disabled, false if enabled
18015	 */
18016	_isDisabledDatepicker: function( target ) {
18017		if ( !target ) {
18018			return false;
18019		}
18020		for ( var i = 0; i < this._disabledInputs.length; i++ ) {
18021			if ( this._disabledInputs[ i ] === target ) {
18022				return true;
18023			}
18024		}
18025		return false;
18026	},
18027
18028	/* Retrieve the instance data for the target control.
18029	 * @param  target  element - the target input field or division or span
18030	 * @return  object - the associated instance data
18031	 * @throws  error if a jQuery problem getting data
18032	 */
18033	_getInst: function( target ) {
18034		try {
18035			return $.data( target, "datepicker" );
18036		} catch ( err ) {
18037			throw "Missing instance data for this datepicker";
18038		}
18039	},
18040
18041	/* Update or retrieve the settings for a date picker attached to an input field or division.
18042	 * @param  target  element - the target input field or division or span
18043	 * @param  name	object - the new settings to update or
18044	 *				string - the name of the setting to change or retrieve,
18045	 *				when retrieving also "all" for all instance settings or
18046	 *				"defaults" for all global defaults
18047	 * @param  value   any - the new value for the setting
18048	 *				(omit if above is an object or to retrieve a value)
18049	 */
18050	_optionDatepicker: function( target, name, value ) {
18051		var settings, date, minDate, maxDate,
18052			inst = this._getInst( target );
18053
18054		if ( arguments.length === 2 && typeof name === "string" ) {
18055			return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) :
18056				( inst ? ( name === "all" ? $.extend( {}, inst.settings ) :
18057				this._get( inst, name ) ) : null ) );
18058		}
18059
18060		settings = name || {};
18061		if ( typeof name === "string" ) {
18062			settings = {};
18063			settings[ name ] = value;
18064		}
18065
18066		if ( inst ) {
18067			if ( this._curInst === inst ) {
18068				this._hideDatepicker();
18069			}
18070
18071			date = this._getDateDatepicker( target, true );
18072			minDate = this._getMinMaxDate( inst, "min" );
18073			maxDate = this._getMinMaxDate( inst, "max" );
18074			datepicker_extendRemove( inst.settings, settings );
18075
18076			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
18077			if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {
18078				inst.settings.minDate = this._formatDate( inst, minDate );
18079			}
18080			if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {
18081				inst.settings.maxDate = this._formatDate( inst, maxDate );
18082			}
18083			if ( "disabled" in settings ) {
18084				if ( settings.disabled ) {
18085					this._disableDatepicker( target );
18086				} else {
18087					this._enableDatepicker( target );
18088				}
18089			}
18090			this._attachments( $( target ), inst );
18091			this._autoSize( inst );
18092			this._setDate( inst, date );
18093			this._updateAlternate( inst );
18094			this._updateDatepicker( inst );
18095		}
18096	},
18097
18098	// Change method deprecated
18099	_changeDatepicker: function( target, name, value ) {
18100		this._optionDatepicker( target, name, value );
18101	},
18102
18103	/* Redraw the date picker attached to an input field or division.
18104	 * @param  target  element - the target input field or division or span
18105	 */
18106	_refreshDatepicker: function( target ) {
18107		var inst = this._getInst( target );
18108		if ( inst ) {
18109			this._updateDatepicker( inst );
18110		}
18111	},
18112
18113	/* Set the dates for a jQuery selection.
18114	 * @param  target element - the target input field or division or span
18115	 * @param  date	Date - the new date
18116	 */
18117	_setDateDatepicker: function( target, date ) {
18118		var inst = this._getInst( target );
18119		if ( inst ) {
18120			this._setDate( inst, date );
18121			this._updateDatepicker( inst );
18122			this._updateAlternate( inst );
18123		}
18124	},
18125
18126	/* Get the date(s) for the first entry in a jQuery selection.
18127	 * @param  target element - the target input field or division or span
18128	 * @param  noDefault boolean - true if no default date is to be used
18129	 * @return Date - the current date
18130	 */
18131	_getDateDatepicker: function( target, noDefault ) {
18132		var inst = this._getInst( target );
18133		if ( inst && !inst.inline ) {
18134			this._setDateFromField( inst, noDefault );
18135		}
18136		return ( inst ? this._getDate( inst ) : null );
18137	},
18138
18139	/* Handle keystrokes. */
18140	_doKeyDown: function( event ) {
18141		var onSelect, dateStr, sel,
18142			inst = $.datepicker._getInst( event.target ),
18143			handled = true,
18144			isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" );
18145
18146		inst._keyEvent = true;
18147		if ( $.datepicker._datepickerShowing ) {
18148			switch ( event.keyCode ) {
18149				case 9: $.datepicker._hideDatepicker();
18150						handled = false;
18151						break; // hide on tab out
18152				case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." +
18153									$.datepicker._currentClass + ")", inst.dpDiv );
18154						if ( sel[ 0 ] ) {
18155							$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );
18156						}
18157
18158						onSelect = $.datepicker._get( inst, "onSelect" );
18159						if ( onSelect ) {
18160							dateStr = $.datepicker._formatDate( inst );
18161
18162							// Trigger custom callback
18163							onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );
18164						} else {
18165							$.datepicker._hideDatepicker();
18166						}
18167
18168						return false; // don't submit the form
18169				case 27: $.datepicker._hideDatepicker();
18170						break; // hide on escape
18171				case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
18172							-$.datepicker._get( inst, "stepBigMonths" ) :
18173							-$.datepicker._get( inst, "stepMonths" ) ), "M" );
18174						break; // previous month/year on page up/+ ctrl
18175				case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
18176							+$.datepicker._get( inst, "stepBigMonths" ) :
18177							+$.datepicker._get( inst, "stepMonths" ) ), "M" );
18178						break; // next month/year on page down/+ ctrl
18179				case 35: if ( event.ctrlKey || event.metaKey ) {
18180							$.datepicker._clearDate( event.target );
18181						}
18182						handled = event.ctrlKey || event.metaKey;
18183						break; // clear on ctrl or command +end
18184				case 36: if ( event.ctrlKey || event.metaKey ) {
18185							$.datepicker._gotoToday( event.target );
18186						}
18187						handled = event.ctrlKey || event.metaKey;
18188						break; // current on ctrl or command +home
18189				case 37: if ( event.ctrlKey || event.metaKey ) {
18190							$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" );
18191						}
18192						handled = event.ctrlKey || event.metaKey;
18193
18194						// -1 day on ctrl or command +left
18195						if ( event.originalEvent.altKey ) {
18196							$.datepicker._adjustDate( event.target, ( event.ctrlKey ?
18197								-$.datepicker._get( inst, "stepBigMonths" ) :
18198								-$.datepicker._get( inst, "stepMonths" ) ), "M" );
18199						}
18200
18201						// next month/year on alt +left on Mac
18202						break;
18203				case 38: if ( event.ctrlKey || event.metaKey ) {
18204							$.datepicker._adjustDate( event.target, -7, "D" );
18205						}
18206						handled = event.ctrlKey || event.metaKey;
18207						break; // -1 week on ctrl or command +up
18208				case 39: if ( event.ctrlKey || event.metaKey ) {
18209							$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" );
18210						}
18211						handled = event.ctrlKey || event.metaKey;
18212
18213						// +1 day on ctrl or command +right
18214						if ( event.originalEvent.altKey ) {
18215							$.datepicker._adjustDate( event.target, ( event.ctrlKey ?
18216								+$.datepicker._get( inst, "stepBigMonths" ) :
18217								+$.datepicker._get( inst, "stepMonths" ) ), "M" );
18218						}
18219
18220						// next month/year on alt +right
18221						break;
18222				case 40: if ( event.ctrlKey || event.metaKey ) {
18223							$.datepicker._adjustDate( event.target, +7, "D" );
18224						}
18225						handled = event.ctrlKey || event.metaKey;
18226						break; // +1 week on ctrl or command +down
18227				default: handled = false;
18228			}
18229		} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home
18230			$.datepicker._showDatepicker( this );
18231		} else {
18232			handled = false;
18233		}
18234
18235		if ( handled ) {
18236			event.preventDefault();
18237			event.stopPropagation();
18238		}
18239	},
18240
18241	/* Filter entered characters - based on date format. */
18242	_doKeyPress: function( event ) {
18243		var chars, chr,
18244			inst = $.datepicker._getInst( event.target );
18245
18246		if ( $.datepicker._get( inst, "constrainInput" ) ) {
18247			chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) );
18248			chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );
18249			return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 );
18250		}
18251	},
18252
18253	/* Synchronise manual entry and field/alternate field. */
18254	_doKeyUp: function( event ) {
18255		var date,
18256			inst = $.datepicker._getInst( event.target );
18257
18258		if ( inst.input.val() !== inst.lastVal ) {
18259			try {
18260				date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
18261					( inst.input ? inst.input.val() : null ),
18262					$.datepicker._getFormatConfig( inst ) );
18263
18264				if ( date ) { // only if valid
18265					$.datepicker._setDateFromField( inst );
18266					$.datepicker._updateAlternate( inst );
18267					$.datepicker._updateDatepicker( inst );
18268				}
18269			} catch ( err ) {
18270			}
18271		}
18272		return true;
18273	},
18274
18275	/* Pop-up the date picker for a given input field.
18276	 * If false returned from beforeShow event handler do not show.
18277	 * @param  input  element - the input field attached to the date picker or
vendor: 4,332 bytes, lines 18278-18400
18278	 *					event - if triggered by focus
18279	 */
18280	_showDatepicker: function( input ) {
18281		input = input.target || input;
18282		if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger
18283			input = $( "input", input.parentNode )[ 0 ];
18284		}
18285
18286		if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here
18287			return;
18288		}
18289
18290		var inst, beforeShow, beforeShowSettings, isFixed,
18291			offset, showAnim, duration;
18292
18293		inst = $.datepicker._getInst( input );
18294		if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {
18295			$.datepicker._curInst.dpDiv.stop( true, true );
18296			if ( inst && $.datepicker._datepickerShowing ) {
18297				$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );
18298			}
18299		}
18300
18301		beforeShow = $.datepicker._get( inst, "beforeShow" );
18302		beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};
18303		if ( beforeShowSettings === false ) {
18304			return;
18305		}
18306		datepicker_extendRemove( inst.settings, beforeShowSettings );
18307
18308		inst.lastVal = null;
18309		$.datepicker._lastInput = input;
18310		$.datepicker._setDateFromField( inst );
18311
18312		if ( $.datepicker._inDialog ) { // hide cursor
18313			input.value = "";
18314		}
18315		if ( !$.datepicker._pos ) { // position below input
18316			$.datepicker._pos = $.datepicker._findPos( input );
18317			$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height
18318		}
18319
18320		isFixed = false;
18321		$( input ).parents().each( function() {
18322			isFixed |= $( this ).css( "position" ) === "fixed";
18323			return !isFixed;
18324		} );
18325
18326		offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };
18327		$.datepicker._pos = null;
18328
18329		//to avoid flashes on Firefox
18330		inst.dpDiv.empty();
18331
18332		// determine sizing offscreen
18333		inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } );
18334		$.datepicker._updateDatepicker( inst );
18335
18336		// fix width for dynamic number of date pickers
18337		// and adjust position before showing
18338		offset = $.datepicker._checkOffset( inst, offset, isFixed );
18339		inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?
18340			"static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none",
18341			left: offset.left + "px", top: offset.top + "px" } );
18342
18343		if ( !inst.inline ) {
18344			showAnim = $.datepicker._get( inst, "showAnim" );
18345			duration = $.datepicker._get( inst, "duration" );
18346			inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
18347			$.datepicker._datepickerShowing = true;
18348
18349			if ( $.effects && $.effects.effect[ showAnim ] ) {
18350				inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration );
18351			} else {
18352				inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null );
18353			}
18354
18355			if ( $.datepicker._shouldFocusInput( inst ) ) {
18356				inst.input.trigger( "focus" );
18357			}
18358
18359			$.datepicker._curInst = inst;
18360		}
18361	},
18362
18363	/* Generate the date picker content. */
18364	_updateDatepicker: function( inst ) {
18365		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
18366		datepicker_instActive = inst; // for delegate hover events
18367		inst.dpDiv.empty().append( this._generateHTML( inst ) );
18368		this._attachHandlers( inst );
18369
18370		var origyearshtml,
18371			numMonths = this._getNumberOfMonths( inst ),
18372			cols = numMonths[ 1 ],
18373			width = 17,
18374			activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ),
18375			onUpdateDatepicker = $.datepicker._get( inst, "onUpdateDatepicker" );
18376
18377		if ( activeCell.length > 0 ) {
18378			datepicker_handleMouseover.apply( activeCell.get( 0 ) );
18379		}
18380
18381		inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" );
18382		if ( cols > 1 ) {
18383			inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" );
18384		}
18385		inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) +
18386			"Class" ]( "ui-datepicker-multi" );
18387		inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) +
18388			"Class" ]( "ui-datepicker-rtl" );
18389
18390		if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
18391			inst.input.trigger( "focus" );
18392		}
18393
18394		// Deffered render of the years select (to avoid flashes on Firefox)
18395		if ( inst.yearshtml ) {
18396			origyearshtml = inst.yearshtml;
18397			setTimeout( function() {
18398
18399				//assure that inst.yearshtml didn't change.
18400				if ( origyearshtml === inst.yearshtml && inst.yearshtml ) {
vendor: 5,508 bytes, lines 18401-18559
18401					inst.dpDiv.find( "select.ui-datepicker-year" ).first().replaceWith( inst.yearshtml );
18402				}
18403				origyearshtml = inst.yearshtml = null;
18404			}, 0 );
18405		}
18406
18407		if ( onUpdateDatepicker ) {
18408			onUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );
18409		}
18410	},
18411
18412	// #6694 - don't focus the input if it's already focused
18413	// this breaks the change event in IE
18414	// Support: IE and jQuery <1.9
18415	_shouldFocusInput: function( inst ) {
18416		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
18417	},
18418
18419	/* Check positioning to remain on screen. */
18420	_checkOffset: function( inst, offset, isFixed ) {
18421		var dpWidth = inst.dpDiv.outerWidth(),
18422			dpHeight = inst.dpDiv.outerHeight(),
18423			inputWidth = inst.input ? inst.input.outerWidth() : 0,
18424			inputHeight = inst.input ? inst.input.outerHeight() : 0,
18425			viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),
18426			viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );
18427
18428		offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 );
18429		offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;
18430		offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;
18431
18432		// Now check if datepicker is showing outside window viewport - move to a better place if so.
18433		offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?
18434			Math.abs( offset.left + dpWidth - viewWidth ) : 0 );
18435		offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?
18436			Math.abs( dpHeight + inputHeight ) : 0 );
18437
18438		return offset;
18439	},
18440
18441	/* Find an object's position on the screen. */
18442	_findPos: function( obj ) {
18443		var position,
18444			inst = this._getInst( obj ),
18445			isRTL = this._get( inst, "isRTL" );
18446
18447		while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) {
18448			obj = obj[ isRTL ? "previousSibling" : "nextSibling" ];
18449		}
18450
18451		position = $( obj ).offset();
18452		return [ position.left, position.top ];
18453	},
18454
18455	/* Hide the date picker from view.
18456	 * @param  input  element - the input field attached to the date picker
18457	 */
18458	_hideDatepicker: function( input ) {
18459		var showAnim, duration, postProcess, onClose,
18460			inst = this._curInst;
18461
18462		if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) {
18463			return;
18464		}
18465
18466		if ( this._datepickerShowing ) {
18467			showAnim = this._get( inst, "showAnim" );
18468			duration = this._get( inst, "duration" );
18469			postProcess = function() {
18470				$.datepicker._tidyDialog( inst );
18471			};
18472
18473			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
18474			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
18475				inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess );
18476			} else {
18477				inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" :
18478					( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess );
18479			}
18480
18481			if ( !showAnim ) {
18482				postProcess();
18483			}
18484			this._datepickerShowing = false;
18485
18486			onClose = this._get( inst, "onClose" );
18487			if ( onClose ) {
18488				onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] );
18489			}
18490
18491			this._lastInput = null;
18492			if ( this._inDialog ) {
18493				this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } );
18494				if ( $.blockUI ) {
18495					$.unblockUI();
18496					$( "body" ).append( this.dpDiv );
18497				}
18498			}
18499			this._inDialog = false;
18500		}
18501	},
18502
18503	/* Tidy up after a dialog display. */
18504	_tidyDialog: function( inst ) {
18505		inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" );
18506	},
18507
18508	/* Close date picker if clicked elsewhere. */
18509	_checkExternalClick: function( event ) {
18510		if ( !$.datepicker._curInst ) {
18511			return;
18512		}
18513
18514		var $target = $( event.target ),
18515			inst = $.datepicker._getInst( $target[ 0 ] );
18516
18517		if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&
18518				$target.parents( "#" + $.datepicker._mainDivId ).length === 0 &&
18519				!$target.hasClass( $.datepicker.markerClassName ) &&
18520				!$target.closest( "." + $.datepicker._triggerClass ).length &&
18521				$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||
18522			( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {
18523				$.datepicker._hideDatepicker();
18524		}
18525	},
18526
18527	/* Adjust one of the date sub-fields. */
18528	_adjustDate: function( id, offset, period ) {
18529		var target = $( id ),
18530			inst = this._getInst( target[ 0 ] );
18531
18532		if ( this._isDisabledDatepicker( target[ 0 ] ) ) {
18533			return;
18534		}
18535		this._adjustInstDate( inst, offset, period );
18536		this._updateDatepicker( inst );
18537	},
18538
18539	/* Action for current link. */
18540	_gotoToday: function( id ) {
18541		var date,
18542			target = $( id ),
18543			inst = this._getInst( target[ 0 ] );
18544
18545		if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) {
18546			inst.selectedDay = inst.currentDay;
18547			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
18548			inst.drawYear = inst.selectedYear = inst.currentYear;
18549		} else {
18550			date = new Date();
18551			inst.selectedDay = date.getDate();
18552			inst.drawMonth = inst.selectedMonth = date.getMonth();
18553			inst.drawYear = inst.selectedYear = date.getFullYear();
18554		}
18555		this._notifyChange( inst );
18556		this._adjustDate( target );
18557	},
18558
18559	/* Action for selecting a new month/year. */
vendor: 4,615 bytes, lines 18560-18691
18560	_selectMonthYear: function( id, select, period ) {
18561		var target = $( id ),
18562			inst = this._getInst( target[ 0 ] );
18563
18564		inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] =
18565		inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] =
18566			parseInt( select.options[ select.selectedIndex ].value, 10 );
18567
18568		this._notifyChange( inst );
18569		this._adjustDate( target );
18570	},
18571
18572	/* Action for selecting a day. */
18573	_selectDay: function( id, month, year, td ) {
18574		var inst,
18575			target = $( id );
18576
18577		if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {
18578			return;
18579		}
18580
18581		inst = this._getInst( target[ 0 ] );
18582		inst.selectedDay = inst.currentDay = parseInt( $( "a", td ).attr( "data-date" ) );
18583		inst.selectedMonth = inst.currentMonth = month;
18584		inst.selectedYear = inst.currentYear = year;
18585		this._selectDate( id, this._formatDate( inst,
18586			inst.currentDay, inst.currentMonth, inst.currentYear ) );
18587	},
18588
18589	/* Erase the input field and hide the date picker. */
18590	_clearDate: function( id ) {
18591		var target = $( id );
18592		this._selectDate( target, "" );
18593	},
18594
18595	/* Update the input field with the selected date. */
18596	_selectDate: function( id, dateStr ) {
18597		var onSelect,
18598			target = $( id ),
18599			inst = this._getInst( target[ 0 ] );
18600
18601		dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );
18602		if ( inst.input ) {
18603			inst.input.val( dateStr );
18604		}
18605		this._updateAlternate( inst );
18606
18607		onSelect = this._get( inst, "onSelect" );
18608		if ( onSelect ) {
18609			onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback
18610		} else if ( inst.input ) {
18611			inst.input.trigger( "change" ); // fire the change event
18612		}
18613
18614		if ( inst.inline ) {
18615			this._updateDatepicker( inst );
18616		} else {
18617			this._hideDatepicker();
18618			this._lastInput = inst.input[ 0 ];
18619			if ( typeof( inst.input[ 0 ] ) !== "object" ) {
18620				inst.input.trigger( "focus" ); // restore focus
18621			}
18622			this._lastInput = null;
18623		}
18624	},
18625
18626	/* Update any alternate field to synchronise with the main field. */
18627	_updateAlternate: function( inst ) {
18628		var altFormat, date, dateStr,
18629			altField = this._get( inst, "altField" );
18630
18631		if ( altField ) { // update alternate field too
18632			altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" );
18633			date = this._getDate( inst );
18634			dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );
18635			$( document ).find( altField ).val( dateStr );
18636		}
18637	},
18638
18639	/* Set as beforeShowDay function to prevent selection of weekends.
18640	 * @param  date  Date - the date to customise
18641	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
18642	 */
18643	noWeekends: function( date ) {
18644		var day = date.getDay();
18645		return [ ( day > 0 && day < 6 ), "" ];
18646	},
18647
18648	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
18649	 * @param  date  Date - the date to get the week for
18650	 * @return  number - the number of the week within the year that contains this date
18651	 */
18652	iso8601Week: function( date ) {
18653		var time,
18654			checkDate = new Date( date.getTime() );
18655
18656		// Find Thursday of this week starting on Monday
18657		checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );
18658
18659		time = checkDate.getTime();
18660		checkDate.setMonth( 0 ); // Compare with Jan 1
18661		checkDate.setDate( 1 );
18662		return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;
18663	},
18664
18665	/* Parse a string value into a date object.
18666	 * See formatDate below for the possible formats.
18667	 *
18668	 * @param  format string - the expected format of the date
18669	 * @param  value string - the date in the above format
18670	 * @param  settings Object - attributes include:
18671	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
18672	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
18673	 *					dayNames		string[7] - names of the days from Sunday (optional)
18674	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
18675	 *					monthNames		string[12] - names of the months (optional)
18676	 * @return  Date - the extracted date value or null if value is blank
18677	 */
18678	parseDate: function( format, value, settings ) {
18679		if ( format == null || value == null ) {
18680			throw "Invalid arguments";
18681		}
18682
18683		value = ( typeof value === "object" ? value.toString() : value + "" );
18684		if ( value === "" ) {
18685			return null;
18686		}
18687
18688		var iFormat, dim, extra,
18689			iValue = 0,
18690			shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,
18691			shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp 
vendor: 5,431 bytes, lines 18691-18881
18691:
18692				new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),
18693			dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
18694			dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
18695			monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
18696			monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
18697			year = -1,
18698			month = -1,
18699			day = -1,
18700			doy = -1,
18701			literal = false,
18702			date,
18703
18704			// Check whether a format character is doubled
18705			lookAhead = function( match ) {
18706				var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
18707				if ( matches ) {
18708					iFormat++;
18709				}
18710				return matches;
18711			},
18712
18713			// Extract a number from the string value
18714			getNumber = function( match ) {
18715				var isDoubled = lookAhead( match ),
18716					size = ( match === "@" ? 14 : ( match === "!" ? 20 :
18717					( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ),
18718					minSize = ( match === "y" ? size : 1 ),
18719					digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ),
18720					num = value.substring( iValue ).match( digits );
18721				if ( !num ) {
18722					throw "Missing number at position " + iValue;
18723				}
18724				iValue += num[ 0 ].length;
18725				return parseInt( num[ 0 ], 10 );
18726			},
18727
18728			// Extract a name from the string value and convert to an index
18729			getName = function( match, shortNames, longNames ) {
18730				var index = -1,
18731					names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {
18732						return [ [ k, v ] ];
18733					} ).sort( function( a, b ) {
18734						return -( a[ 1 ].length - b[ 1 ].length );
18735					} );
18736
18737				$.each( names, function( i, pair ) {
18738					var name = pair[ 1 ];
18739					if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {
18740						index = pair[ 0 ];
18741						iValue += name.length;
18742						return false;
18743					}
18744				} );
18745				if ( index !== -1 ) {
18746					return index + 1;
18747				} else {
18748					throw "Unknown name at position " + iValue;
18749				}
18750			},
18751
18752			// Confirm that a literal character matches the string value
18753			checkLiteral = function() {
18754				if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {
18755					throw "Unexpected literal at position " + iValue;
18756				}
18757				iValue++;
18758			};
18759
18760		for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
18761			if ( literal ) {
18762				if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
18763					literal = false;
18764				} else {
18765					checkLiteral();
18766				}
18767			} else {
18768				switch ( format.charAt( iFormat ) ) {
18769					case "d":
18770						day = getNumber( "d" );
18771						break;
18772					case "D":
18773						getName( "D", dayNamesShort, dayNames );
18774						break;
18775					case "o":
18776						doy = getNumber( "o" );
18777						break;
18778					case "m":
18779						month = getNumber( "m" );
18780						break;
18781					case "M":
18782						month = getName( "M", monthNamesShort, monthNames );
18783						break;
18784					case "y":
18785						year = getNumber( "y" );
18786						break;
18787					case "@":
18788						date = new Date( getNumber( "@" ) );
18789						year = date.getFullYear();
18790						month = date.getMonth() + 1;
18791						day = date.getDate();
18792						break;
18793					case "!":
18794						date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 );
18795						year = date.getFullYear();
18796						month = date.getMonth() + 1;
18797						day = date.getDate();
18798						break;
18799					case "'":
18800						if ( lookAhead( "'" ) ) {
18801							checkLiteral();
18802						} else {
18803							literal = true;
18804						}
18805						break;
18806					default:
18807						checkLiteral();
18808				}
18809			}
18810		}
18811
18812		if ( iValue < value.length ) {
18813			extra = value.substr( iValue );
18814			if ( !/^\s+/.test( extra ) ) {
18815				throw "Extra/unparsed characters found in date: " + extra;
18816			}
18817		}
18818
18819		if ( year === -1 ) {
18820			year = new Date().getFullYear();
18821		} else if ( year < 100 ) {
18822			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
18823				( year <= shortYearCutoff ? 0 : -100 );
18824		}
18825
18826		if ( doy > -1 ) {
18827			month = 1;
18828			day = doy;
18829			do {
18830				dim = this._getDaysInMonth( year, month - 1 );
18831				if ( day <= dim ) {
18832					break;
18833				}
18834				month++;
18835				day -= dim;
18836			} while ( true );
18837		}
18838
18839		date = this._daylightSavingAdjust( new Date( year, month - 1, day ) );
18840		if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {
18841			throw "Invalid date"; // E.g. 31/02/00
18842		}
18843		return date;
18844	},
18845
18846	/* Standard date formats. */
18847	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
18848	COOKIE: "D, dd M yy",
18849	ISO_8601: "yy-mm-dd",
18850	RFC_822: "D, d M y",
18851	RFC_850: "DD, dd-M-y",
18852	RFC_1036: "D, d M y",
18853	RFC_1123: "D, d M yy",
18854	RFC_2822: "D, d M yy",
18855	RSS: "D, d M y", // RFC 822
18856	TICKS: "!",
18857	TIMESTAMP: "@",
18858	W3C: "yy-mm-dd", // ISO 8601
18859
18860	_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +
18861		Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),
18862
18863	/* Format a date object into a string value.
18864	 * The format can be combinations of the following:
18865	 * d  - day of month (no leading zero)
18866	 * dd - day of month (two digit)
18867	 * o  - day of year (no leading zeros)
18868	 * oo - day of year (three digit)
18869	 * D  - day name short
18870	 * DD - day name long
18871	 * m  - month of year (no leading zero)
18872	 * mm - month of year (two digit)
18873	 * M  - month name short
18874	 * MM - month name long
18875	 * y  - year (two digit)
18876	 * yy - year (four digit)
18877	 * @ - Unix timestamp (ms since 01/01/1970)
18878	 * ! - Windows ticks (100ns since 01/01/0001)
18879	 * "..." - literal text
18880	 * '' - single quote
18881	 *
vendor: 6,198 bytes, lines 18882-19081
18882	 * @param  format string - the desired format of the date
18883	 * @param  date Date - the date value to format
18884	 * @param  settings Object - attributes include:
18885	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
18886	 *					dayNames		string[7] - names of the days from Sunday (optional)
18887	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
18888	 *					monthNames		string[12] - names of the months (optional)
18889	 * @return  string - the date in the above format
18890	 */
18891	formatDate: function( format, date, settings ) {
18892		if ( !date ) {
18893			return "";
18894		}
18895
18896		var iFormat,
18897			dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
18898			dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
18899			monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
18900			monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
18901
18902			// Check whether a format character is doubled
18903			lookAhead = function( match ) {
18904				var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
18905				if ( matches ) {
18906					iFormat++;
18907				}
18908				return matches;
18909			},
18910
18911			// Format a number, with leading zero if necessary
18912			formatNumber = function( match, value, len ) {
18913				var num = "" + value;
18914				if ( lookAhead( match ) ) {
18915					while ( num.length < len ) {
18916						num = "0" + num;
18917					}
18918				}
18919				return num;
18920			},
18921
18922			// Format a name, short or long as requested
18923			formatName = function( match, value, shortNames, longNames ) {
18924				return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );
18925			},
18926			output = "",
18927			literal = false;
18928
18929		if ( date ) {
18930			for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
18931				if ( literal ) {
18932					if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
18933						literal = false;
18934					} else {
18935						output += format.charAt( iFormat );
18936					}
18937				} else {
18938					switch ( format.charAt( iFormat ) ) {
18939						case "d":
18940							output += formatNumber( "d", date.getDate(), 2 );
18941							break;
18942						case "D":
18943							output += formatName( "D", date.getDay(), dayNamesShort, dayNames );
18944							break;
18945						case "o":
18946							output += formatNumber( "o",
18947								Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );
18948							break;
18949						case "m":
18950							output += formatNumber( "m", date.getMonth() + 1, 2 );
18951							break;
18952						case "M":
18953							output += formatName( "M", date.getMonth(), monthNamesShort, monthNames );
18954							break;
18955						case "y":
18956							output += ( lookAhead( "y" ) ? date.getFullYear() :
18957								( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 );
18958							break;
18959						case "@":
18960							output += date.getTime();
18961							break;
18962						case "!":
18963							output += date.getTime() * 10000 + this._ticksTo1970;
18964							break;
18965						case "'":
18966							if ( lookAhead( "'" ) ) {
18967								output += "'";
18968							} else {
18969								literal = true;
18970							}
18971							break;
18972						default:
18973							output += format.charAt( iFormat );
18974					}
18975				}
18976			}
18977		}
18978		return output;
18979	},
18980
18981	/* Extract all possible characters from the date format. */
18982	_possibleChars: function( format ) {
18983		var iFormat,
18984			chars = "",
18985			literal = false,
18986
18987			// Check whether a format character is doubled
18988			lookAhead = function( match ) {
18989				var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
18990				if ( matches ) {
18991					iFormat++;
18992				}
18993				return matches;
18994			};
18995
18996		for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
18997			if ( literal ) {
18998				if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
18999					literal = false;
19000				} else {
19001					chars += format.charAt( iFormat );
19002				}
19003			} else {
19004				switch ( format.charAt( iFormat ) ) {
19005					case "d": case "m": case "y": case "@":
19006						chars += "0123456789";
19007						break;
19008					case "D": case "M":
19009						return null; // Accept anything
19010					case "'":
19011						if ( lookAhead( "'" ) ) {
19012							chars += "'";
19013						} else {
19014							literal = true;
19015						}
19016						break;
19017					default:
19018						chars += format.charAt( iFormat );
19019				}
19020			}
19021		}
19022		return chars;
19023	},
19024
19025	/* Get a setting value, defaulting if necessary. */
19026	_get: function( inst, name ) {
19027		return inst.settings[ name ] !== undefined ?
19028			inst.settings[ name ] : this._defaults[ name ];
19029	},
19030
19031	/* Parse existing date and initialise date picker. */
19032	_setDateFromField: function( inst, noDefault ) {
19033		if ( inst.input.val() === inst.lastVal ) {
19034			return;
19035		}
19036
19037		var dateFormat = this._get( inst, "dateFormat" ),
19038			dates = inst.lastVal = inst.input ? inst.input.val() : null,
19039			defaultDate = this._getDefaultDate( inst ),
19040			date = defaultDate,
19041			settings = this._getFormatConfig( inst );
19042
19043		try {
19044			date = this.parseDate( dateFormat, dates, settings ) || defaultDate;
19045		} catch ( event ) {
19046			dates = ( noDefault ? "" : dates );
19047		}
19048		inst.selectedDay = date.getDate();
19049		inst.drawMonth = inst.selectedMonth = date.getMonth();
19050		inst.drawYear = inst.selectedYear = date.getFullYear();
19051		inst.currentDay = ( dates ? date.getDate() : 0 );
19052		inst.currentMonth = ( dates ? date.getMonth() : 0 );
19053		inst.currentYear = ( dates ? date.getFullYear() : 0 );
19054		this._adjustInstDate( inst );
19055	},
19056
19057	/* Retrieve the default date shown on opening. */
19058	_getDefaultDate: function( inst ) {
19059		return this._restrictMinMax( inst,
19060			this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) );
19061	},
19062
19063	/* A date may be specified as an exact value or a relative one. */
19064	_determineDate: function( inst, date, defaultDate ) {
19065		var offsetNumeric = function( offset ) {
19066				var date = new Date();
19067				date.setDate( date.getDate() + offset );
19068				return date;
19069			},
19070			offsetString = function( offset ) {
19071				try {
19072					return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
19073						offset, $.datepicker._getFormatConfig( inst ) );
19074				} catch ( e ) {
19075
19076					// Ignore
19077				}
19078
19079				var date = ( offset.toLowerCase().match( /^c/ ) ?
19080					$.datepicker._getDate( inst ) : null ) || new Date(),
19081					year = date.getFullYear(),
vendor: 5,359 bytes, lines 19082-19220
19082					month = date.getMonth(),
19083					day = date.getDate(),
19084					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
19085					matches = pattern.exec( offset );
19086
19087				while ( matches ) {
19088					switch ( matches[ 2 ] || "d" ) {
19089						case "d" : case "D" :
19090							day += parseInt( matches[ 1 ], 10 ); break;
19091						case "w" : case "W" :
19092							day += parseInt( matches[ 1 ], 10 ) * 7; break;
19093						case "m" : case "M" :
19094							month += parseInt( matches[ 1 ], 10 );
19095							day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
19096							break;
19097						case "y": case "Y" :
19098							year += parseInt( matches[ 1 ], 10 );
19099							day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
19100							break;
19101					}
19102					matches = pattern.exec( offset );
19103				}
19104				return new Date( year, month, day );
19105			},
19106			newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) :
19107				( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );
19108
19109		newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate );
19110		if ( newDate ) {
19111			newDate.setHours( 0 );
19112			newDate.setMinutes( 0 );
19113			newDate.setSeconds( 0 );
19114			newDate.setMilliseconds( 0 );
19115		}
19116		return this._daylightSavingAdjust( newDate );
19117	},
19118
19119	/* Handle switch to/from daylight saving.
19120	 * Hours may be non-zero on daylight saving cut-over:
19121	 * > 12 when midnight changeover, but then cannot generate
19122	 * midnight datetime, so jump to 1AM, otherwise reset.
19123	 * @param  date  (Date) the date to check
19124	 * @return  (Date) the corrected date
19125	 */
19126	_daylightSavingAdjust: function( date ) {
19127		if ( !date ) {
19128			return null;
19129		}
19130		date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );
19131		return date;
19132	},
19133
19134	/* Set the date(s) directly. */
19135	_setDate: function( inst, date, noChange ) {
19136		var clear = !date,
19137			origMonth = inst.selectedMonth,
19138			origYear = inst.selectedYear,
19139			newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );
19140
19141		inst.selectedDay = inst.currentDay = newDate.getDate();
19142		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
19143		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
19144		if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {
19145			this._notifyChange( inst );
19146		}
19147		this._adjustInstDate( inst );
19148		if ( inst.input ) {
19149			inst.input.val( clear ? "" : this._formatDate( inst ) );
19150		}
19151	},
19152
19153	/* Retrieve the date(s) directly. */
19154	_getDate: function( inst ) {
19155		var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null :
19156			this._daylightSavingAdjust( new Date(
19157			inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
19158			return startDate;
19159	},
19160
19161	/* Attach the onxxx handlers.  These are declared statically so
19162	 * they work with static code transformers like Caja.
19163	 */
19164	_attachHandlers: function( inst ) {
19165		var stepMonths = this._get( inst, "stepMonths" ),
19166			id = "#" + inst.id.replace( /\\\\/g, "\\" );
19167		inst.dpDiv.find( "[data-handler]" ).map( function() {
19168			var handler = {
19169				prev: function() {
19170					$.datepicker._adjustDate( id, -stepMonths, "M" );
19171				},
19172				next: function() {
19173					$.datepicker._adjustDate( id, +stepMonths, "M" );
19174				},
19175				hide: function() {
19176					$.datepicker._hideDatepicker();
19177				},
19178				today: function() {
19179					$.datepicker._gotoToday( id );
19180				},
19181				selectDay: function() {
19182					$.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this );
19183					return false;
19184				},
19185				selectMonth: function() {
19186					$.datepicker._selectMonthYear( id, this, "M" );
19187					return false;
19188				},
19189				selectYear: function() {
19190					$.datepicker._selectMonthYear( id, this, "Y" );
19191					return false;
19192				}
19193			};
19194			$( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] );
19195		} );
19196	},
19197
19198	/* Generate the HTML for the current state of the date picker. */
19199	_generateHTML: function( inst ) {
19200		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
19201			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
19202			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
19203			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
19204			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
19205			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
19206			tempDate = new Date(),
19207			today = this._daylightSavingAdjust(
19208				new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time
19209			isRTL = this._get( inst, "isRTL" ),
19210			showButtonPanel = this._get( inst, "showButtonPanel" ),
19211			hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ),
19212			navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ),
19213			numMonths = this._getNumberOfMonths( inst ),
19214			showCurrentAtPos = this._get( inst, "showCurrentAtPos" ),
19215			stepMonths = this._get( inst, "stepMonths" ),
19216			isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),
19217			currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :
19218				new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),
19219			minDate = this._getMinMaxDate( inst, "min" ),
19220			maxDate = this._getMinMaxDate( inst, "max" ),
vendor: 21,257 bytes, lines 19221-19735
19221			drawMonth = inst.drawMonth - showCurrentAtPos,
19222			drawYear = inst.drawYear;
19223
19224		if ( drawMonth < 0 ) {
19225			drawMonth += 12;
19226			drawYear--;
19227		}
19228		if ( maxDate ) {
19229			maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),
19230				maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );
19231			maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );
19232			while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {
19233				drawMonth--;
19234				if ( drawMonth < 0 ) {
19235					drawMonth = 11;
19236					drawYear--;
19237				}
19238			}
19239		}
19240		inst.drawMonth = drawMonth;
19241		inst.drawYear = drawYear;
19242
19243		prevText = this._get( inst, "prevText" );
19244		prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,
19245			this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),
19246			this._getFormatConfig( inst ) ) );
19247
19248		if ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) {
19249			prev = $( "<a>" )
19250				.attr( {
19251					"class": "ui-datepicker-prev ui-corner-all",
19252					"data-handler": "prev",
19253					"data-event": "click",
19254					title: prevText
19255				} )
19256				.append(
19257					$( "<span>" )
19258						.addClass( "ui-icon ui-icon-circle-triangle-" +
19259							( isRTL ? "e" : "w" ) )
19260						.text( prevText )
19261				)[ 0 ].outerHTML;
19262		} else if ( hideIfNoPrevNext ) {
19263			prev = "";
19264		} else {
19265			prev = $( "<a>" )
19266				.attr( {
19267					"class": "ui-datepicker-prev ui-corner-all ui-state-disabled",
19268					title: prevText
19269				} )
19270				.append(
19271					$( "<span>" )
19272						.addClass( "ui-icon ui-icon-circle-triangle-" +
19273							( isRTL ? "e" : "w" ) )
19274						.text( prevText )
19275				)[ 0 ].outerHTML;
19276		}
19277
19278		nextText = this._get( inst, "nextText" );
19279		nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,
19280			this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),
19281			this._getFormatConfig( inst ) ) );
19282
19283		if ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) {
19284			next = $( "<a>" )
19285				.attr( {
19286					"class": "ui-datepicker-next ui-corner-all",
19287					"data-handler": "next",
19288					"data-event": "click",
19289					title: nextText
19290				} )
19291				.append(
19292					$( "<span>" )
19293						.addClass( "ui-icon ui-icon-circle-triangle-" +
19294							( isRTL ? "w" : "e" ) )
19295						.text( nextText )
19296				)[ 0 ].outerHTML;
19297		} else if ( hideIfNoPrevNext ) {
19298			next = "";
19299		} else {
19300			next = $( "<a>" )
19301				.attr( {
19302					"class": "ui-datepicker-next ui-corner-all ui-state-disabled",
19303					title: nextText
19304				} )
19305				.append(
19306					$( "<span>" )
19307						.attr( "class", "ui-icon ui-icon-circle-triangle-" +
19308							( isRTL ? "w" : "e" ) )
19309						.text( nextText )
19310				)[ 0 ].outerHTML;
19311		}
19312
19313		currentText = this._get( inst, "currentText" );
19314		gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today );
19315		currentText = ( !navigationAsDateFormat ? currentText :
19316			this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );
19317
19318		controls = "";
19319		if ( !inst.inline ) {
19320			controls = $( "<button>" )
19321				.attr( {
19322					type: "button",
19323					"class": "ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all",
19324					"data-handler": "hide",
19325					"data-event": "click"
19326				} )
19327				.text( this._get( inst, "closeText" ) )[ 0 ].outerHTML;
19328		}
19329
19330		buttonPanel = "";
19331		if ( showButtonPanel ) {
19332			buttonPanel = $( "<div class='ui-datepicker-buttonpane ui-widget-content'>" )
19333				.append( isRTL ? controls : "" )
19334				.append( this._isInRange( inst, gotoDate ) ?
19335					$( "<button>" )
19336						.attr( {
19337							type: "button",
19338							"class": "ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all",
19339							"data-handler": "today",
19340							"data-event": "click"
19341						} )
19342						.text( currentText ) :
19343					"" )
19344				.append( isRTL ? "" : controls )[ 0 ].outerHTML;
19345		}
19346
19347		firstDay = parseInt( this._get( inst, "firstDay" ), 10 );
19348		firstDay = ( isNaN( firstDay ) ? 0 : firstDay );
19349
19350		showWeek = this._get( inst, "showWeek" );
19351		dayNames = this._get( inst, "dayNames" );
19352		dayNamesMin = this._get( inst, "dayNamesMin" );
19353		monthNames = this._get( inst, "monthNames" );
19354		monthNamesShort = this._get( inst, "monthNamesShort" );
19355		beforeShowDay = this._get( inst, "beforeShowDay" );
19356		showOtherMonths = this._get( inst, "showOtherMonths" );
19357		selectOtherMonths = this._get( inst, "selectOtherMonths" );
19358		defaultDate = this._getDefaultDate( inst );
19359		html = "";
19360
19361		for ( row = 0; row < numMonths[ 0 ]; row++ ) {
19362			group = "";
19363			this.maxRows = 4;
19364			for ( col = 0; col < numMonths[ 1 ]; col++ ) {
19365				selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );
19366				cornerClass = " ui-corner-all";
19367				calender = "";
19368				if ( isMultiMonth ) {
19369					calender += "<div class='ui-datepicker-group";
19370					if ( numMonths[ 1 ] > 1 ) {
19371						switch ( col ) {
19372							case 0: calender += " ui-datepicker-group-first";
19373								cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break;
19374							case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last";
19375								cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break;
19376							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
19377						}
19378					}
19379					calender += "'>";
19380				}
19381				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
19382					( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) +
19383					( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) +
19384					this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,
19385					row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers
19386					"</div><table class='ui-datepicker-calendar'><thead>" +
19387					"<tr>";
19388				thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" );
19389				for ( dow = 0; dow < 7; dow++ ) { // days of the week
19390					day = ( dow + firstDay ) % 7;
19391					thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" +
19392						"<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>";
19393				}
19394				calender += thead + "</tr></thead><tbody>";
19395				daysInMonth = this._getDaysInMonth( drawYear, drawMonth );
19396				if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {
19397					inst.selectedDay = Math.min( inst.selectedDay, daysInMonth );
19398				}
19399				leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;
19400				curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate
19401				numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)
19402				this.maxRows = numRows;
19403				printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );
19404				for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows
19405					calender += "<tr>";
19406					tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
19407						this._get( inst, "calculateWeek" )( printDate ) + "</td>" );
19408					for ( dow = 0; dow < 7; dow++ ) { // create date picker days
19409						daySettings = ( beforeShowDay ?
19410							beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] );
19411						otherMonth = ( printDate.getMonth() !== drawMonth );
19412						unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||
19413							( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );
19414						tbody += "<td class='" +
19415							( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends
19416							( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months
19417							( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key
19418							( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?
19419
19420							// or defaultDate is current printedDate and defaultDate is selectedDate
19421							" " + this._dayOverClass : "" ) + // highlight selected day
19422							( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) +  // highlight unselectable days
19423							( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates
19424							( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day
19425							( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different)
19426							( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "&#39;" ) + "'" : "" ) + // cell title
19427							( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions
19428							( otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
19429							( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
19430							( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) +
19431							( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day
19432							( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months
19433							"' href='#' aria-current='" + ( printDate.getTime() === currentDate.getTime() ? "true" : "false" ) + // mark date as selected for screen reader
19434							"' data-date='" + printDate.getDate() + // store date as data
19435							"'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date
19436						printDate.setDate( printDate.getDate() + 1 );
19437						printDate = this._daylightSavingAdjust( printDate );
19438					}
19439					calender += tbody + "</tr>";
19440				}
19441				drawMonth++;
19442				if ( drawMonth > 11 ) {
19443					drawMonth = 0;
19444					drawYear++;
19445				}
19446				calender += "</tbody></table>" + ( isMultiMonth ? "</div>" +
19447							( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" );
19448				group += calender;
19449			}
19450			html += group;
19451		}
19452		html += buttonPanel;
19453		inst._keyEvent = false;
19454		return html;
19455	},
19456
19457	/* Generate the month and year header. */
19458	_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,
19459			secondary, monthNames, monthNamesShort ) {
19460
19461		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
19462			changeMonth = this._get( inst, "changeMonth" ),
19463			changeYear = this._get( inst, "changeYear" ),
19464			showMonthAfterYear = this._get( inst, "showMonthAfterYear" ),
19465			selectMonthLabel = this._get( inst, "selectMonthLabel" ),
19466			selectYearLabel = this._get( inst, "selectYearLabel" ),
19467			html = "<div class='ui-datepicker-title'>",
19468			monthHtml = "";
19469
19470		// Month selection
19471		if ( secondary || !changeMonth ) {
19472			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>";
19473		} else {
19474			inMinYear = ( minDate && minDate.getFullYear() === drawYear );
19475			inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );
19476			monthHtml += "<select class='ui-datepicker-month' aria-label='" + selectMonthLabel + "' data-handler='selectMonth' data-event='change'>";
19477			for ( month = 0; month < 12; month++ ) {
19478				if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {
19479					monthHtml += "<option value='" + month + "'" +
19480						( month === drawMonth ? " selected='selected'" : "" ) +
19481						">" + monthNamesShort[ month ] + "</option>";
19482				}
19483			}
19484			monthHtml += "</select>";
19485		}
19486
19487		if ( !showMonthAfterYear ) {
19488			html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" );
19489		}
19490
19491		// Year selection
19492		if ( !inst.yearshtml ) {
19493			inst.yearshtml = "";
19494			if ( secondary || !changeYear ) {
19495				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
19496			} else {
19497
19498				// determine range of years to display
19499				years = this._get( inst, "yearRange" ).split( ":" );
19500				thisYear = new Date().getFullYear();
19501				determineYear = function( value ) {
19502					var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :
19503						( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) :
19504						parseInt( value, 10 ) ) );
19505					return ( isNaN( year ) ? thisYear : year );
19506				};
19507				year = determineYear( years[ 0 ] );
19508				endYear = Math.max( year, determineYear( years[ 1 ] || "" ) );
19509				year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );
19510				endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );
19511				inst.yearshtml += "<select class='ui-datepicker-year' aria-label='" + selectYearLabel + "' data-handler='selectYear' data-event='change'>";
19512				for ( ; year <= endYear; year++ ) {
19513					inst.yearshtml += "<option value='" + year + "'" +
19514						( year === drawYear ? " selected='selected'" : "" ) +
19515						">" + year + "</option>";
19516				}
19517				inst.yearshtml += "</select>";
19518
19519				html += inst.yearshtml;
19520				inst.yearshtml = null;
19521			}
19522		}
19523
19524		html += this._get( inst, "yearSuffix" );
19525		if ( showMonthAfterYear ) {
19526			html += ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" ) + monthHtml;
19527		}
19528		html += "</div>"; // Close datepicker_header
19529		return html;
19530	},
19531
19532	/* Adjust one of the date sub-fields. */
19533	_adjustInstDate: function( inst, offset, period ) {
19534		var year = inst.selectedYear + ( period === "Y" ? offset : 0 ),
19535			month = inst.selectedMonth + ( period === "M" ? offset : 0 ),
19536			day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ),
19537			date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );
19538
19539		inst.selectedDay = date.getDate();
19540		inst.drawMonth = inst.selectedMonth = date.getMonth();
19541		inst.drawYear = inst.selectedYear = date.getFullYear();
19542		if ( period === "M" || period === "Y" ) {
19543			this._notifyChange( inst );
19544		}
19545	},
19546
19547	/* Ensure a date is within any min/max bounds. */
19548	_restrictMinMax: function( inst, date ) {
19549		var minDate = this._getMinMaxDate( inst, "min" ),
19550			maxDate = this._getMinMaxDate( inst, "max" ),
19551			newDate = ( minDate && date < minDate ? minDate : date );
19552		return ( maxDate && newDate > maxDate ? maxDate : newDate );
19553	},
19554
19555	/* Notify change of month/year. */
19556	_notifyChange: function( inst ) {
19557		var onChange = this._get( inst, "onChangeMonthYear" );
19558		if ( onChange ) {
19559			onChange.apply( ( inst.input ? inst.input[ 0 ] : null ),
19560				[ inst.selectedYear, inst.selectedMonth + 1, inst ] );
19561		}
19562	},
19563
19564	/* Determine the number of months to show. */
19565	_getNumberOfMonths: function( inst ) {
19566		var numMonths = this._get( inst, "numberOfMonths" );
19567		return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) );
19568	},
19569
19570	/* Determine the current maximum date - ensure no time components are set. */
19571	_getMinMaxDate: function( inst, minMax ) {
19572		return this._determineDate( inst, this._get( inst, minMax + "Date" ), null );
19573	},
19574
19575	/* Find the number of days in a given month. */
19576	_getDaysInMonth: function( year, month ) {
19577		return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();
19578	},
19579
19580	/* Find the day of the week of the first of a month. */
19581	_getFirstDayOfMonth: function( year, month ) {
19582		return new Date( year, month, 1 ).getDay();
19583	},
19584
19585	/* Determines if we should allow a "next/prev" month display change. */
19586	_canAdjustMonth: function( inst, offset, curYear, curMonth ) {
19587		var numMonths = this._getNumberOfMonths( inst ),
19588			date = this._daylightSavingAdjust( new Date( curYear,
19589			curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );
19590
19591		if ( offset < 0 ) {
19592			date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );
19593		}
19594		return this._isInRange( inst, date );
19595	},
19596
19597	/* Is the given date in the accepted range? */
19598	_isInRange: function( inst, date ) {
19599		var yearSplit, currentYear,
19600			minDate = this._getMinMaxDate( inst, "min" ),
19601			maxDate = this._getMinMaxDate( inst, "max" ),
19602			minYear = null,
19603			maxYear = null,
19604			years = this._get( inst, "yearRange" );
19605			if ( years ) {
19606				yearSplit = years.split( ":" );
19607				currentYear = new Date().getFullYear();
19608				minYear = parseInt( yearSplit[ 0 ], 10 );
19609				maxYear = parseInt( yearSplit[ 1 ], 10 );
19610				if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) {
19611					minYear += currentYear;
19612				}
19613				if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) {
19614					maxYear += currentYear;
19615				}
19616			}
19617
19618		return ( ( !minDate || date.getTime() >= minDate.getTime() ) &&
19619			( !maxDate || date.getTime() <= maxDate.getTime() ) &&
19620			( !minYear || date.getFullYear() >= minYear ) &&
19621			( !maxYear || date.getFullYear() <= maxYear ) );
19622	},
19623
19624	/* Provide the configuration settings for formatting/parsing. */
19625	_getFormatConfig: function( inst ) {
19626		var shortYearCutoff = this._get( inst, "shortYearCutoff" );
19627		shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
19628			new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
19629		return { shortYearCutoff: shortYearCutoff,
19630			dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ),
19631			monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) };
19632	},
19633
19634	/* Format the given date for display. */
19635	_formatDate: function( inst, day, month, year ) {
19636		if ( !day ) {
19637			inst.currentDay = inst.selectedDay;
19638			inst.currentMonth = inst.selectedMonth;
19639			inst.currentYear = inst.selectedYear;
19640		}
19641		var date = ( day ? ( typeof day === "object" ? day :
19642			this._daylightSavingAdjust( new Date( year, month, day ) ) ) :
19643			this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
19644		return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) );
19645	}
19646} );
19647
19648/*
19649 * Bind hover events for datepicker elements.
19650 * Done via delegate so the binding only occurs once in the lifetime of the parent div.
19651 * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
19652 */
19653function datepicker_bindHover( dpDiv ) {
19654	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
19655	return dpDiv.on( "mouseout", selector, function() {
19656			$( this ).removeClass( "ui-state-hover" );
19657			if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
19658				$( this ).removeClass( "ui-datepicker-prev-hover" );
19659			}
19660			if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
19661				$( this ).removeClass( "ui-datepicker-next-hover" );
19662			}
19663		} )
19664		.on( "mouseover", selector, datepicker_handleMouseover );
19665}
19666
19667function datepicker_handleMouseover() {
19668	if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {
19669		$( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" );
19670		$( this ).addClass( "ui-state-hover" );
19671		if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
19672			$( this ).addClass( "ui-datepicker-prev-hover" );
19673		}
19674		if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
19675			$( this ).addClass( "ui-datepicker-next-hover" );
19676		}
19677	}
19678}
19679
19680/* jQuery extend now ignores nulls! */
19681function datepicker_extendRemove( target, props ) {
19682	$.extend( target, props );
19683	for ( var name in props ) {
19684		if ( props[ name ] == null ) {
19685			target[ name ] = props[ name ];
19686		}
19687	}
19688	return target;
19689}
19690
19691/* Invoke the datepicker functionality.
19692   @param  options  string - a command, optionally followed by additional parameters or
19693					Object - settings for attaching new datepicker functionality
19694   @return  jQuery object */
19695$.fn.datepicker = function( options ) {
19696
19697	/* Verify an empty collection wasn't passed - Fixes #6976 */
19698	if ( !this.length ) {
19699		return this;
19700	}
19701
19702	/* Initialise the date picker. */
19703	if ( !$.datepicker.initialized ) {
19704		$( document ).on( "mousedown", $.datepicker._checkExternalClick );
19705		$.datepicker.initialized = true;
19706	}
19707
19708	/* Append datepicker main container to body if not exist. */
19709	if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) {
19710		$( "body" ).append( $.datepicker.dpDiv );
19711	}
19712
19713	var otherArgs = Array.prototype.slice.call( arguments, 1 );
19714	if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) {
19715		return $.datepicker[ "_" + options + "Datepicker" ].
19716			apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
19717	}
19718	if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) {
19719		return $.datepicker[ "_" + options + "Datepicker" ].
19720			apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
19721	}
19722	return this.each( function() {
19723		if ( typeof options === "string" ) {
19724			$.datepicker[ "_" + options + "Datepicker" ]
19725				.apply( $.datepicker, [ this ].concat( otherArgs ) );
19726		} else {
19727			$.datepicker._attachDatepicker( this, options );
19728		}
19729	} );
19730};
19731
19732$.datepicker = new Datepicker(); // singleton instance
19733$.datepicker.initialized = false;
19734$.datepicker.uuid = new Date().getTime();
19735$.datepicker.version = "1.1
vendor: 7,560 bytes, lines 19735-20024
197353.1";
19736
19737var widgetsDatepicker = $.datepicker;
19738
19739
19740
19741// This file is deprecated
19742var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
19743
19744/*!
19745 * jQuery UI Mouse 1.13.1
19746 * http://jqueryui.com
19747 *
19748 * Copyright jQuery Foundation and other contributors
19749 * Released under the MIT license.
19750 * http://jquery.org/license
19751 */
19752
19753//>>label: Mouse
19754//>>group: Widgets
19755//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
19756//>>docs: http://api.jqueryui.com/mouse/
19757
19758
19759var mouseHandled = false;
19760$( document ).on( "mouseup", function() {
19761	mouseHandled = false;
19762} );
19763
19764var widgetsMouse = $.widget( "ui.mouse", {
19765	version: "1.13.1",
19766	options: {
19767		cancel: "input, textarea, button, select, option",
19768		distance: 1,
19769		delay: 0
19770	},
19771	_mouseInit: function() {
19772		var that = this;
19773
19774		this.element
19775			.on( "mousedown." + this.widgetName, function( event ) {
19776				return that._mouseDown( event );
19777			} )
19778			.on( "click." + this.widgetName, function( event ) {
19779				if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
19780					$.removeData( event.target, that.widgetName + ".preventClickEvent" );
19781					event.stopImmediatePropagation();
19782					return false;
19783				}
19784			} );
19785
19786		this.started = false;
19787	},
19788
19789	// TODO: make sure destroying one instance of mouse doesn't mess with
19790	// other instances of mouse
19791	_mouseDestroy: function() {
19792		this.element.off( "." + this.widgetName );
19793		if ( this._mouseMoveDelegate ) {
19794			this.document
19795				.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
19796				.off( "mouseup." + this.widgetName, this._mouseUpDelegate );
19797		}
19798	},
19799
19800	_mouseDown: function( event ) {
19801
19802		// don't let more than one widget handle mouseStart
19803		if ( mouseHandled ) {
19804			return;
19805		}
19806
19807		this._mouseMoved = false;
19808
19809		// We may have missed mouseup (out of window)
19810		if ( this._mouseStarted ) {
19811			this._mouseUp( event );
19812		}
19813
19814		this._mouseDownEvent = event;
19815
19816		var that = this,
19817			btnIsLeft = ( event.which === 1 ),
19818
19819			// event.target.nodeName works around a bug in IE 8 with
19820			// disabled inputs (#7620)
19821			elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
19822				$( event.target ).closest( this.options.cancel ).length : false );
19823		if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
19824			return true;
19825		}
19826
19827		this.mouseDelayMet = !this.options.delay;
19828		if ( !this.mouseDelayMet ) {
19829			this._mouseDelayTimer = setTimeout( function() {
19830				that.mouseDelayMet = true;
19831			}, this.options.delay );
19832		}
19833
19834		if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
19835			this._mouseStarted = ( this._mouseStart( event ) !== false );
19836			if ( !this._mouseStarted ) {
19837				event.preventDefault();
19838				return true;
19839			}
19840		}
19841
19842		// Click event may never have fired (Gecko & Opera)
19843		if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
19844			$.removeData( event.target, this.widgetName + ".preventClickEvent" );
19845		}
19846
19847		// These delegates are required to keep context
19848		this._mouseMoveDelegate = function( event ) {
19849			return that._mouseMove( event );
19850		};
19851		this._mouseUpDelegate = function( event ) {
19852			return that._mouseUp( event );
19853		};
19854
19855		this.document
19856			.on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
19857			.on( "mouseup." + this.widgetName, this._mouseUpDelegate );
19858
19859		event.preventDefault();
19860
19861		mouseHandled = true;
19862		return true;
19863	},
19864
19865	_mouseMove: function( event ) {
19866
19867		// Only check for mouseups outside the document if you've moved inside the document
19868		// at least once. This prevents the firing of mouseup in the case of IE<9, which will
19869		// fire a mousemove event if content is placed under the cursor. See #7778
19870		// Support: IE <9
19871		if ( this._mouseMoved ) {
19872
19873			// IE mouseup check - mouseup happened when mouse was out of window
19874			if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
19875					!event.button ) {
19876				return this._mouseUp( event );
19877
19878			// Iframe mouseup check - mouseup occurred in another document
19879			} else if ( !event.which ) {
19880
19881				// Support: Safari <=8 - 9
19882				// Safari sets which to 0 if you press any of the following keys
19883				// during a drag (#14461)
19884				if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
19885						event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
19886					this.ignoreMissingWhich = true;
19887				} else if ( !this.ignoreMissingWhich ) {
19888					return this._mouseUp( event );
19889				}
19890			}
19891		}
19892
19893		if ( event.which || event.button ) {
19894			this._mouseMoved = true;
19895		}
19896
19897		if ( this._mouseStarted ) {
19898			this._mouseDrag( event );
19899			return event.preventDefault();
19900		}
19901
19902		if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
19903			this._mouseStarted =
19904				( this._mouseStart( this._mouseDownEvent, event ) !== false );
19905			if ( this._mouseStarted ) {
19906				this._mouseDrag( event );
19907			} else {
19908				this._mouseUp( event );
19909			}
19910		}
19911
19912		return !this._mouseStarted;
19913	},
19914
19915	_mouseUp: function( event ) {
19916		this.document
19917			.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
19918			.off( "mouseup." + this.widgetName, this._mouseUpDelegate );
19919
19920		if ( this._mouseStarted ) {
19921			this._mouseStarted = false;
19922
19923			if ( event.target === this._mouseDownEvent.target ) {
19924				$.data( event.target, this.widgetName + ".preventClickEvent", true );
19925			}
19926
19927			this._mouseStop( event );
19928		}
19929
19930		if ( this._mouseDelayTimer ) {
19931			clearTimeout( this._mouseDelayTimer );
19932			delete this._mouseDelayTimer;
19933		}
19934
19935		this.ignoreMissingWhich = false;
19936		mouseHandled = false;
19937		event.preventDefault();
19938	},
19939
19940	_mouseDistanceMet: function( event ) {
19941		return ( Math.max(
19942				Math.abs( this._mouseDownEvent.pageX - event.pageX ),
19943				Math.abs( this._mouseDownEvent.pageY - event.pageY )
19944			) >= this.options.distance
19945		);
19946	},
19947
19948	_mouseDelayMet: function( /* event */ ) {
19949		return this.mouseDelayMet;
19950	},
19951
19952	// These are placeholder methods, to be overriden by extending plugin
19953	_mouseStart: function( /* event */ ) {},
19954	_mouseDrag: function( /* event */ ) {},
19955	_mouseStop: function( /* event */ ) {},
19956	_mouseCapture: function( /* event */ ) {
19957		return true;
19958	}
19959} );
19960
19961
19962
19963// $.ui.plugin is deprecated. Use $.widget() extensions instead.
19964var plugin = $.ui.plugin = {
19965	add: function( module, option, set ) {
19966		var i,
19967			proto = $.ui[ module ].prototype;
19968		for ( i in set ) {
19969			proto.plugins[ i ] = proto.plugins[ i ] || [];
19970			proto.plugins[ i ].push( [ option, set[ i ] ] );
19971		}
19972	},
19973	call: function( instance, name, args, allowDisconnected ) {
19974		var i,
19975			set = instance.plugins[ name ];
19976
19977		if ( !set ) {
19978			return;
19979		}
19980
19981		if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
19982				instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
19983			return;
19984		}
19985
19986		for ( i = 0; i < set.length; i++ ) {
19987			if ( instance.options[ set[ i ][ 0 ] ] ) {
19988				set[ i ][ 1 ].apply( instance.element, args );
19989			}
19990		}
19991	}
19992};
19993
19994
19995
19996var safeBlur = $.ui.safeBlur = function( element ) {
19997
19998	// Support: IE9 - 10 only
19999	// If the <body> is blurred, IE will switch windows, see #9420
20000	if ( element && element.nodeName.toLowerCase() !== "body" ) {
20001		$( element ).trigger( "blur" );
20002	}
20003};
20004
20005
20006/*!
20007 * jQuery UI Draggable 1.13.1
20008 * http://jqueryui.com
20009 *
20010 * Copyright jQuery Foundation and other contributors
20011 * Released under the MIT license.
20012 * http://jquery.org/license
20013 */
20014
20015//>>label: Draggable
20016//>>group: Interactions
20017//>>description: Enables dragging functionality for any element.
20018//>>docs: http://api.jqueryui.com/draggable/
20019//>>demos: http://jqueryui.com/draggable/
20020//>>css.structure: ../../themes/base/draggable.css
20021
20022
20023$.widget( "ui.draggable", $.ui.mouse, {
20024	version: "1.13.1
vendor: 8,684 bytes, lines 20024-20370
20024",
20025	widgetEventPrefix: "drag",
20026	options: {
20027		addClasses: true,
20028		appendTo: "parent",
20029		axis: false,
20030		connectToSortable: false,
20031		containment: false,
20032		cursor: "auto",
20033		cursorAt: false,
20034		grid: false,
20035		handle: false,
20036		helper: "original",
20037		iframeFix: false,
20038		opacity: false,
20039		refreshPositions: false,
20040		revert: false,
20041		revertDuration: 500,
20042		scope: "default",
20043		scroll: true,
20044		scrollSensitivity: 20,
20045		scrollSpeed: 20,
20046		snap: false,
20047		snapMode: "both",
20048		snapTolerance: 20,
20049		stack: false,
20050		zIndex: false,
20051
20052		// Callbacks
20053		drag: null,
20054		start: null,
20055		stop: null
20056	},
20057	_create: function() {
20058
20059		if ( this.options.helper === "original" ) {
20060			this._setPositionRelative();
20061		}
20062		if ( this.options.addClasses ) {
20063			this._addClass( "ui-draggable" );
20064		}
20065		this._setHandleClassName();
20066
20067		this._mouseInit();
20068	},
20069
20070	_setOption: function( key, value ) {
20071		this._super( key, value );
20072		if ( key === "handle" ) {
20073			this._removeHandleClassName();
20074			this._setHandleClassName();
20075		}
20076	},
20077
20078	_destroy: function() {
20079		if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
20080			this.destroyOnClear = true;
20081			return;
20082		}
20083		this._removeHandleClassName();
20084		this._mouseDestroy();
20085	},
20086
20087	_mouseCapture: function( event ) {
20088		var o = this.options;
20089
20090		// Among others, prevent a drag on a resizable-handle
20091		if ( this.helper || o.disabled ||
20092				$( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
20093			return false;
20094		}
20095
20096		//Quit if we're not on a valid handle
20097		this.handle = this._getHandle( event );
20098		if ( !this.handle ) {
20099			return false;
20100		}
20101
20102		this._blurActiveElement( event );
20103
20104		this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
20105
20106		return true;
20107
20108	},
20109
20110	_blockFrames: function( selector ) {
20111		this.iframeBlocks = this.document.find( selector ).map( function() {
20112			var iframe = $( this );
20113
20114			return $( "<div>" )
20115				.css( "position", "absolute" )
20116				.appendTo( iframe.parent() )
20117				.outerWidth( iframe.outerWidth() )
20118				.outerHeight( iframe.outerHeight() )
20119				.offset( iframe.offset() )[ 0 ];
20120		} );
20121	},
20122
20123	_unblockFrames: function() {
20124		if ( this.iframeBlocks ) {
20125			this.iframeBlocks.remove();
20126			delete this.iframeBlocks;
20127		}
20128	},
20129
20130	_blurActiveElement: function( event ) {
20131		var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
20132			target = $( event.target );
20133
20134		// Don't blur if the event occurred on an element that is within
20135		// the currently focused element
20136		// See #10527, #12472
20137		if ( target.closest( activeElement ).length ) {
20138			return;
20139		}
20140
20141		// Blur any element that currently has focus, see #4261
20142		$.ui.safeBlur( activeElement );
20143	},
20144
20145	_mouseStart: function( event ) {
20146
20147		var o = this.options;
20148
20149		//Create and append the visible helper
20150		this.helper = this._createHelper( event );
20151
20152		this._addClass( this.helper, "ui-draggable-dragging" );
20153
20154		//Cache the helper size
20155		this._cacheHelperProportions();
20156
20157		//If ddmanager is used for droppables, set the global draggable
20158		if ( $.ui.ddmanager ) {
20159			$.ui.ddmanager.current = this;
20160		}
20161
20162		/*
20163		 * - Position generation -
20164		 * This block generates everything position related - it's the core of draggables.
20165		 */
20166
20167		//Cache the margins of the original element
20168		this._cacheMargins();
20169
20170		//Store the helper's css position
20171		this.cssPosition = this.helper.css( "position" );
20172		this.scrollParent = this.helper.scrollParent( true );
20173		this.offsetParent = this.helper.offsetParent();
20174		this.hasFixedAncestor = this.helper.parents().filter( function() {
20175				return $( this ).css( "position" ) === "fixed";
20176			} ).length > 0;
20177
20178		//The element's absolute position on the page minus margins
20179		this.positionAbs = this.element.offset();
20180		this._refreshOffsets( event );
20181
20182		//Generate the original position
20183		this.originalPosition = this.position = this._generatePosition( event, false );
20184		this.originalPageX = event.pageX;
20185		this.originalPageY = event.pageY;
20186
20187		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
20188		if ( o.cursorAt ) {
20189			this._adjustOffsetFromHelper( o.cursorAt );
20190		}
20191
20192		//Set a containment if given in the options
20193		this._setContainment();
20194
20195		//Trigger event + callbacks
20196		if ( this._trigger( "start", event ) === false ) {
20197			this._clear();
20198			return false;
20199		}
20200
20201		//Recache the helper size
20202		this._cacheHelperProportions();
20203
20204		//Prepare the droppable offsets
20205		if ( $.ui.ddmanager && !o.dropBehaviour ) {
20206			$.ui.ddmanager.prepareOffsets( this, event );
20207		}
20208
20209		// Execute the drag once - this causes the helper not to be visible before getting its
20210		// correct position
20211		this._mouseDrag( event, true );
20212
20213		// If the ddmanager is used for droppables, inform the manager that dragging has started
20214		// (see #5003)
20215		if ( $.ui.ddmanager ) {
20216			$.ui.ddmanager.dragStart( this, event );
20217		}
20218
20219		return true;
20220	},
20221
20222	_refreshOffsets: function( event ) {
20223		this.offset = {
20224			top: this.positionAbs.top - this.margins.top,
20225			left: this.positionAbs.left - this.margins.left,
20226			scroll: false,
20227			parent: this._getParentOffset(),
20228			relative: this._getRelativeOffset()
20229		};
20230
20231		this.offset.click = {
20232			left: event.pageX - this.offset.left,
20233			top: event.pageY - this.offset.top
20234		};
20235	},
20236
20237	_mouseDrag: function( event, noPropagation ) {
20238
20239		// reset any necessary cached properties (see #5009)
20240		if ( this.hasFixedAncestor ) {
20241			this.offset.parent = this._getParentOffset();
20242		}
20243
20244		//Compute the helpers position
20245		this.position = this._generatePosition( event, true );
20246		this.positionAbs = this._convertPositionTo( "absolute" );
20247
20248		//Call plugins and callbacks and use the resulting position if something is returned
20249		if ( !noPropagation ) {
20250			var ui = this._uiHash();
20251			if ( this._trigger( "drag", event, ui ) === false ) {
20252				this._mouseUp( new $.Event( "mouseup", event ) );
20253				return false;
20254			}
20255			this.position = ui.position;
20256		}
20257
20258		this.helper[ 0 ].style.left = this.position.left + "px";
20259		this.helper[ 0 ].style.top = this.position.top + "px";
20260
20261		if ( $.ui.ddmanager ) {
20262			$.ui.ddmanager.drag( this, event );
20263		}
20264
20265		return false;
20266	},
20267
20268	_mouseStop: function( event ) {
20269
20270		//If we are using droppables, inform the manager about the drop
20271		var that = this,
20272			dropped = false;
20273		if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
20274			dropped = $.ui.ddmanager.drop( this, event );
20275		}
20276
20277		//if a drop comes from outside (a sortable)
20278		if ( this.dropped ) {
20279			dropped = this.dropped;
20280			this.dropped = false;
20281		}
20282
20283		if ( ( this.options.revert === "invalid" && !dropped ) ||
20284				( this.options.revert === "valid" && dropped ) ||
20285				this.options.revert === true || ( typeof this.options.revert === "function" &&
20286				this.options.revert.call( this.element, dropped ) )
20287		) {
20288			$( this.helper ).animate(
20289				this.originalPosition,
20290				parseInt( this.options.revertDuration, 10 ),
20291				function() {
20292					if ( that._trigger( "stop", event ) !== false ) {
20293						that._clear();
20294					}
20295				}
20296			);
20297		} else {
20298			if ( this._trigger( "stop", event ) !== false ) {
20299				this._clear();
20300			}
20301		}
20302
20303		return false;
20304	},
20305
20306	_mouseUp: function( event ) {
20307		this._unblockFrames();
20308
20309		// If the ddmanager is used for droppables, inform the manager that dragging has stopped
20310		// (see #5003)
20311		if ( $.ui.ddmanager ) {
20312			$.ui.ddmanager.dragStop( this, event );
20313		}
20314
20315		// Only need to focus if the event occurred on the draggable itself, see #10527
20316		if ( this.handleElement.is( event.target ) ) {
20317
20318			// The interaction is over; whether or not the click resulted in a drag,
20319			// focus the element
20320			this.element.trigger( "focus" );
20321		}
20322
20323		return $.ui.mouse.prototype._mouseUp.call( this, event );
20324	},
20325
20326	cancel: function() {
20327
20328		if ( this.helper.is( ".ui-draggable-dragging" ) ) {
20329			this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );
20330		} else {
20331			this._clear();
20332		}
20333
20334		return this;
20335
20336	},
20337
20338	_getHandle: function( event ) {
20339		return this.options.handle ?
20340			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
20341			true;
20342	},
20343
20344	_setHandleClassName: function() {
20345		this.handleElement = this.options.handle ?
20346			this.element.find( this.options.handle ) : this.element;
20347		this._addClass( this.handleElement, "ui-draggable-handle" );
20348	},
20349
20350	_removeHandleClassName: function() {
20351		this._removeClass( this.handleElement, "ui-draggable-handle" );
20352	},
20353
20354	_createHelper: function( event ) {
20355
20356		var o = this.options,
20357			helperIsFunction = typeof o.helper === "function",
20358			helper = helperIsFunction ?
20359				$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
20360				( o.helper === "clone" ?
20361					this.element.clone().removeAttr( "id" ) :
20362					this.element );
20363
20364		if ( !helper.parents( "body" ).length ) {
20365			helper.appendTo( ( o.appendTo === "parent" ?
20366				this.element[ 0 ].parentNode :
20367				o.appendTo ) );
20368		}
20369
20370		// 
20370Http://bugs.jqueryui.com/ticket/9446
20371		// a helper function can return the original element
20372		// which wouldn't have been set to relative in _create
20373		if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
20374			this._setPositionRelative();
20375		}
20376
20377		if ( helper[ 0 ] !== this.element[ 0 ] &&
20378				!( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {
20379			helper.css( "position", "absolute" );
20380		}
20381
20382		return helper;
20383
20384	},
20385
20386	_setPositionRelative: function() {
20387		if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
20388			this.element[ 0 ].style.position = "relative";
20389		}
20390	},
20391
20392	_adjustOffsetFromHelper: function( obj ) {
20393		if ( typeof obj === "string" ) {
20394			obj = obj.split( " " );
20395		}
20396		if ( Array
vendor: 14,647 bytes, lines 20396-20876
20396.isArray( obj ) ) {
20397			obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
20398		}
20399		if ( "left" in obj ) {
20400			this.offset.click.left = obj.left + this.margins.left;
20401		}
20402		if ( "right" in obj ) {
20403			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
20404		}
20405		if ( "top" in obj ) {
20406			this.offset.click.top = obj.top + this.margins.top;
20407		}
20408		if ( "bottom" in obj ) {
20409			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
20410		}
20411	},
20412
20413	_isRootNode: function( element ) {
20414		return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
20415	},
20416
20417	_getParentOffset: function() {
20418
20419		//Get the offsetParent and cache its position
20420		var po = this.offsetParent.offset(),
20421			document = this.document[ 0 ];
20422
20423		// This is a special case where we need to modify a offset calculated on start, since the
20424		// following happened:
20425		// 1. The position of the helper is absolute, so it's position is calculated based on the
20426		// next positioned parent
20427		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
20428		// the document, which means that the scroll is included in the initial calculation of the
20429		// offset of the parent, and never recalculated upon drag
20430		if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&
20431				$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
20432			po.left += this.scrollParent.scrollLeft();
20433			po.top += this.scrollParent.scrollTop();
20434		}
20435
20436		if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
20437			po = { top: 0, left: 0 };
20438		}
20439
20440		return {
20441			top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
20442			left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
20443		};
20444
20445	},
20446
20447	_getRelativeOffset: function() {
20448		if ( this.cssPosition !== "relative" ) {
20449			return { top: 0, left: 0 };
20450		}
20451
20452		var p = this.element.position(),
20453			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
20454
20455		return {
20456			top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
20457				( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
20458			left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
20459				( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
20460		};
20461
20462	},
20463
20464	_cacheMargins: function() {
20465		this.margins = {
20466			left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),
20467			top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),
20468			right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),
20469			bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )
20470		};
20471	},
20472
20473	_cacheHelperProportions: function() {
20474		this.helperProportions = {
20475			width: this.helper.outerWidth(),
20476			height: this.helper.outerHeight()
20477		};
20478	},
20479
20480	_setContainment: function() {
20481
20482		var isUserScrollable, c, ce,
20483			o = this.options,
20484			document = this.document[ 0 ];
20485
20486		this.relativeContainer = null;
20487
20488		if ( !o.containment ) {
20489			this.containment = null;
20490			return;
20491		}
20492
20493		if ( o.containment === "window" ) {
20494			this.containment = [
20495				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
20496				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
20497				$( window ).scrollLeft() + $( window ).width() -
20498					this.helperProportions.width - this.margins.left,
20499				$( window ).scrollTop() +
20500					( $( window ).height() || document.body.parentNode.scrollHeight ) -
20501					this.helperProportions.height - this.margins.top
20502			];
20503			return;
20504		}
20505
20506		if ( o.containment === "document" ) {
20507			this.containment = [
20508				0,
20509				0,
20510				$( document ).width() - this.helperProportions.width - this.margins.left,
20511				( $( document ).height() || document.body.parentNode.scrollHeight ) -
20512					this.helperProportions.height - this.margins.top
20513			];
20514			return;
20515		}
20516
20517		if ( o.containment.constructor === Array ) {
20518			this.containment = o.containment;
20519			return;
20520		}
20521
20522		if ( o.containment === "parent" ) {
20523			o.containment = this.helper[ 0 ].parentNode;
20524		}
20525
20526		c = $( o.containment );
20527		ce = c[ 0 ];
20528
20529		if ( !ce ) {
20530			return;
20531		}
20532
20533		isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
20534
20535		this.containment = [
20536			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +
20537				( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
20538			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +
20539				( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
20540			( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
20541				( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
20542				( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
20543				this.helperProportions.width -
20544				this.margins.left -
20545				this.margins.right,
20546			( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
20547				( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
20548				( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
20549				this.helperProportions.height -
20550				this.margins.top -
20551				this.margins.bottom
20552		];
20553		this.relativeContainer = c;
20554	},
20555
20556	_convertPositionTo: function( d, pos ) {
20557
20558		if ( !pos ) {
20559			pos = this.position;
20560		}
20561
20562		var mod = d === "absolute" ? 1 : -1,
20563			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
20564
20565		return {
20566			top: (
20567
20568				// The absolute mouse position
20569				pos.top	+
20570
20571				// Only for relative positioned nodes: Relative offset from element to offset parent
20572				this.offset.relative.top * mod +
20573
20574				// The offsetParent's offset without borders (offset + border)
20575				this.offset.parent.top * mod -
20576				( ( this.cssPosition === "fixed" ?
20577					-this.offset.scroll.top :
20578					( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )
20579			),
20580			left: (
20581
20582				// The absolute mouse position
20583				pos.left +
20584
20585				// Only for relative positioned nodes: Relative offset from element to offset parent
20586				this.offset.relative.left * mod +
20587
20588				// The offsetParent's offset without borders (offset + border)
20589				this.offset.parent.left * mod	-
20590				( ( this.cssPosition === "fixed" ?
20591					-this.offset.scroll.left :
20592					( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )
20593			)
20594		};
20595
20596	},
20597
20598	_generatePosition: function( event, constrainPosition ) {
20599
20600		var containment, co, top, left,
20601			o = this.options,
20602			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
20603			pageX = event.pageX,
20604			pageY = event.pageY;
20605
20606		// Cache the scroll
20607		if ( !scrollIsRootNode || !this.offset.scroll ) {
20608			this.offset.scroll = {
20609				top: this.scrollParent.scrollTop(),
20610				left: this.scrollParent.scrollLeft()
20611			};
20612		}
20613
20614		/*
20615		 * - Position constraining -
20616		 * Constrain the position to a mix of grid, containment.
20617		 */
20618
20619		// If we are not dragging yet, we won't check for options
20620		if ( constrainPosition ) {
20621			if ( this.containment ) {
20622				if ( this.relativeContainer ) {
20623					co = this.relativeContainer.offset();
20624					containment = [
20625						this.containment[ 0 ] + co.left,
20626						this.containment[ 1 ] + co.top,
20627						this.containment[ 2 ] + co.left,
20628						this.containment[ 3 ] + co.top
20629					];
20630				} else {
20631					containment = this.containment;
20632				}
20633
20634				if ( event.pageX - this.offset.click.left < containment[ 0 ] ) {
20635					pageX = containment[ 0 ] + this.offset.click.left;
20636				}
20637				if ( event.pageY - this.offset.click.top < containment[ 1 ] ) {
20638					pageY = containment[ 1 ] + this.offset.click.top;
20639				}
20640				if ( event.pageX - this.offset.click.left > containment[ 2 ] ) {
20641					pageX = containment[ 2 ] + this.offset.click.left;
20642				}
20643				if ( event.pageY - this.offset.click.top > containment[ 3 ] ) {
20644					pageY = containment[ 3 ] + this.offset.click.top;
20645				}
20646			}
20647
20648			if ( o.grid ) {
20649
20650				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid
20651				// argument errors in IE (see ticket #6950)
20652				top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -
20653					this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;
20654				pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||
20655					top - this.offset.click.top > containment[ 3 ] ) ?
20656						top :
20657						( ( top - this.offset.click.top >= containment[ 1 ] ) ?
20658							top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;
20659
20660				left = o.grid[ 0 ] ? this.originalPageX +
20661					Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :
20662					this.originalPageX;
20663				pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||
20664					left - this.offset.click.left > containment[ 2 ] ) ?
20665						left :
20666						( ( left - this.offset.click.left >= containment[ 0 ] ) ?
20667							left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;
20668			}
20669
20670			if ( o.axis === "y" ) {
20671				pageX = this.originalPageX;
20672			}
20673
20674			if ( o.axis === "x" ) {
20675				pageY = this.originalPageY;
20676			}
20677		}
20678
20679		return {
20680			top: (
20681
20682				// The absolute mouse position
20683				pageY -
20684
20685				// Click offset (relative to the element)
20686				this.offset.click.top -
20687
20688				// Only for relative positioned nodes: Relative offset from element to offset parent
20689				this.offset.relative.top -
20690
20691				// The offsetParent's offset without borders (offset + border)
20692				this.offset.parent.top +
20693				( this.cssPosition === "fixed" ?
20694					-this.offset.scroll.top :
20695					( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
20696			),
20697			left: (
20698
20699				// The absolute mouse position
20700				pageX -
20701
20702				// Click offset (relative to the element)
20703				this.offset.click.left -
20704
20705				// Only for relative positioned nodes: Relative offset from element to offset parent
20706				this.offset.relative.left -
20707
20708				// The offsetParent's offset without borders (offset + border)
20709				this.offset.parent.left +
20710				( this.cssPosition === "fixed" ?
20711					-this.offset.scroll.left :
20712					( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
20713			)
20714		};
20715
20716	},
20717
20718	_clear: function() {
20719		this._removeClass( this.helper, "ui-draggable-dragging" );
20720		if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {
20721			this.helper.remove();
20722		}
20723		this.helper = null;
20724		this.cancelHelperRemoval = false;
20725		if ( this.destroyOnClear ) {
20726			this.destroy();
20727		}
20728	},
20729
20730	// From now on bulk stuff - mainly helpers
20731
20732	_trigger: function( type, event, ui ) {
20733		ui = ui || this._uiHash();
20734		$.ui.plugin.call( this, type, [ event, ui, this ], true );
20735
20736		// Absolute position and offset (see #6884 ) have to be recalculated after plugins
20737		if ( /^(drag|start|stop)/.test( type ) ) {
20738			this.positionAbs = this._convertPositionTo( "absolute" );
20739			ui.offset = this.positionAbs;
20740		}
20741		return $.Widget.prototype._trigger.call( this, type, event, ui );
20742	},
20743
20744	plugins: {},
20745
20746	_uiHash: function() {
20747		return {
20748			helper: this.helper,
20749			position: this.position,
20750			originalPosition: this.originalPosition,
20751			offset: this.positionAbs
20752		};
20753	}
20754
20755} );
20756
20757$.ui.plugin.add( "draggable", "connectToSortable", {
20758	start: function( event, ui, draggable ) {
20759		var uiSortable = $.extend( {}, ui, {
20760			item: draggable.element
20761		} );
20762
20763		draggable.sortables = [];
20764		$( draggable.options.connectToSortable ).each( function() {
20765			var sortable = $( this ).sortable( "instance" );
20766
20767			if ( sortable && !sortable.options.disabled ) {
20768				draggable.sortables.push( sortable );
20769
20770				// RefreshPositions is called at drag start to refresh the containerCache
20771				// which is used in drag. This ensures it's initialized and synchronized
20772				// with any changes that might have happened on the page since initialization.
20773				sortable.refreshPositions();
20774				sortable._trigger( "activate", event, uiSortable );
20775			}
20776		} );
20777	},
20778	stop: function( event, ui, draggable ) {
20779		var uiSortable = $.extend( {}, ui, {
20780			item: draggable.element
20781		} );
20782
20783		draggable.cancelHelperRemoval = false;
20784
20785		$.each( draggable.sortables, function() {
20786			var sortable = this;
20787
20788			if ( sortable.isOver ) {
20789				sortable.isOver = 0;
20790
20791				// Allow this sortable to handle removing the helper
20792				draggable.cancelHelperRemoval = true;
20793				sortable.cancelHelperRemoval = false;
20794
20795				// Use _storedCSS To restore properties in the sortable,
20796				// as this also handles revert (#9675) since the draggable
20797				// may have modified them in unexpected ways (#8809)
20798				sortable._storedCSS = {
20799					position: sortable.placeholder.css( "position" ),
20800					top: sortable.placeholder.css( "top" ),
20801					left: sortable.placeholder.css( "left" )
20802				};
20803
20804				sortable._mouseStop( event );
20805
20806				// Once drag has ended, the sortable should return to using
20807				// its original helper, not the shared helper from draggable
20808				sortable.options.helper = sortable.options._helper;
20809			} else {
20810
20811				// Prevent this Sortable from removing the helper.
20812				// However, don't set the draggable to remove the helper
20813				// either as another connected Sortable may yet handle the removal.
20814				sortable.cancelHelperRemoval = true;
20815
20816				sortable._trigger( "deactivate", event, uiSortable );
20817			}
20818		} );
20819	},
20820	drag: function( event, ui, draggable ) {
20821		$.each( draggable.sortables, function() {
20822			var innermostIntersecting = false,
20823				sortable = this;
20824
20825			// Copy over variables that sortable's _intersectsWith uses
20826			sortable.positionAbs = draggable.positionAbs;
20827			sortable.helperProportions = draggable.helperProportions;
20828			sortable.offset.click = draggable.offset.click;
20829
20830			if ( sortable._intersectsWith( sortable.containerCache ) ) {
20831				innermostIntersecting = true;
20832
20833				$.each( draggable.sortables, function() {
20834
20835					// Copy over variables that sortable's _intersectsWith uses
20836					this.positionAbs = draggable.positionAbs;
20837					this.helperProportions = draggable.helperProportions;
20838					this.offset.click = draggable.offset.click;
20839
20840					if ( this !== sortable &&
20841							this._intersectsWith( this.containerCache ) &&
20842							$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
20843						innermostIntersecting = false;
20844					}
20845
20846					return innermostIntersecting;
20847				} );
20848			}
20849
20850			if ( innermostIntersecting ) {
20851
20852				// If it intersects, we use a little isOver variable and set it once,
20853				// so that the move-in stuff gets fired only once.
20854				if ( !sortable.isOver ) {
20855					sortable.isOver = 1;
20856
20857					// Store draggable's parent in case we need to reappend to it later.
20858					draggable._parent = ui.helper.parent();
20859
20860					sortable.currentItem = ui.helper
20861						.appendTo( sortable.element )
20862						.data( "ui-sortable-item", true );
20863
20864					// Store helper option to later restore it
20865					sortable.options._helper = sortable.options.helper;
20866
20867					sortable.options.helper = function() {
20868						return ui.helper[ 0 ];
20869					};
20870
20871					// Fire the start events of the sortable with our passed browser event,
20872					// and our own helper (so it doesn't create a new one)
20873					event.target = sortable.currentItem[ 0 ];
20874					sortable._mouseCapture( event, true );
20875					sortable._mouseStart( event, true, true );
20876
vendor: 10,634 bytes, lines 20877-21242
20877					// Because the browser event is way off the new appended portlet,
20878					// modify necessary variables to reflect the changes
20879					sortable.offset.click.top = draggable.offset.click.top;
20880					sortable.offset.click.left = draggable.offset.click.left;
20881					sortable.offset.parent.left -= draggable.offset.parent.left -
20882						sortable.offset.parent.left;
20883					sortable.offset.parent.top -= draggable.offset.parent.top -
20884						sortable.offset.parent.top;
20885
20886					draggable._trigger( "toSortable", event );
20887
20888					// Inform draggable that the helper is in a valid drop zone,
20889					// used solely in the revert option to handle "valid/invalid".
20890					draggable.dropped = sortable.element;
20891
20892					// Need to refreshPositions of all sortables in the case that
20893					// adding to one sortable changes the location of the other sortables (#9675)
20894					$.each( draggable.sortables, function() {
20895						this.refreshPositions();
20896					} );
20897
20898					// Hack so receive/update callbacks work (mostly)
20899					draggable.currentItem = draggable.element;
20900					sortable.fromOutside = draggable;
20901				}
20902
20903				if ( sortable.currentItem ) {
20904					sortable._mouseDrag( event );
20905
20906					// Copy the sortable's position because the draggable's can potentially reflect
20907					// a relative position, while sortable is always absolute, which the dragged
20908					// element has now become. (#8809)
20909					ui.position = sortable.position;
20910				}
20911			} else {
20912
20913				// If it doesn't intersect with the sortable, and it intersected before,
20914				// we fake the drag stop of the sortable, but make sure it doesn't remove
20915				// the helper by using cancelHelperRemoval.
20916				if ( sortable.isOver ) {
20917
20918					sortable.isOver = 0;
20919					sortable.cancelHelperRemoval = true;
20920
20921					// Calling sortable's mouseStop would trigger a revert,
20922					// so revert must be temporarily false until after mouseStop is called.
20923					sortable.options._revert = sortable.options.revert;
20924					sortable.options.revert = false;
20925
20926					sortable._trigger( "out", event, sortable._uiHash( sortable ) );
20927					sortable._mouseStop( event, true );
20928
20929					// Restore sortable behaviors that were modfied
20930					// when the draggable entered the sortable area (#9481)
20931					sortable.options.revert = sortable.options._revert;
20932					sortable.options.helper = sortable.options._helper;
20933
20934					if ( sortable.placeholder ) {
20935						sortable.placeholder.remove();
20936					}
20937
20938					// Restore and recalculate the draggable's offset considering the sortable
20939					// may have modified them in unexpected ways. (#8809, #10669)
20940					ui.helper.appendTo( draggable._parent );
20941					draggable._refreshOffsets( event );
20942					ui.position = draggable._generatePosition( event, true );
20943
20944					draggable._trigger( "fromSortable", event );
20945
20946					// Inform draggable that the helper is no longer in a valid drop zone
20947					draggable.dropped = false;
20948
20949					// Need to refreshPositions of all sortables just in case removing
20950					// from one sortable changes the location of other sortables (#9675)
20951					$.each( draggable.sortables, function() {
20952						this.refreshPositions();
20953					} );
20954				}
20955			}
20956		} );
20957	}
20958} );
20959
20960$.ui.plugin.add( "draggable", "cursor", {
20961	start: function( event, ui, instance ) {
20962		var t = $( "body" ),
20963			o = instance.options;
20964
20965		if ( t.css( "cursor" ) ) {
20966			o._cursor = t.css( "cursor" );
20967		}
20968		t.css( "cursor", o.cursor );
20969	},
20970	stop: function( event, ui, instance ) {
20971		var o = instance.options;
20972		if ( o._cursor ) {
20973			$( "body" ).css( "cursor", o._cursor );
20974		}
20975	}
20976} );
20977
20978$.ui.plugin.add( "draggable", "opacity", {
20979	start: function( event, ui, instance ) {
20980		var t = $( ui.helper ),
20981			o = instance.options;
20982		if ( t.css( "opacity" ) ) {
20983			o._opacity = t.css( "opacity" );
20984		}
20985		t.css( "opacity", o.opacity );
20986	},
20987	stop: function( event, ui, instance ) {
20988		var o = instance.options;
20989		if ( o._opacity ) {
20990			$( ui.helper ).css( "opacity", o._opacity );
20991		}
20992	}
20993} );
20994
20995$.ui.plugin.add( "draggable", "scroll", {
20996	start: function( event, ui, i ) {
20997		if ( !i.scrollParentNotHidden ) {
20998			i.scrollParentNotHidden = i.helper.scrollParent( false );
20999		}
21000
21001		if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&
21002				i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
21003			i.overflowOffset = i.scrollParentNotHidden.offset();
21004		}
21005	},
21006	drag: function( event, ui, i  ) {
21007
21008		var o = i.options,
21009			scrolled = false,
21010			scrollParent = i.scrollParentNotHidden[ 0 ],
21011			document = i.document[ 0 ];
21012
21013		if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
21014			if ( !o.axis || o.axis !== "x" ) {
21015				if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <
21016						o.scrollSensitivity ) {
21017					scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
21018				} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
21019					scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
21020				}
21021			}
21022
21023			if ( !o.axis || o.axis !== "y" ) {
21024				if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <
21025						o.scrollSensitivity ) {
21026					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
21027				} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
21028					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
21029				}
21030			}
21031
21032		} else {
21033
21034			if ( !o.axis || o.axis !== "x" ) {
21035				if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {
21036					scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );
21037				} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <
21038						o.scrollSensitivity ) {
21039					scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );
21040				}
21041			}
21042
21043			if ( !o.axis || o.axis !== "y" ) {
21044				if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {
21045					scrolled = $( document ).scrollLeft(
21046						$( document ).scrollLeft() - o.scrollSpeed
21047					);
21048				} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <
21049						o.scrollSensitivity ) {
21050					scrolled = $( document ).scrollLeft(
21051						$( document ).scrollLeft() + o.scrollSpeed
21052					);
21053				}
21054			}
21055
21056		}
21057
21058		if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
21059			$.ui.ddmanager.prepareOffsets( i, event );
21060		}
21061
21062	}
21063} );
21064
21065$.ui.plugin.add( "draggable", "snap", {
21066	start: function( event, ui, i ) {
21067
21068		var o = i.options;
21069
21070		i.snapElements = [];
21071
21072		$( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )
21073			.each( function() {
21074				var $t = $( this ),
21075					$o = $t.offset();
21076				if ( this !== i.element[ 0 ] ) {
21077					i.snapElements.push( {
21078						item: this,
21079						width: $t.outerWidth(), height: $t.outerHeight(),
21080						top: $o.top, left: $o.left
21081					} );
21082				}
21083			} );
21084
21085	},
21086	drag: function( event, ui, inst ) {
21087
21088		var ts, bs, ls, rs, l, r, t, b, i, first,
21089			o = inst.options,
21090			d = o.snapTolerance,
21091			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
21092			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
21093
21094		for ( i = inst.snapElements.length - 1; i >= 0; i-- ) {
21095
21096			l = inst.snapElements[ i ].left - inst.margins.left;
21097			r = l + inst.snapElements[ i ].width;
21098			t = inst.snapElements[ i ].top - inst.margins.top;
21099			b = t + inst.snapElements[ i ].height;
21100
21101			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||
21102					!$.contains( inst.snapElements[ i ].item.ownerDocument,
21103					inst.snapElements[ i ].item ) ) {
21104				if ( inst.snapElements[ i ].snapping ) {
21105					if ( inst.options.snap.release ) {
21106						inst.options.snap.release.call(
21107							inst.element,
21108							event,
21109							$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )
21110						);
21111					}
21112				}
21113				inst.snapElements[ i ].snapping = false;
21114				continue;
21115			}
21116
21117			if ( o.snapMode !== "inner" ) {
21118				ts = Math.abs( t - y2 ) <= d;
21119				bs = Math.abs( b - y1 ) <= d;
21120				ls = Math.abs( l - x2 ) <= d;
21121				rs = Math.abs( r - x1 ) <= d;
21122				if ( ts ) {
21123					ui.position.top = inst._convertPositionTo( "relative", {
21124						top: t - inst.helperProportions.height,
21125						left: 0
21126					} ).top;
21127				}
21128				if ( bs ) {
21129					ui.position.top = inst._convertPositionTo( "relative", {
21130						top: b,
21131						left: 0
21132					} ).top;
21133				}
21134				if ( ls ) {
21135					ui.position.left = inst._convertPositionTo( "relative", {
21136						top: 0,
21137						left: l - inst.helperProportions.width
21138					} ).left;
21139				}
21140				if ( rs ) {
21141					ui.position.left = inst._convertPositionTo( "relative", {
21142						top: 0,
21143						left: r
21144					} ).left;
21145				}
21146			}
21147
21148			first = ( ts || bs || ls || rs );
21149
21150			if ( o.snapMode !== "outer" ) {
21151				ts = Math.abs( t - y1 ) <= d;
21152				bs = Math.abs( b - y2 ) <= d;
21153				ls = Math.abs( l - x1 ) <= d;
21154				rs = Math.abs( r - x2 ) <= d;
21155				if ( ts ) {
21156					ui.position.top = inst._convertPositionTo( "relative", {
21157						top: t,
21158						left: 0
21159					} ).top;
21160				}
21161				if ( bs ) {
21162					ui.position.top = inst._convertPositionTo( "relative", {
21163						top: b - inst.helperProportions.height,
21164						left: 0
21165					} ).top;
21166				}
21167				if ( ls ) {
21168					ui.position.left = inst._convertPositionTo( "relative", {
21169						top: 0,
21170						left: l
21171					} ).left;
21172				}
21173				if ( rs ) {
21174					ui.position.left = inst._convertPositionTo( "relative", {
21175						top: 0,
21176						left: r - inst.helperProportions.width
21177					} ).left;
21178				}
21179			}
21180
21181			if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {
21182				if ( inst.options.snap.snap ) {
21183					inst.options.snap.snap.call(
21184						inst.element,
21185						event,
21186						$.extend( inst._uiHash(), {
21187							snapItem: inst.snapElements[ i ].item
21188						} ) );
21189				}
21190			}
21191			inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );
21192
21193		}
21194
21195	}
21196} );
21197
21198$.ui.plugin.add( "draggable", "stack", {
21199	start: function( event, ui, instance ) {
21200		var min,
21201			o = instance.options,
21202			group = $.makeArray( $( o.stack ) ).sort( function( a, b ) {
21203				return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -
21204					( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );
21205			} );
21206
21207		if ( !group.length ) {
21208			return;
21209		}
21210
21211		min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;
21212		$( group ).each( function( i ) {
21213			$( this ).css( "zIndex", min + i );
21214		} );
21215		this.css( "zIndex", ( min + group.length ) );
21216	}
21217} );
21218
21219$.ui.plugin.add( "draggable", "zIndex", {
21220	start: function( event, ui, instance ) {
21221		var t = $( ui.helper ),
21222			o = instance.options;
21223
21224		if ( t.css( "zIndex" ) ) {
21225			o._zIndex = t.css( "zIndex" );
21226		}
21227		t.css( "zIndex", o.zIndex );
21228	},
21229	stop: function( event, ui, instance ) {
21230		var o = instance.options;
21231
21232		if ( o._zIndex ) {
21233			$( ui.helper ).css( "zIndex", o._zIndex );
21234		}
21235	}
21236} );
21237
21238var widgetsDraggable = $.ui.draggable;
21239
21240
21241/*!
21242 * jQuery UI Resizable 1.13.
212421
21243 * http://jqueryui.com
21244 *
21245 * Copyright jQuery Foundation and other contributors
21246 * Released under the MIT license.
21247 * http://jquery.org/license
21248 */
21249
21250//>>label: Resizable
21251//>>group: Interactions
21252//>>description: Enables resize functionality for any element.
21253//>>docs: http://api.jqueryui.com/resizable/
21254//>>demos: http://jqueryui.com/resizable/
21255//>>css.structure: ../../themes/base/core.css
21256//>>css.structure: ../../themes/base/resizable.css
21257//>>css.theme: ../../themes/base/theme.css
21258
21259
21260$.widget( "ui.resizable", $.ui.mouse, {
21261	version: "1.13.1
vendor: 11,739 bytes, lines 21261-21754
21261",
21262	widgetEventPrefix: "resize",
21263	options: {
21264		alsoResize: false,
21265		animate: false,
21266		animateDuration: "slow",
21267		animateEasing: "swing",
21268		aspectRatio: false,
21269		autoHide: false,
21270		classes: {
21271			"ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
21272		},
21273		containment: false,
21274		ghost: false,
21275		grid: false,
21276		handles: "e,s,se",
21277		helper: false,
21278		maxHeight: null,
21279		maxWidth: null,
21280		minHeight: 10,
21281		minWidth: 10,
21282
21283		// See #7960
21284		zIndex: 90,
21285
21286		// Callbacks
21287		resize: null,
21288		start: null,
21289		stop: null
21290	},
21291
21292	_num: function( value ) {
21293		return parseFloat( value ) || 0;
21294	},
21295
21296	_isNumber: function( value ) {
21297		return !isNaN( parseFloat( value ) );
21298	},
21299
21300	_hasScroll: function( el, a ) {
21301
21302		if ( $( el ).css( "overflow" ) === "hidden" ) {
21303			return false;
21304		}
21305
21306		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
21307			has = false;
21308
21309		if ( el[ scroll ] > 0 ) {
21310			return true;
21311		}
21312
21313		// TODO: determine which cases actually cause this to happen
21314		// if the element doesn't have the scroll set, see if it's possible to
21315		// set the scroll
21316		try {
21317			el[ scroll ] = 1;
21318			has = ( el[ scroll ] > 0 );
21319			el[ scroll ] = 0;
21320		} catch ( e ) {
21321
21322			// `el` might be a string, then setting `scroll` will throw
21323			// an error in strict mode; ignore it.
21324		}
21325		return has;
21326	},
21327
21328	_create: function() {
21329
21330		var margins,
21331			o = this.options,
21332			that = this;
21333		this._addClass( "ui-resizable" );
21334
21335		$.extend( this, {
21336			_aspectRatio: !!( o.aspectRatio ),
21337			aspectRatio: o.aspectRatio,
21338			originalElement: this.element,
21339			_proportionallyResizeElements: [],
21340			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
21341		} );
21342
21343		// Wrap the element if it cannot hold child nodes
21344		if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {
21345
21346			this.element.wrap(
21347				$( "<div class='ui-wrapper'></div>" ).css( {
21348					overflow: "hidden",
21349					position: this.element.css( "position" ),
21350					width: this.element.outerWidth(),
21351					height: this.element.outerHeight(),
21352					top: this.element.css( "top" ),
21353					left: this.element.css( "left" )
21354				} )
21355			);
21356
21357			this.element = this.element.parent().data(
21358				"ui-resizable", this.element.resizable( "instance" )
21359			);
21360
21361			this.elementIsWrapper = true;
21362
21363			margins = {
21364				marginTop: this.originalElement.css( "marginTop" ),
21365				marginRight: this.originalElement.css( "marginRight" ),
21366				marginBottom: this.originalElement.css( "marginBottom" ),
21367				marginLeft: this.originalElement.css( "marginLeft" )
21368			};
21369
21370			this.element.css( margins );
21371			this.originalElement.css( "margin", 0 );
21372
21373			// support: Safari
21374			// Prevent Safari textarea resize
21375			this.originalResizeStyle = this.originalElement.css( "resize" );
21376			this.originalElement.css( "resize", "none" );
21377
21378			this._proportionallyResizeElements.push( this.originalElement.css( {
21379				position: "static",
21380				zoom: 1,
21381				display: "block"
21382			} ) );
21383
21384			// Support: IE9
21385			// avoid IE jump (hard set the margin)
21386			this.originalElement.css( margins );
21387
21388			this._proportionallyResize();
21389		}
21390
21391		this._setupHandles();
21392
21393		if ( o.autoHide ) {
21394			$( this.element )
21395				.on( "mouseenter", function() {
21396					if ( o.disabled ) {
21397						return;
21398					}
21399					that._removeClass( "ui-resizable-autohide" );
21400					that._handles.show();
21401				} )
21402				.on( "mouseleave", function() {
21403					if ( o.disabled ) {
21404						return;
21405					}
21406					if ( !that.resizing ) {
21407						that._addClass( "ui-resizable-autohide" );
21408						that._handles.hide();
21409					}
21410				} );
21411		}
21412
21413		this._mouseInit();
21414	},
21415
21416	_destroy: function() {
21417
21418		this._mouseDestroy();
21419		this._addedHandles.remove();
21420
21421		var wrapper,
21422			_destroy = function( exp ) {
21423				$( exp )
21424					.removeData( "resizable" )
21425					.removeData( "ui-resizable" )
21426					.off( ".resizable" );
21427			};
21428
21429		// TODO: Unwrap at same DOM position
21430		if ( this.elementIsWrapper ) {
21431			_destroy( this.element );
21432			wrapper = this.element;
21433			this.originalElement.css( {
21434				position: wrapper.css( "position" ),
21435				width: wrapper.outerWidth(),
21436				height: wrapper.outerHeight(),
21437				top: wrapper.css( "top" ),
21438				left: wrapper.css( "left" )
21439			} ).insertAfter( wrapper );
21440			wrapper.remove();
21441		}
21442
21443		this.originalElement.css( "resize", this.originalResizeStyle );
21444		_destroy( this.originalElement );
21445
21446		return this;
21447	},
21448
21449	_setOption: function( key, value ) {
21450		this._super( key, value );
21451
21452		switch ( key ) {
21453		case "handles":
21454			this._removeHandles();
21455			this._setupHandles();
21456			break;
21457		case "aspectRatio":
21458			this._aspectRatio = !!value;
21459			break;
21460		default:
21461			break;
21462		}
21463	},
21464
21465	_setupHandles: function() {
21466		var o = this.options, handle, i, n, hname, axis, that = this;
21467		this.handles = o.handles ||
21468			( !$( ".ui-resizable-handle", this.element ).length ?
21469				"e,s,se" : {
21470					n: ".ui-resizable-n",
21471					e: ".ui-resizable-e",
21472					s: ".ui-resizable-s",
21473					w: ".ui-resizable-w",
21474					se: ".ui-resizable-se",
21475					sw: ".ui-resizable-sw",
21476					ne: ".ui-resizable-ne",
21477					nw: ".ui-resizable-nw"
21478				} );
21479
21480		this._handles = $();
21481		this._addedHandles = $();
21482		if ( this.handles.constructor === String ) {
21483
21484			if ( this.handles === "all" ) {
21485				this.handles = "n,e,s,w,se,sw,ne,nw";
21486			}
21487
21488			n = this.handles.split( "," );
21489			this.handles = {};
21490
21491			for ( i = 0; i < n.length; i++ ) {
21492
21493				handle = String.prototype.trim.call( n[ i ] );
21494				hname = "ui-resizable-" + handle;
21495				axis = $( "<div>" );
21496				this._addClass( axis, "ui-resizable-handle " + hname );
21497
21498				axis.css( { zIndex: o.zIndex } );
21499
21500				this.handles[ handle ] = ".ui-resizable-" + handle;
21501				if ( !this.element.children( this.handles[ handle ] ).length ) {
21502					this.element.append( axis );
21503					this._addedHandles = this._addedHandles.add( axis );
21504				}
21505			}
21506
21507		}
21508
21509		this._renderAxis = function( target ) {
21510
21511			var i, axis, padPos, padWrapper;
21512
21513			target = target || this.element;
21514
21515			for ( i in this.handles ) {
21516
21517				if ( this.handles[ i ].constructor === String ) {
21518					this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();
21519				} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
21520					this.handles[ i ] = $( this.handles[ i ] );
21521					this._on( this.handles[ i ], { "mousedown": that._mouseDown } );
21522				}
21523
21524				if ( this.elementIsWrapper &&
21525						this.originalElement[ 0 ]
21526							.nodeName
21527							.match( /^(textarea|input|select|button)$/i ) ) {
21528					axis = $( this.handles[ i ], this.element );
21529
21530					padWrapper = /sw|ne|nw|se|n|s/.test( i ) ?
21531						axis.outerHeight() :
21532						axis.outerWidth();
21533
21534					padPos = [ "padding",
21535						/ne|nw|n/.test( i ) ? "Top" :
21536						/se|sw|s/.test( i ) ? "Bottom" :
21537						/^e$/.test( i ) ? "Right" : "Left" ].join( "" );
21538
21539					target.css( padPos, padWrapper );
21540
21541					this._proportionallyResize();
21542				}
21543
21544				this._handles = this._handles.add( this.handles[ i ] );
21545			}
21546		};
21547
21548		// TODO: make renderAxis a prototype function
21549		this._renderAxis( this.element );
21550
21551		this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
21552		this._handles.disableSelection();
21553
21554		this._handles.on( "mouseover", function() {
21555			if ( !that.resizing ) {
21556				if ( this.className ) {
21557					axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );
21558				}
21559				that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";
21560			}
21561		} );
21562
21563		if ( o.autoHide ) {
21564			this._handles.hide();
21565			this._addClass( "ui-resizable-autohide" );
21566		}
21567	},
21568
21569	_removeHandles: function() {
21570		this._addedHandles.remove();
21571	},
21572
21573	_mouseCapture: function( event ) {
21574		var i, handle,
21575			capture = false;
21576
21577		for ( i in this.handles ) {
21578			handle = $( this.handles[ i ] )[ 0 ];
21579			if ( handle === event.target || $.contains( handle, event.target ) ) {
21580				capture = true;
21581			}
21582		}
21583
21584		return !this.options.disabled && capture;
21585	},
21586
21587	_mouseStart: function( event ) {
21588
21589		var curleft, curtop, cursor,
21590			o = this.options,
21591			el = this.element;
21592
21593		this.resizing = true;
21594
21595		this._renderProxy();
21596
21597		curleft = this._num( this.helper.css( "left" ) );
21598		curtop = this._num( this.helper.css( "top" ) );
21599
21600		if ( o.containment ) {
21601			curleft += $( o.containment ).scrollLeft() || 0;
21602			curtop += $( o.containment ).scrollTop() || 0;
21603		}
21604
21605		this.offset = this.helper.offset();
21606		this.position = { left: curleft, top: curtop };
21607
21608		this.size = this._helper ? {
21609				width: this.helper.width(),
21610				height: this.helper.height()
21611			} : {
21612				width: el.width(),
21613				height: el.height()
21614			};
21615
21616		this.originalSize = this._helper ? {
21617				width: el.outerWidth(),
21618				height: el.outerHeight()
21619			} : {
21620				width: el.width(),
21621				height: el.height()
21622			};
21623
21624		this.sizeDiff = {
21625			width: el.outerWidth() - el.width(),
21626			height: el.outerHeight() - el.height()
21627		};
21628
21629		this.originalPosition = { left: curleft, top: curtop };
21630		this.originalMousePosition = { left: event.pageX, top: event.pageY };
21631
21632		this.aspectRatio = ( typeof o.aspectRatio === "number" ) ?
21633			o.aspectRatio :
21634			( ( this.originalSize.width / this.originalSize.height ) || 1 );
21635
21636		cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );
21637		$( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );
21638
21639		this._addClass( "ui-resizable-resizing" );
21640		this._propagate( "start", event );
21641		return true;
21642	},
21643
21644	_mouseDrag: function( event ) {
21645
21646		var data, props,
21647			smp = this.originalMousePosition,
21648			a = this.axis,
21649			dx = ( event.pageX - smp.left ) || 0,
21650			dy = ( event.pageY - smp.top ) || 0,
21651			trigger = this._change[ a ];
21652
21653		this._updatePrevProperties();
21654
21655		if ( !trigger ) {
21656			return false;
21657		}
21658
21659		data = trigger.apply( this, [ event, dx, dy ] );
21660
21661		this._updateVirtualBoundaries( event.shiftKey );
21662		if ( this._aspectRatio || event.shiftKey ) {
21663			data = this._updateRatio( data, event );
21664		}
21665
21666		data = this._respectSize( data, event );
21667
21668		this._updateCache( data );
21669
21670		this._propagate( "resize", event );
21671
21672		props = this._applyChanges();
21673
21674		if ( !this._helper && this._proportionallyResizeElements.length ) {
21675			this._proportionallyResize();
21676		}
21677
21678		if ( !$.isEmptyObject( props ) ) {
21679			this._updatePrevProperties();
21680			this._trigger( "resize", event, this.ui() );
21681			this._applyChanges();
21682		}
21683
21684		return false;
21685	},
21686
21687	_mouseStop: function( event ) {
21688
21689		this.resizing = false;
21690		var pr, ista, soffseth, soffsetw, s, left, top,
21691			o = this.options, that = this;
21692
21693		if ( this._helper ) {
21694
21695			pr = this._proportionallyResizeElements;
21696			ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );
21697			soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;
21698			soffsetw = ista ? 0 : that.sizeDiff.width;
21699
21700			s = {
21701				width: ( that.helper.width()  - soffsetw ),
21702				height: ( that.helper.height() - soffseth )
21703			};
21704			left = ( parseFloat( that.element.css( "left" ) ) +
21705				( that.position.left - that.originalPosition.left ) ) || null;
21706			top = ( parseFloat( that.element.css( "top" ) ) +
21707				( that.position.top - that.originalPosition.top ) ) || null;
21708
21709			if ( !o.animate ) {
21710				this.element.css( $.extend( s, { top: top, left: left } ) );
21711			}
21712
21713			that.helper.height( that.size.height );
21714			that.helper.width( that.size.width );
21715
21716			if ( this._helper && !o.animate ) {
21717				this._proportionallyResize();
21718			}
21719		}
21720
21721		$( "body" ).css( "cursor", "auto" );
21722
21723		this._removeClass( "ui-resizable-resizing" );
21724
21725		this._propagate( "stop", event );
21726
21727		if ( this._helper ) {
21728			this.helper.remove();
21729		}
21730
21731		return false;
21732
21733	},
21734
21735	_updatePrevProperties: function() {
21736		this.prevPosition = {
21737			top: this.position.top,
21738			left: this.position.left
21739		};
21740		this.prevSize = {
21741			width: this.size.width,
21742			height: this.size.height
21743		};
21744	},
21745
21746	_applyChanges: function() {
21747		var props = {};
21748
21749		if ( this.position.top !== this.prevPosition.top ) {
21750			props.top = this.position.top + "px";
21751		}
21752		if ( this.position.left !== this.prevPosition.left ) {
21753			props.left = this.position.left + "px";
21754		}
vendor: 9,533 bytes, lines 21755-22122
21755		if ( this.size.width !== this.prevSize.width ) {
21756			props.width = this.size.width + "px";
21757		}
21758		if ( this.size.height !== this.prevSize.height ) {
21759			props.height = this.size.height + "px";
21760		}
21761
21762		this.helper.css( props );
21763
21764		return props;
21765	},
21766
21767	_updateVirtualBoundaries: function( forceAspectRatio ) {
21768		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
21769			o = this.options;
21770
21771		b = {
21772			minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,
21773			maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,
21774			minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,
21775			maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity
21776		};
21777
21778		if ( this._aspectRatio || forceAspectRatio ) {
21779			pMinWidth = b.minHeight * this.aspectRatio;
21780			pMinHeight = b.minWidth / this.aspectRatio;
21781			pMaxWidth = b.maxHeight * this.aspectRatio;
21782			pMaxHeight = b.maxWidth / this.aspectRatio;
21783
21784			if ( pMinWidth > b.minWidth ) {
21785				b.minWidth = pMinWidth;
21786			}
21787			if ( pMinHeight > b.minHeight ) {
21788				b.minHeight = pMinHeight;
21789			}
21790			if ( pMaxWidth < b.maxWidth ) {
21791				b.maxWidth = pMaxWidth;
21792			}
21793			if ( pMaxHeight < b.maxHeight ) {
21794				b.maxHeight = pMaxHeight;
21795			}
21796		}
21797		this._vBoundaries = b;
21798	},
21799
21800	_updateCache: function( data ) {
21801		this.offset = this.helper.offset();
21802		if ( this._isNumber( data.left ) ) {
21803			this.position.left = data.left;
21804		}
21805		if ( this._isNumber( data.top ) ) {
21806			this.position.top = data.top;
21807		}
21808		if ( this._isNumber( data.height ) ) {
21809			this.size.height = data.height;
21810		}
21811		if ( this._isNumber( data.width ) ) {
21812			this.size.width = data.width;
21813		}
21814	},
21815
21816	_updateRatio: function( data ) {
21817
21818		var cpos = this.position,
21819			csize = this.size,
21820			a = this.axis;
21821
21822		if ( this._isNumber( data.height ) ) {
21823			data.width = ( data.height * this.aspectRatio );
21824		} else if ( this._isNumber( data.width ) ) {
21825			data.height = ( data.width / this.aspectRatio );
21826		}
21827
21828		if ( a === "sw" ) {
21829			data.left = cpos.left + ( csize.width - data.width );
21830			data.top = null;
21831		}
21832		if ( a === "nw" ) {
21833			data.top = cpos.top + ( csize.height - data.height );
21834			data.left = cpos.left + ( csize.width - data.width );
21835		}
21836
21837		return data;
21838	},
21839
21840	_respectSize: function( data ) {
21841
21842		var o = this._vBoundaries,
21843			a = this.axis,
21844			ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),
21845			ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),
21846			isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),
21847			isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),
21848			dw = this.originalPosition.left + this.originalSize.width,
21849			dh = this.originalPosition.top + this.originalSize.height,
21850			cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );
21851		if ( isminw ) {
21852			data.width = o.minWidth;
21853		}
21854		if ( isminh ) {
21855			data.height = o.minHeight;
21856		}
21857		if ( ismaxw ) {
21858			data.width = o.maxWidth;
21859		}
21860		if ( ismaxh ) {
21861			data.height = o.maxHeight;
21862		}
21863
21864		if ( isminw && cw ) {
21865			data.left = dw - o.minWidth;
21866		}
21867		if ( ismaxw && cw ) {
21868			data.left = dw - o.maxWidth;
21869		}
21870		if ( isminh && ch ) {
21871			data.top = dh - o.minHeight;
21872		}
21873		if ( ismaxh && ch ) {
21874			data.top = dh - o.maxHeight;
21875		}
21876
21877		// Fixing jump error on top/left - bug #2330
21878		if ( !data.width && !data.height && !data.left && data.top ) {
21879			data.top = null;
21880		} else if ( !data.width && !data.height && !data.top && data.left ) {
21881			data.left = null;
21882		}
21883
21884		return data;
21885	},
21886
21887	_getPaddingPlusBorderDimensions: function( element ) {
21888		var i = 0,
21889			widths = [],
21890			borders = [
21891				element.css( "borderTopWidth" ),
21892				element.css( "borderRightWidth" ),
21893				element.css( "borderBottomWidth" ),
21894				element.css( "borderLeftWidth" )
21895			],
21896			paddings = [
21897				element.css( "paddingTop" ),
21898				element.css( "paddingRight" ),
21899				element.css( "paddingBottom" ),
21900				element.css( "paddingLeft" )
21901			];
21902
21903		for ( ; i < 4; i++ ) {
21904			widths[ i ] = ( parseFloat( borders[ i ] ) || 0 );
21905			widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );
21906		}
21907
21908		return {
21909			height: widths[ 0 ] + widths[ 2 ],
21910			width: widths[ 1 ] + widths[ 3 ]
21911		};
21912	},
21913
21914	_proportionallyResize: function() {
21915
21916		if ( !this._proportionallyResizeElements.length ) {
21917			return;
21918		}
21919
21920		var prel,
21921			i = 0,
21922			element = this.helper || this.element;
21923
21924		for ( ; i < this._proportionallyResizeElements.length; i++ ) {
21925
21926			prel = this._proportionallyResizeElements[ i ];
21927
21928			// TODO: Seems like a bug to cache this.outerDimensions
21929			// considering that we are in a loop.
21930			if ( !this.outerDimensions ) {
21931				this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
21932			}
21933
21934			prel.css( {
21935				height: ( element.height() - this.outerDimensions.height ) || 0,
21936				width: ( element.width() - this.outerDimensions.width ) || 0
21937			} );
21938
21939		}
21940
21941	},
21942
21943	_renderProxy: function() {
21944
21945		var el = this.element, o = this.options;
21946		this.elementOffset = el.offset();
21947
21948		if ( this._helper ) {
21949
21950			this.helper = this.helper || $( "<div></div>" ).css( { overflow: "hidden" } );
21951
21952			this._addClass( this.helper, this._helper );
21953			this.helper.css( {
21954				width: this.element.outerWidth(),
21955				height: this.element.outerHeight(),
21956				position: "absolute",
21957				left: this.elementOffset.left + "px",
21958				top: this.elementOffset.top + "px",
21959				zIndex: ++o.zIndex //TODO: Don't modify option
21960			} );
21961
21962			this.helper
21963				.appendTo( "body" )
21964				.disableSelection();
21965
21966		} else {
21967			this.helper = this.element;
21968		}
21969
21970	},
21971
21972	_change: {
21973		e: function( event, dx ) {
21974			return { width: this.originalSize.width + dx };
21975		},
21976		w: function( event, dx ) {
21977			var cs = this.originalSize, sp = this.originalPosition;
21978			return { left: sp.left + dx, width: cs.width - dx };
21979		},
21980		n: function( event, dx, dy ) {
21981			var cs = this.originalSize, sp = this.originalPosition;
21982			return { top: sp.top + dy, height: cs.height - dy };
21983		},
21984		s: function( event, dx, dy ) {
21985			return { height: this.originalSize.height + dy };
21986		},
21987		se: function( event, dx, dy ) {
21988			return $.extend( this._change.s.apply( this, arguments ),
21989				this._change.e.apply( this, [ event, dx, dy ] ) );
21990		},
21991		sw: function( event, dx, dy ) {
21992			return $.extend( this._change.s.apply( this, arguments ),
21993				this._change.w.apply( this, [ event, dx, dy ] ) );
21994		},
21995		ne: function( event, dx, dy ) {
21996			return $.extend( this._change.n.apply( this, arguments ),
21997				this._change.e.apply( this, [ event, dx, dy ] ) );
21998		},
21999		nw: function( event, dx, dy ) {
22000			return $.extend( this._change.n.apply( this, arguments ),
22001				this._change.w.apply( this, [ event, dx, dy ] ) );
22002		}
22003	},
22004
22005	_propagate: function( n, event ) {
22006		$.ui.plugin.call( this, n, [ event, this.ui() ] );
22007		if ( n !== "resize" ) {
22008			this._trigger( n, event, this.ui() );
22009		}
22010	},
22011
22012	plugins: {},
22013
22014	ui: function() {
22015		return {
22016			originalElement: this.originalElement,
22017			element: this.element,
22018			helper: this.helper,
22019			position: this.position,
22020			size: this.size,
22021			originalSize: this.originalSize,
22022			originalPosition: this.originalPosition
22023		};
22024	}
22025
22026} );
22027
22028/*
22029 * Resizable Extensions
22030 */
22031
22032$.ui.plugin.add( "resizable", "animate", {
22033
22034	stop: function( event ) {
22035		var that = $( this ).resizable( "instance" ),
22036			o = that.options,
22037			pr = that._proportionallyResizeElements,
22038			ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),
22039			soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,
22040			soffsetw = ista ? 0 : that.sizeDiff.width,
22041			style = {
22042				width: ( that.size.width - soffsetw ),
22043				height: ( that.size.height - soffseth )
22044			},
22045			left = ( parseFloat( that.element.css( "left" ) ) +
22046				( that.position.left - that.originalPosition.left ) ) || null,
22047			top = ( parseFloat( that.element.css( "top" ) ) +
22048				( that.position.top - that.originalPosition.top ) ) || null;
22049
22050		that.element.animate(
22051			$.extend( style, top && left ? { top: top, left: left } : {} ), {
22052				duration: o.animateDuration,
22053				easing: o.animateEasing,
22054				step: function() {
22055
22056					var data = {
22057						width: parseFloat( that.element.css( "width" ) ),
22058						height: parseFloat( that.element.css( "height" ) ),
22059						top: parseFloat( that.element.css( "top" ) ),
22060						left: parseFloat( that.element.css( "left" ) )
22061					};
22062
22063					if ( pr && pr.length ) {
22064						$( pr[ 0 ] ).css( { width: data.width, height: data.height } );
22065					}
22066
22067					// Propagating resize, and updating values for each animation step
22068					that._updateCache( data );
22069					that._propagate( "resize", event );
22070
22071				}
22072			}
22073		);
22074	}
22075
22076} );
22077
22078$.ui.plugin.add( "resizable", "containment", {
22079
22080	start: function() {
22081		var element, p, co, ch, cw, width, height,
22082			that = $( this ).resizable( "instance" ),
22083			o = that.options,
22084			el = that.element,
22085			oc = o.containment,
22086			ce = ( oc instanceof $ ) ?
22087				oc.get( 0 ) :
22088				( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
22089
22090		if ( !ce ) {
22091			return;
22092		}
22093
22094		that.containerElement = $( ce );
22095
22096		if ( /document/.test( oc ) || oc === document ) {
22097			that.containerOffset = {
22098				left: 0,
22099				top: 0
22100			};
22101			that.containerPosition = {
22102				left: 0,
22103				top: 0
22104			};
22105
22106			that.parentData = {
22107				element: $( document ),
22108				left: 0,
22109				top: 0,
22110				width: $( document ).width(),
22111				height: $( document ).height() || document.body.parentNode.scrollHeight
22112			};
22113		} else {
22114			element = $( ce );
22115			p = [];
22116			$( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {
22117				p[ i ] = that._num( element.css( "padding" + name ) );
22118			} );
22119
22120			that.containerOffset = element.offset();
22121			that.containerPosition = element.position();
22122			that.containerSize = {
vendor: 5,871 bytes, lines 22123-22347
22123				height: ( element.innerHeight() - p[ 3 ] ),
22124				width: ( element.innerWidth() - p[ 1 ] )
22125			};
22126
22127			co = that.containerOffset;
22128			ch = that.containerSize.height;
22129			cw = that.containerSize.width;
22130			width = ( that._hasScroll( ce, "left" ) ? ce.scrollWidth : cw );
22131			height = ( that._hasScroll( ce ) ? ce.scrollHeight : ch );
22132
22133			that.parentData = {
22134				element: ce,
22135				left: co.left,
22136				top: co.top,
22137				width: width,
22138				height: height
22139			};
22140		}
22141	},
22142
22143	resize: function( event ) {
22144		var woset, hoset, isParent, isOffsetRelative,
22145			that = $( this ).resizable( "instance" ),
22146			o = that.options,
22147			co = that.containerOffset,
22148			cp = that.position,
22149			pRatio = that._aspectRatio || event.shiftKey,
22150			cop = {
22151				top: 0,
22152				left: 0
22153			},
22154			ce = that.containerElement,
22155			continueResize = true;
22156
22157		if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
22158			cop = co;
22159		}
22160
22161		if ( cp.left < ( that._helper ? co.left : 0 ) ) {
22162			that.size.width = that.size.width +
22163				( that._helper ?
22164					( that.position.left - co.left ) :
22165					( that.position.left - cop.left ) );
22166
22167			if ( pRatio ) {
22168				that.size.height = that.size.width / that.aspectRatio;
22169				continueResize = false;
22170			}
22171			that.position.left = o.helper ? co.left : 0;
22172		}
22173
22174		if ( cp.top < ( that._helper ? co.top : 0 ) ) {
22175			that.size.height = that.size.height +
22176				( that._helper ?
22177					( that.position.top - co.top ) :
22178					that.position.top );
22179
22180			if ( pRatio ) {
22181				that.size.width = that.size.height * that.aspectRatio;
22182				continueResize = false;
22183			}
22184			that.position.top = that._helper ? co.top : 0;
22185		}
22186
22187		isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
22188		isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
22189
22190		if ( isParent && isOffsetRelative ) {
22191			that.offset.left = that.parentData.left + that.position.left;
22192			that.offset.top = that.parentData.top + that.position.top;
22193		} else {
22194			that.offset.left = that.element.offset().left;
22195			that.offset.top = that.element.offset().top;
22196		}
22197
22198		woset = Math.abs( that.sizeDiff.width +
22199			( that._helper ?
22200				that.offset.left - cop.left :
22201				( that.offset.left - co.left ) ) );
22202
22203		hoset = Math.abs( that.sizeDiff.height +
22204			( that._helper ?
22205				that.offset.top - cop.top :
22206				( that.offset.top - co.top ) ) );
22207
22208		if ( woset + that.size.width >= that.parentData.width ) {
22209			that.size.width = that.parentData.width - woset;
22210			if ( pRatio ) {
22211				that.size.height = that.size.width / that.aspectRatio;
22212				continueResize = false;
22213			}
22214		}
22215
22216		if ( hoset + that.size.height >= that.parentData.height ) {
22217			that.size.height = that.parentData.height - hoset;
22218			if ( pRatio ) {
22219				that.size.width = that.size.height * that.aspectRatio;
22220				continueResize = false;
22221			}
22222		}
22223
22224		if ( !continueResize ) {
22225			that.position.left = that.prevPosition.left;
22226			that.position.top = that.prevPosition.top;
22227			that.size.width = that.prevSize.width;
22228			that.size.height = that.prevSize.height;
22229		}
22230	},
22231
22232	stop: function() {
22233		var that = $( this ).resizable( "instance" ),
22234			o = that.options,
22235			co = that.containerOffset,
22236			cop = that.containerPosition,
22237			ce = that.containerElement,
22238			helper = $( that.helper ),
22239			ho = helper.offset(),
22240			w = helper.outerWidth() - that.sizeDiff.width,
22241			h = helper.outerHeight() - that.sizeDiff.height;
22242
22243		if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
22244			$( this ).css( {
22245				left: ho.left - cop.left - co.left,
22246				width: w,
22247				height: h
22248			} );
22249		}
22250
22251		if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
22252			$( this ).css( {
22253				left: ho.left - cop.left - co.left,
22254				width: w,
22255				height: h
22256			} );
22257		}
22258	}
22259} );
22260
22261$.ui.plugin.add( "resizable", "alsoResize", {
22262
22263	start: function() {
22264		var that = $( this ).resizable( "instance" ),
22265			o = that.options;
22266
22267		$( o.alsoResize ).each( function() {
22268			var el = $( this );
22269			el.data( "ui-resizable-alsoresize", {
22270				width: parseFloat( el.width() ), height: parseFloat( el.height() ),
22271				left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
22272			} );
22273		} );
22274	},
22275
22276	resize: function( event, ui ) {
22277		var that = $( this ).resizable( "instance" ),
22278			o = that.options,
22279			os = that.originalSize,
22280			op = that.originalPosition,
22281			delta = {
22282				height: ( that.size.height - os.height ) || 0,
22283				width: ( that.size.width - os.width ) || 0,
22284				top: ( that.position.top - op.top ) || 0,
22285				left: ( that.position.left - op.left ) || 0
22286			};
22287
22288			$( o.alsoResize ).each( function() {
22289				var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},
22290					css = el.parents( ui.originalElement[ 0 ] ).length ?
22291							[ "width", "height" ] :
22292							[ "width", "height", "top", "left" ];
22293
22294				$.each( css, function( i, prop ) {
22295					var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );
22296					if ( sum && sum >= 0 ) {
22297						style[ prop ] = sum || null;
22298					}
22299				} );
22300
22301				el.css( style );
22302			} );
22303	},
22304
22305	stop: function() {
22306		$( this ).removeData( "ui-resizable-alsoresize" );
22307	}
22308} );
22309
22310$.ui.plugin.add( "resizable", "ghost", {
22311
22312	start: function() {
22313
22314		var that = $( this ).resizable( "instance" ), cs = that.size;
22315
22316		that.ghost = that.originalElement.clone();
22317		that.ghost.css( {
22318			opacity: 0.25,
22319			display: "block",
22320			position: "relative",
22321			height: cs.height,
22322			width: cs.width,
22323			margin: 0,
22324			left: 0,
22325			top: 0
22326		} );
22327
22328		that._addClass( that.ghost, "ui-resizable-ghost" );
22329
22330		// DEPRECATED
22331		// TODO: remove after 1.12
22332		if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
22333
22334			// Ghost option
22335			that.ghost.addClass( this.options.ghost );
22336		}
22337
22338		that.ghost.appendTo( that.helper );
22339
22340	},
22341
22342	resize: function() {
22343		var that = $( this ).resizable( "instance" );
22344		if ( that.ghost ) {
22345			that.ghost.css( {
22346				position: "relative",
22347				height: that.size.height,
vendor: 2,863 bytes, lines 22348-22459
22348				width: that.size.width
22349			} );
22350		}
22351	},
22352
22353	stop: function() {
22354		var that = $( this ).resizable( "instance" );
22355		if ( that.ghost && that.helper ) {
22356			that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );
22357		}
22358	}
22359
22360} );
22361
22362$.ui.plugin.add( "resizable", "grid", {
22363
22364	resize: function() {
22365		var outerDimensions,
22366			that = $( this ).resizable( "instance" ),
22367			o = that.options,
22368			cs = that.size,
22369			os = that.originalSize,
22370			op = that.originalPosition,
22371			a = that.axis,
22372			grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
22373			gridX = ( grid[ 0 ] || 1 ),
22374			gridY = ( grid[ 1 ] || 1 ),
22375			ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,
22376			oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,
22377			newWidth = os.width + ox,
22378			newHeight = os.height + oy,
22379			isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),
22380			isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),
22381			isMinWidth = o.minWidth && ( o.minWidth > newWidth ),
22382			isMinHeight = o.minHeight && ( o.minHeight > newHeight );
22383
22384		o.grid = grid;
22385
22386		if ( isMinWidth ) {
22387			newWidth += gridX;
22388		}
22389		if ( isMinHeight ) {
22390			newHeight += gridY;
22391		}
22392		if ( isMaxWidth ) {
22393			newWidth -= gridX;
22394		}
22395		if ( isMaxHeight ) {
22396			newHeight -= gridY;
22397		}
22398
22399		if ( /^(se|s|e)$/.test( a ) ) {
22400			that.size.width = newWidth;
22401			that.size.height = newHeight;
22402		} else if ( /^(ne)$/.test( a ) ) {
22403			that.size.width = newWidth;
22404			that.size.height = newHeight;
22405			that.position.top = op.top - oy;
22406		} else if ( /^(sw)$/.test( a ) ) {
22407			that.size.width = newWidth;
22408			that.size.height = newHeight;
22409			that.position.left = op.left - ox;
22410		} else {
22411			if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {
22412				outerDimensions = that._getPaddingPlusBorderDimensions( this );
22413			}
22414
22415			if ( newHeight - gridY > 0 ) {
22416				that.size.height = newHeight;
22417				that.position.top = op.top - oy;
22418			} else {
22419				newHeight = gridY - outerDimensions.height;
22420				that.size.height = newHeight;
22421				that.position.top = op.top + os.height - newHeight;
22422			}
22423			if ( newWidth - gridX > 0 ) {
22424				that.size.width = newWidth;
22425				that.position.left = op.left - ox;
22426			} else {
22427				newWidth = gridX - outerDimensions.width;
22428				that.size.width = newWidth;
22429				that.position.left = op.left + os.width - newWidth;
22430			}
22431		}
22432	}
22433
22434} );
22435
22436var widgetsResizable = $.ui.resizable;
22437
22438
22439/*!
22440 * jQuery UI Dialog 1.13.1
22441 * http://jqueryui.com
22442 *
22443 * Copyright jQuery Foundation and other contributors
22444 * Released under the MIT license.
22445 * http://jquery.org/license
22446 */
22447
22448//>>label: Dialog
22449//>>group: Widgets
22450//>>description: Displays customizable dialog windows.
22451//>>docs: http://api.jqueryui.com/dialog/
22452//>>demos: http://jqueryui.com/dialog/
22453//>>css.structure: ../../themes/base/core.css
22454//>>css.structure: ../../themes/base/dialog.css
22455//>>css.theme: ../../themes/base/theme.css
22456
22457
22458$.widget( "ui.dialog", {
22459	version: "1.13.1
vendor: 20,928 bytes, lines 22459-23293
22459",
22460	options: {
22461		appendTo: "body",
22462		autoOpen: true,
22463		buttons: [],
22464		classes: {
22465			"ui-dialog": "ui-corner-all",
22466			"ui-dialog-titlebar": "ui-corner-all"
22467		},
22468		closeOnEscape: true,
22469		closeText: "Close",
22470		draggable: true,
22471		hide: null,
22472		height: "auto",
22473		maxHeight: null,
22474		maxWidth: null,
22475		minHeight: 150,
22476		minWidth: 150,
22477		modal: false,
22478		position: {
22479			my: "center",
22480			at: "center",
22481			of: window,
22482			collision: "fit",
22483
22484			// Ensure the titlebar is always visible
22485			using: function( pos ) {
22486				var topOffset = $( this ).css( pos ).offset().top;
22487				if ( topOffset < 0 ) {
22488					$( this ).css( "top", pos.top - topOffset );
22489				}
22490			}
22491		},
22492		resizable: true,
22493		show: null,
22494		title: null,
22495		width: 300,
22496
22497		// Callbacks
22498		beforeClose: null,
22499		close: null,
22500		drag: null,
22501		dragStart: null,
22502		dragStop: null,
22503		focus: null,
22504		open: null,
22505		resize: null,
22506		resizeStart: null,
22507		resizeStop: null
22508	},
22509
22510	sizeRelatedOptions: {
22511		buttons: true,
22512		height: true,
22513		maxHeight: true,
22514		maxWidth: true,
22515		minHeight: true,
22516		minWidth: true,
22517		width: true
22518	},
22519
22520	resizableRelatedOptions: {
22521		maxHeight: true,
22522		maxWidth: true,
22523		minHeight: true,
22524		minWidth: true
22525	},
22526
22527	_create: function() {
22528		this.originalCss = {
22529			display: this.element[ 0 ].style.display,
22530			width: this.element[ 0 ].style.width,
22531			minHeight: this.element[ 0 ].style.minHeight,
22532			maxHeight: this.element[ 0 ].style.maxHeight,
22533			height: this.element[ 0 ].style.height
22534		};
22535		this.originalPosition = {
22536			parent: this.element.parent(),
22537			index: this.element.parent().children().index( this.element )
22538		};
22539		this.originalTitle = this.element.attr( "title" );
22540		if ( this.options.title == null && this.originalTitle != null ) {
22541			this.options.title = this.originalTitle;
22542		}
22543
22544		// Dialogs can't be disabled
22545		if ( this.options.disabled ) {
22546			this.options.disabled = false;
22547		}
22548
22549		this._createWrapper();
22550
22551		this.element
22552			.show()
22553			.removeAttr( "title" )
22554			.appendTo( this.uiDialog );
22555
22556		this._addClass( "ui-dialog-content", "ui-widget-content" );
22557
22558		this._createTitlebar();
22559		this._createButtonPane();
22560
22561		if ( this.options.draggable && $.fn.draggable ) {
22562			this._makeDraggable();
22563		}
22564		if ( this.options.resizable && $.fn.resizable ) {
22565			this._makeResizable();
22566		}
22567
22568		this._isOpen = false;
22569
22570		this._trackFocus();
22571	},
22572
22573	_init: function() {
22574		if ( this.options.autoOpen ) {
22575			this.open();
22576		}
22577	},
22578
22579	_appendTo: function() {
22580		var element = this.options.appendTo;
22581		if ( element && ( element.jquery || element.nodeType ) ) {
22582			return $( element );
22583		}
22584		return this.document.find( element || "body" ).eq( 0 );
22585	},
22586
22587	_destroy: function() {
22588		var next,
22589			originalPosition = this.originalPosition;
22590
22591		this._untrackInstance();
22592		this._destroyOverlay();
22593
22594		this.element
22595			.removeUniqueId()
22596			.css( this.originalCss )
22597
22598			// Without detaching first, the following becomes really slow
22599			.detach();
22600
22601		this.uiDialog.remove();
22602
22603		if ( this.originalTitle ) {
22604			this.element.attr( "title", this.originalTitle );
22605		}
22606
22607		next = originalPosition.parent.children().eq( originalPosition.index );
22608
22609		// Don't try to place the dialog next to itself (#8613)
22610		if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
22611			next.before( this.element );
22612		} else {
22613			originalPosition.parent.append( this.element );
22614		}
22615	},
22616
22617	widget: function() {
22618		return this.uiDialog;
22619	},
22620
22621	disable: $.noop,
22622	enable: $.noop,
22623
22624	close: function( event ) {
22625		var that = this;
22626
22627		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
22628			return;
22629		}
22630
22631		this._isOpen = false;
22632		this._focusedElement = null;
22633		this._destroyOverlay();
22634		this._untrackInstance();
22635
22636		if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {
22637
22638			// Hiding a focused element doesn't trigger blur in WebKit
22639			// so in case we have nothing to focus on, explicitly blur the active element
22640			// https://bugs.webkit.org/show_bug.cgi?id=47182
22641			$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
22642		}
22643
22644		this._hide( this.uiDialog, this.options.hide, function() {
22645			that._trigger( "close", event );
22646		} );
22647	},
22648
22649	isOpen: function() {
22650		return this._isOpen;
22651	},
22652
22653	moveToTop: function() {
22654		this._moveToTop();
22655	},
22656
22657	_moveToTop: function( event, silent ) {
22658		var moved = false,
22659			zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {
22660				return +$( this ).css( "z-index" );
22661			} ).get(),
22662			zIndexMax = Math.max.apply( null, zIndices );
22663
22664		if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
22665			this.uiDialog.css( "z-index", zIndexMax + 1 );
22666			moved = true;
22667		}
22668
22669		if ( moved && !silent ) {
22670			this._trigger( "focus", event );
22671		}
22672		return moved;
22673	},
22674
22675	open: function() {
22676		var that = this;
22677		if ( this._isOpen ) {
22678			if ( this._moveToTop() ) {
22679				this._focusTabbable();
22680			}
22681			return;
22682		}
22683
22684		this._isOpen = true;
22685		this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
22686
22687		this._size();
22688		this._position();
22689		this._createOverlay();
22690		this._moveToTop( null, true );
22691
22692		// Ensure the overlay is moved to the top with the dialog, but only when
22693		// opening. The overlay shouldn't move after the dialog is open so that
22694		// modeless dialogs opened after the modal dialog stack properly.
22695		if ( this.overlay ) {
22696			this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
22697		}
22698
22699		this._show( this.uiDialog, this.options.show, function() {
22700			that._focusTabbable();
22701			that._trigger( "focus" );
22702		} );
22703
22704		// Track the dialog immediately upon opening in case a focus event
22705		// somehow occurs outside of the dialog before an element inside the
22706		// dialog is focused (#10152)
22707		this._makeFocusTarget();
22708
22709		this._trigger( "open" );
22710	},
22711
22712	_focusTabbable: function() {
22713
22714		// Set focus to the first match:
22715		// 1. An element that was focused previously
22716		// 2. First element inside the dialog matching [autofocus]
22717		// 3. Tabbable element inside the content element
22718		// 4. Tabbable element inside the buttonpane
22719		// 5. The close button
22720		// 6. The dialog itself
22721		var hasFocus = this._focusedElement;
22722		if ( !hasFocus ) {
22723			hasFocus = this.element.find( "[autofocus]" );
22724		}
22725		if ( !hasFocus.length ) {
22726			hasFocus = this.element.find( ":tabbable" );
22727		}
22728		if ( !hasFocus.length ) {
22729			hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
22730		}
22731		if ( !hasFocus.length ) {
22732			hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
22733		}
22734		if ( !hasFocus.length ) {
22735			hasFocus = this.uiDialog;
22736		}
22737		hasFocus.eq( 0 ).trigger( "focus" );
22738	},
22739
22740	_restoreTabbableFocus: function() {
22741		var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
22742			isActive = this.uiDialog[ 0 ] === activeElement ||
22743				$.contains( this.uiDialog[ 0 ], activeElement );
22744		if ( !isActive ) {
22745			this._focusTabbable();
22746		}
22747	},
22748
22749	_keepFocus: function( event ) {
22750		event.preventDefault();
22751		this._restoreTabbableFocus();
22752
22753		// support: IE
22754		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
22755		// so we check again later
22756		this._delay( this._restoreTabbableFocus );
22757	},
22758
22759	_createWrapper: function() {
22760		this.uiDialog = $( "<div>" )
22761			.hide()
22762			.attr( {
22763
22764				// Setting tabIndex makes the div focusable
22765				tabIndex: -1,
22766				role: "dialog"
22767			} )
22768			.appendTo( this._appendTo() );
22769
22770		this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" );
22771		this._on( this.uiDialog, {
22772			keydown: function( event ) {
22773				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
22774						event.keyCode === $.ui.keyCode.ESCAPE ) {
22775					event.preventDefault();
22776					this.close( event );
22777					return;
22778				}
22779
22780				// Prevent tabbing out of dialogs
22781				if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
22782					return;
22783				}
22784				var tabbables = this.uiDialog.find( ":tabbable" ),
22785					first = tabbables.first(),
22786					last = tabbables.last();
22787
22788				if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&
22789						!event.shiftKey ) {
22790					this._delay( function() {
22791						first.trigger( "focus" );
22792					} );
22793					event.preventDefault();
22794				} else if ( ( event.target === first[ 0 ] ||
22795						event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {
22796					this._delay( function() {
22797						last.trigger( "focus" );
22798					} );
22799					event.preventDefault();
22800				}
22801			},
22802			mousedown: function( event ) {
22803				if ( this._moveToTop( event ) ) {
22804					this._focusTabbable();
22805				}
22806			}
22807		} );
22808
22809		// We assume that any existing aria-describedby attribute means
22810		// that the dialog content is marked up properly
22811		// otherwise we brute force the content as the description
22812		if ( !this.element.find( "[aria-describedby]" ).length ) {
22813			this.uiDialog.attr( {
22814				"aria-describedby": this.element.uniqueId().attr( "id" )
22815			} );
22816		}
22817	},
22818
22819	_createTitlebar: function() {
22820		var uiDialogTitle;
22821
22822		this.uiDialogTitlebar = $( "<div>" );
22823		this._addClass( this.uiDialogTitlebar,
22824			"ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );
22825		this._on( this.uiDialogTitlebar, {
22826			mousedown: function( event ) {
22827
22828				// Don't prevent click on close button (#8838)
22829				// Focusing a dialog that is partially scrolled out of view
22830				// causes the browser to scroll it into view, preventing the click event
22831				if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
22832
22833					// Dialog isn't getting focus when dragging (#8063)
22834					this.uiDialog.trigger( "focus" );
22835				}
22836			}
22837		} );
22838
22839		// Support: IE
22840		// Use type="button" to prevent enter keypresses in textboxes from closing the
22841		// dialog in IE (#9312)
22842		this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
22843			.button( {
22844				label: $( "<a>" ).text( this.options.closeText ).html(),
22845				icon: "ui-icon-closethick",
22846				showLabel: false
22847			} )
22848			.appendTo( this.uiDialogTitlebar );
22849
22850		this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );
22851		this._on( this.uiDialogTitlebarClose, {
22852			click: function( event ) {
22853				event.preventDefault();
22854				this.close( event );
22855			}
22856		} );
22857
22858		uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
22859		this._addClass( uiDialogTitle, "ui-dialog-title" );
22860		this._title( uiDialogTitle );
22861
22862		this.uiDialogTitlebar.prependTo( this.uiDialog );
22863
22864		this.uiDialog.attr( {
22865			"aria-labelledby": uiDialogTitle.attr( "id" )
22866		} );
22867	},
22868
22869	_title: function( title ) {
22870		if ( this.options.title ) {
22871			title.text( this.options.title );
22872		} else {
22873			title.html( "&#160;" );
22874		}
22875	},
22876
22877	_createButtonPane: function() {
22878		this.uiDialogButtonPane = $( "<div>" );
22879		this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",
22880			"ui-widget-content ui-helper-clearfix" );
22881
22882		this.uiButtonSet = $( "<div>" )
22883			.appendTo( this.uiDialogButtonPane );
22884		this._addClass( this.uiButtonSet, "ui-dialog-buttonset" );
22885
22886		this._createButtons();
22887	},
22888
22889	_createButtons: function() {
22890		var that = this,
22891			buttons = this.options.buttons;
22892
22893		// If we already have a button pane, remove it
22894		this.uiDialogButtonPane.remove();
22895		this.uiButtonSet.empty();
22896
22897		if ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) {
22898			this._removeClass( this.uiDialog, "ui-dialog-buttons" );
22899			return;
22900		}
22901
22902		$.each( buttons, function( name, props ) {
22903			var click, buttonOptions;
22904			props = typeof props === "function" ?
22905				{ click: props, text: name } :
22906				props;
22907
22908			// Default to a non-submitting button
22909			props = $.extend( { type: "button" }, props );
22910
22911			// Change the context for the click callback to be the main element
22912			click = props.click;
22913			buttonOptions = {
22914				icon: props.icon,
22915				iconPosition: props.iconPosition,
22916				showLabel: props.showLabel,
22917
22918				// Deprecated options
22919				icons: props.icons,
22920				text: props.text
22921			};
22922
22923			delete props.click;
22924			delete props.icon;
22925			delete props.iconPosition;
22926			delete props.showLabel;
22927
22928			// Deprecated options
22929			delete props.icons;
22930			if ( typeof props.text === "boolean" ) {
22931				delete props.text;
22932			}
22933
22934			$( "<button></button>", props )
22935				.button( buttonOptions )
22936				.appendTo( that.uiButtonSet )
22937				.on( "click", function() {
22938					click.apply( that.element[ 0 ], arguments );
22939				} );
22940		} );
22941		this._addClass( this.uiDialog, "ui-dialog-buttons" );
22942		this.uiDialogButtonPane.appendTo( this.uiDialog );
22943	},
22944
22945	_makeDraggable: function() {
22946		var that = this,
22947			options = this.options;
22948
22949		function filteredUi( ui ) {
22950			return {
22951				position: ui.position,
22952				offset: ui.offset
22953			};
22954		}
22955
22956		this.uiDialog.draggable( {
22957			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
22958			handle: ".ui-dialog-titlebar",
22959			containment: "document",
22960			start: function( event, ui ) {
22961				that._addClass( $( this ), "ui-dialog-dragging" );
22962				that._blockFrames();
22963				that._trigger( "dragStart", event, filteredUi( ui ) );
22964			},
22965			drag: function( event, ui ) {
22966				that._trigger( "drag", event, filteredUi( ui ) );
22967			},
22968			stop: function( event, ui ) {
22969				var left = ui.offset.left - that.document.scrollLeft(),
22970					top = ui.offset.top - that.document.scrollTop();
22971
22972				options.position = {
22973					my: "left top",
22974					at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
22975						"top" + ( top >= 0 ? "+" : "" ) + top,
22976					of: that.window
22977				};
22978				that._removeClass( $( this ), "ui-dialog-dragging" );
22979				that._unblockFrames();
22980				that._trigger( "dragStop", event, filteredUi( ui ) );
22981			}
22982		} );
22983	},
22984
22985	_makeResizable: function() {
22986		var that = this,
22987			options = this.options,
22988			handles = options.resizable,
22989
22990			// .ui-resizable has position: relative defined in the stylesheet
22991			// but dialogs have to use absolute or fixed positioning
22992			position = this.uiDialog.css( "position" ),
22993			resizeHandles = typeof handles === "string" ?
22994				handles :
22995				"n,e,s,w,se,sw,ne,nw";
22996
22997		function filteredUi( ui ) {
22998			return {
22999				originalPosition: ui.originalPosition,
23000				originalSize: ui.originalSize,
23001				position: ui.position,
23002				size: ui.size
23003			};
23004		}
23005
23006		this.uiDialog.resizable( {
23007			cancel: ".ui-dialog-content",
23008			containment: "document",
23009			alsoResize: this.element,
23010			maxWidth: options.maxWidth,
23011			maxHeight: options.maxHeight,
23012			minWidth: options.minWidth,
23013			minHeight: this._minHeight(),
23014			handles: resizeHandles,
23015			start: function( event, ui ) {
23016				that._addClass( $( this ), "ui-dialog-resizing" );
23017				that._blockFrames();
23018				that._trigger( "resizeStart", event, filteredUi( ui ) );
23019			},
23020			resize: function( event, ui ) {
23021				that._trigger( "resize", event, filteredUi( ui ) );
23022			},
23023			stop: function( event, ui ) {
23024				var offset = that.uiDialog.offset(),
23025					left = offset.left - that.document.scrollLeft(),
23026					top = offset.top - that.document.scrollTop();
23027
23028				options.height = that.uiDialog.height();
23029				options.width = that.uiDialog.width();
23030				options.position = {
23031					my: "left top",
23032					at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
23033						"top" + ( top >= 0 ? "+" : "" ) + top,
23034					of: that.window
23035				};
23036				that._removeClass( $( this ), "ui-dialog-resizing" );
23037				that._unblockFrames();
23038				that._trigger( "resizeStop", event, filteredUi( ui ) );
23039			}
23040		} )
23041			.css( "position", position );
23042	},
23043
23044	_trackFocus: function() {
23045		this._on( this.widget(), {
23046			focusin: function( event ) {
23047				this._makeFocusTarget();
23048				this._focusedElement = $( event.target );
23049			}
23050		} );
23051	},
23052
23053	_makeFocusTarget: function() {
23054		this._untrackInstance();
23055		this._trackingInstances().unshift( this );
23056	},
23057
23058	_untrackInstance: function() {
23059		var instances = this._trackingInstances(),
23060			exists = $.inArray( this, instances );
23061		if ( exists !== -1 ) {
23062			instances.splice( exists, 1 );
23063		}
23064	},
23065
23066	_trackingInstances: function() {
23067		var instances = this.document.data( "ui-dialog-instances" );
23068		if ( !instances ) {
23069			instances = [];
23070			this.document.data( "ui-dialog-instances", instances );
23071		}
23072		return instances;
23073	},
23074
23075	_minHeight: function() {
23076		var options = this.options;
23077
23078		return options.height === "auto" ?
23079			options.minHeight :
23080			Math.min( options.minHeight, options.height );
23081	},
23082
23083	_position: function() {
23084
23085		// Need to show the dialog to get the actual offset in the position plugin
23086		var isVisible = this.uiDialog.is( ":visible" );
23087		if ( !isVisible ) {
23088			this.uiDialog.show();
23089		}
23090		this.uiDialog.position( this.options.position );
23091		if ( !isVisible ) {
23092			this.uiDialog.hide();
23093		}
23094	},
23095
23096	_setOptions: function( options ) {
23097		var that = this,
23098			resize = false,
23099			resizableOptions = {};
23100
23101		$.each( options, function( key, value ) {
23102			that._setOption( key, value );
23103
23104			if ( key in that.sizeRelatedOptions ) {
23105				resize = true;
23106			}
23107			if ( key in that.resizableRelatedOptions ) {
23108				resizableOptions[ key ] = value;
23109			}
23110		} );
23111
23112		if ( resize ) {
23113			this._size();
23114			this._position();
23115		}
23116		if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
23117			this.uiDialog.resizable( "option", resizableOptions );
23118		}
23119	},
23120
23121	_setOption: function( key, value ) {
23122		var isDraggable, isResizable,
23123			uiDialog = this.uiDialog;
23124
23125		if ( key === "disabled" ) {
23126			return;
23127		}
23128
23129		this._super( key, value );
23130
23131		if ( key === "appendTo" ) {
23132			this.uiDialog.appendTo( this._appendTo() );
23133		}
23134
23135		if ( key === "buttons" ) {
23136			this._createButtons();
23137		}
23138
23139		if ( key === "closeText" ) {
23140			this.uiDialogTitlebarClose.button( {
23141
23142				// Ensure that we always pass a string
23143				label: $( "<a>" ).text( "" + this.options.closeText ).html()
23144			} );
23145		}
23146
23147		if ( key === "draggable" ) {
23148			isDraggable = uiDialog.is( ":data(ui-draggable)" );
23149			if ( isDraggable && !value ) {
23150				uiDialog.draggable( "destroy" );
23151			}
23152
23153			if ( !isDraggable && value ) {
23154				this._makeDraggable();
23155			}
23156		}
23157
23158		if ( key === "position" ) {
23159			this._position();
23160		}
23161
23162		if ( key === "resizable" ) {
23163
23164			// currently resizable, becoming non-resizable
23165			isResizable = uiDialog.is( ":data(ui-resizable)" );
23166			if ( isResizable && !value ) {
23167				uiDialog.resizable( "destroy" );
23168			}
23169
23170			// Currently resizable, changing handles
23171			if ( isResizable && typeof value === "string" ) {
23172				uiDialog.resizable( "option", "handles", value );
23173			}
23174
23175			// Currently non-resizable, becoming resizable
23176			if ( !isResizable && value !== false ) {
23177				this._makeResizable();
23178			}
23179		}
23180
23181		if ( key === "title" ) {
23182			this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
23183		}
23184	},
23185
23186	_size: function() {
23187
23188		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
23189		// divs will both have width and height set, so we need to reset them
23190		var nonContentHeight, minContentHeight, maxContentHeight,
23191			options = this.options;
23192
23193		// Reset content sizing
23194		this.element.show().css( {
23195			width: "auto",
23196			minHeight: 0,
23197			maxHeight: "none",
23198			height: 0
23199		} );
23200
23201		if ( options.minWidth > options.width ) {
23202			options.width = options.minWidth;
23203		}
23204
23205		// Reset wrapper sizing
23206		// determine the height of all the non-content elements
23207		nonContentHeight = this.uiDialog.css( {
23208			height: "auto",
23209			width: options.width
23210		} )
23211			.outerHeight();
23212		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
23213		maxContentHeight = typeof options.maxHeight === "number" ?
23214			Math.max( 0, options.maxHeight - nonContentHeight ) :
23215			"none";
23216
23217		if ( options.height === "auto" ) {
23218			this.element.css( {
23219				minHeight: minContentHeight,
23220				maxHeight: maxContentHeight,
23221				height: "auto"
23222			} );
23223		} else {
23224			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
23225		}
23226
23227		if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
23228			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
23229		}
23230	},
23231
23232	_blockFrames: function() {
23233		this.iframeBlocks = this.document.find( "iframe" ).map( function() {
23234			var iframe = $( this );
23235
23236			return $( "<div>" )
23237				.css( {
23238					position: "absolute",
23239					width: iframe.outerWidth(),
23240					height: iframe.outerHeight()
23241				} )
23242				.appendTo( iframe.parent() )
23243				.offset( iframe.offset() )[ 0 ];
23244		} );
23245	},
23246
23247	_unblockFrames: function() {
23248		if ( this.iframeBlocks ) {
23249			this.iframeBlocks.remove();
23250			delete this.iframeBlocks;
23251		}
23252	},
23253
23254	_allowInteraction: function( event ) {
23255		if ( $( event.target ).closest( ".ui-dialog" ).length ) {
23256			return true;
23257		}
23258
23259		// TODO: Remove hack when datepicker implements
23260		// the .ui-front logic (#8989)
23261		return !!$( event.target ).closest( ".ui-datepicker" ).length;
23262	},
23263
23264	_createOverlay: function() {
23265		if ( !this.options.modal ) {
23266			return;
23267		}
23268
23269		var jqMinor = $.fn.jquery.substring( 0, 4 );
23270
23271		// We use a delay in case the overlay is created from an
23272		// event that we're going to be cancelling (#2804)
23273		var isOpening = true;
23274		this._delay( function() {
23275			isOpening = false;
23276		} );
23277
23278		if ( !this.document.data( "ui-dialog-overlays" ) ) {
23279
23280			// Prevent use of anchors and inputs
23281			// This doesn't use `_on()` because it is a shared event handler
23282			// across all open modal dialogs.
23283			this.document.on( "focusin.ui-dialog", function( event ) {
23284				if ( isOpening ) {
23285					return;
23286				}
23287
23288				var instance = this._trackingInstances()[ 0 ];
23289				if ( !instance._allowInteraction( event ) ) {
23290					event.preventDefault();
23291					instance._focusTabbable();
23292
23293					// Support: jQuery >=3.4 <3.
vendor: 2,204 bytes, lines 23293-23381
232936 only
23294					// Focus re-triggering in jQuery 3.4/3.5 makes the original element
23295					// have its focus event propagated last, breaking the re-targeting.
23296					// Trigger focus in a delay in addition if needed to avoid the issue
23297					// See https://github.com/jquery/jquery/issues/4382
23298					if ( jqMinor === "3.4." || jqMinor === "3.5." ) {
23299						instance._delay( instance._restoreTabbableFocus );
23300					}
23301				}
23302			}.bind( this ) );
23303		}
23304
23305		this.overlay = $( "<div>" )
23306			.appendTo( this._appendTo() );
23307
23308		this._addClass( this.overlay, null, "ui-widget-overlay ui-front" );
23309		this._on( this.overlay, {
23310			mousedown: "_keepFocus"
23311		} );
23312		this.document.data( "ui-dialog-overlays",
23313			( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 );
23314	},
23315
23316	_destroyOverlay: function() {
23317		if ( !this.options.modal ) {
23318			return;
23319		}
23320
23321		if ( this.overlay ) {
23322			var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
23323
23324			if ( !overlays ) {
23325				this.document.off( "focusin.ui-dialog" );
23326				this.document.removeData( "ui-dialog-overlays" );
23327			} else {
23328				this.document.data( "ui-dialog-overlays", overlays );
23329			}
23330
23331			this.overlay.remove();
23332			this.overlay = null;
23333		}
23334	}
23335} );
23336
23337// DEPRECATED
23338// TODO: switch return back to widget declaration at top of file when this is removed
23339if ( $.uiBackCompat !== false ) {
23340
23341	// Backcompat for dialogClass option
23342	$.widget( "ui.dialog", $.ui.dialog, {
23343		options: {
23344			dialogClass: ""
23345		},
23346		_createWrapper: function() {
23347			this._super();
23348			this.uiDialog.addClass( this.options.dialogClass );
23349		},
23350		_setOption: function( key, value ) {
23351			if ( key === "dialogClass" ) {
23352				this.uiDialog
23353					.removeClass( this.options.dialogClass )
23354					.addClass( value );
23355			}
23356			this._superApply( arguments );
23357		}
23358	} );
23359}
23360
23361var widgetsDialog = $.ui.dialog;
23362
23363
23364/*!
23365 * jQuery UI Droppable 1.13.1
23366 * http://jqueryui.com
23367 *
23368 * Copyright jQuery Foundation and other contributors
23369 * Released under the MIT license.
23370 * http://jquery.org/license
23371 */
23372
23373//>>label: Droppable
23374//>>group: Interactions
23375//>>description: Enables drop targets for draggable elements.
23376//>>docs: http://api.jqueryui.com/droppable/
23377//>>demos: http://jqueryui.com/droppable/
23378
23379
23380$.widget( "ui.droppable", {
23381	version: "1.13.1
vendor: 11,311 bytes, lines 23381-23809
23381",
23382	widgetEventPrefix: "drop",
23383	options: {
23384		accept: "*",
23385		addClasses: true,
23386		greedy: false,
23387		scope: "default",
23388		tolerance: "intersect",
23389
23390		// Callbacks
23391		activate: null,
23392		deactivate: null,
23393		drop: null,
23394		out: null,
23395		over: null
23396	},
23397	_create: function() {
23398
23399		var proportions,
23400			o = this.options,
23401			accept = o.accept;
23402
23403		this.isover = false;
23404		this.isout = true;
23405
23406		this.accept = typeof accept === "function" ? accept : function( d ) {
23407			return d.is( accept );
23408		};
23409
23410		this.proportions = function( /* valueToWrite */ ) {
23411			if ( arguments.length ) {
23412
23413				// Store the droppable's proportions
23414				proportions = arguments[ 0 ];
23415			} else {
23416
23417				// Retrieve or derive the droppable's proportions
23418				return proportions ?
23419					proportions :
23420					proportions = {
23421						width: this.element[ 0 ].offsetWidth,
23422						height: this.element[ 0 ].offsetHeight
23423					};
23424			}
23425		};
23426
23427		this._addToManager( o.scope );
23428
23429		if ( o.addClasses ) {
23430			this._addClass( "ui-droppable" );
23431		}
23432
23433	},
23434
23435	_addToManager: function( scope ) {
23436
23437		// Add the reference and positions to the manager
23438		$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
23439		$.ui.ddmanager.droppables[ scope ].push( this );
23440	},
23441
23442	_splice: function( drop ) {
23443		var i = 0;
23444		for ( ; i < drop.length; i++ ) {
23445			if ( drop[ i ] === this ) {
23446				drop.splice( i, 1 );
23447			}
23448		}
23449	},
23450
23451	_destroy: function() {
23452		var drop = $.ui.ddmanager.droppables[ this.options.scope ];
23453
23454		this._splice( drop );
23455	},
23456
23457	_setOption: function( key, value ) {
23458
23459		if ( key === "accept" ) {
23460			this.accept = typeof value === "function" ? value : function( d ) {
23461				return d.is( value );
23462			};
23463		} else if ( key === "scope" ) {
23464			var drop = $.ui.ddmanager.droppables[ this.options.scope ];
23465
23466			this._splice( drop );
23467			this._addToManager( value );
23468		}
23469
23470		this._super( key, value );
23471	},
23472
23473	_activate: function( event ) {
23474		var draggable = $.ui.ddmanager.current;
23475
23476		this._addActiveClass();
23477		if ( draggable ) {
23478			this._trigger( "activate", event, this.ui( draggable ) );
23479		}
23480	},
23481
23482	_deactivate: function( event ) {
23483		var draggable = $.ui.ddmanager.current;
23484
23485		this._removeActiveClass();
23486		if ( draggable ) {
23487			this._trigger( "deactivate", event, this.ui( draggable ) );
23488		}
23489	},
23490
23491	_over: function( event ) {
23492
23493		var draggable = $.ui.ddmanager.current;
23494
23495		// Bail if draggable and droppable are same element
23496		if ( !draggable || ( draggable.currentItem ||
23497				draggable.element )[ 0 ] === this.element[ 0 ] ) {
23498			return;
23499		}
23500
23501		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
23502				draggable.element ) ) ) {
23503			this._addHoverClass();
23504			this._trigger( "over", event, this.ui( draggable ) );
23505		}
23506
23507	},
23508
23509	_out: function( event ) {
23510
23511		var draggable = $.ui.ddmanager.current;
23512
23513		// Bail if draggable and droppable are same element
23514		if ( !draggable || ( draggable.currentItem ||
23515				draggable.element )[ 0 ] === this.element[ 0 ] ) {
23516			return;
23517		}
23518
23519		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
23520				draggable.element ) ) ) {
23521			this._removeHoverClass();
23522			this._trigger( "out", event, this.ui( draggable ) );
23523		}
23524
23525	},
23526
23527	_drop: function( event, custom ) {
23528
23529		var draggable = custom || $.ui.ddmanager.current,
23530			childrenIntersection = false;
23531
23532		// Bail if draggable and droppable are same element
23533		if ( !draggable || ( draggable.currentItem ||
23534				draggable.element )[ 0 ] === this.element[ 0 ] ) {
23535			return false;
23536		}
23537
23538		this.element
23539			.find( ":data(ui-droppable)" )
23540			.not( ".ui-draggable-dragging" )
23541			.each( function() {
23542				var inst = $( this ).droppable( "instance" );
23543				if (
23544					inst.options.greedy &&
23545					!inst.options.disabled &&
23546					inst.options.scope === draggable.options.scope &&
23547					inst.accept.call(
23548						inst.element[ 0 ], ( draggable.currentItem || draggable.element )
23549					) &&
23550					$.ui.intersect(
23551						draggable,
23552						$.extend( inst, { offset: inst.element.offset() } ),
23553						inst.options.tolerance, event
23554					)
23555				) {
23556					childrenIntersection = true;
23557					return false;
23558				}
23559			} );
23560		if ( childrenIntersection ) {
23561			return false;
23562		}
23563
23564		if ( this.accept.call( this.element[ 0 ],
23565				( draggable.currentItem || draggable.element ) ) ) {
23566			this._removeActiveClass();
23567			this._removeHoverClass();
23568
23569			this._trigger( "drop", event, this.ui( draggable ) );
23570			return this.element;
23571		}
23572
23573		return false;
23574
23575	},
23576
23577	ui: function( c ) {
23578		return {
23579			draggable: ( c.currentItem || c.element ),
23580			helper: c.helper,
23581			position: c.position,
23582			offset: c.positionAbs
23583		};
23584	},
23585
23586	// Extension points just to make backcompat sane and avoid duplicating logic
23587	// TODO: Remove in 1.14 along with call to it below
23588	_addHoverClass: function() {
23589		this._addClass( "ui-droppable-hover" );
23590	},
23591
23592	_removeHoverClass: function() {
23593		this._removeClass( "ui-droppable-hover" );
23594	},
23595
23596	_addActiveClass: function() {
23597		this._addClass( "ui-droppable-active" );
23598	},
23599
23600	_removeActiveClass: function() {
23601		this._removeClass( "ui-droppable-active" );
23602	}
23603} );
23604
23605$.ui.intersect = ( function() {
23606	function isOverAxis( x, reference, size ) {
23607		return ( x >= reference ) && ( x < ( reference + size ) );
23608	}
23609
23610	return function( draggable, droppable, toleranceMode, event ) {
23611
23612		if ( !droppable.offset ) {
23613			return false;
23614		}
23615
23616		var x1 = ( draggable.positionAbs ||
23617				draggable.position.absolute ).left + draggable.margins.left,
23618			y1 = ( draggable.positionAbs ||
23619				draggable.position.absolute ).top + draggable.margins.top,
23620			x2 = x1 + draggable.helperProportions.width,
23621			y2 = y1 + draggable.helperProportions.height,
23622			l = droppable.offset.left,
23623			t = droppable.offset.top,
23624			r = l + droppable.proportions().width,
23625			b = t + droppable.proportions().height;
23626
23627		switch ( toleranceMode ) {
23628		case "fit":
23629			return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
23630		case "intersect":
23631			return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
23632				x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
23633				t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
23634				y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
23635		case "pointer":
23636			return isOverAxis( event.pageY, t, droppable.proportions().height ) &&
23637				isOverAxis( event.pageX, l, droppable.proportions().width );
23638		case "touch":
23639			return (
23640				( y1 >= t && y1 <= b ) || // Top edge touching
23641				( y2 >= t && y2 <= b ) || // Bottom edge touching
23642				( y1 < t && y2 > b ) // Surrounded vertically
23643			) && (
23644				( x1 >= l && x1 <= r ) || // Left edge touching
23645				( x2 >= l && x2 <= r ) || // Right edge touching
23646				( x1 < l && x2 > r ) // Surrounded horizontally
23647			);
23648		default:
23649			return false;
23650		}
23651	};
23652} )();
23653
23654/*
23655	This manager tracks offsets of draggables and droppables
23656*/
23657$.ui.ddmanager = {
23658	current: null,
23659	droppables: { "default": [] },
23660	prepareOffsets: function( t, event ) {
23661
23662		var i, j,
23663			m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
23664			type = event ? event.type : null, // workaround for #2317
23665			list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
23666
23667		droppablesLoop: for ( i = 0; i < m.length; i++ ) {
23668
23669			// No disabled and non-accepted
23670			if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],
23671					( t.currentItem || t.element ) ) ) ) {
23672				continue;
23673			}
23674
23675			// Filter out elements in the current dragged item
23676			for ( j = 0; j < list.length; j++ ) {
23677				if ( list[ j ] === m[ i ].element[ 0 ] ) {
23678					m[ i ].proportions().height = 0;
23679					continue droppablesLoop;
23680				}
23681			}
23682
23683			m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
23684			if ( !m[ i ].visible ) {
23685				continue;
23686			}
23687
23688			// Activate the droppable if used directly from draggables
23689			if ( type === "mousedown" ) {
23690				m[ i ]._activate.call( m[ i ], event );
23691			}
23692
23693			m[ i ].offset = m[ i ].element.offset();
23694			m[ i ].proportions( {
23695				width: m[ i ].element[ 0 ].offsetWidth,
23696				height: m[ i ].element[ 0 ].offsetHeight
23697			} );
23698
23699		}
23700
23701	},
23702	drop: function( draggable, event ) {
23703
23704		var dropped = false;
23705
23706		// Create a copy of the droppables in case the list changes during the drop (#9116)
23707		$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
23708
23709			if ( !this.options ) {
23710				return;
23711			}
23712			if ( !this.options.disabled && this.visible &&
23713					$.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
23714				dropped = this._drop.call( this, event ) || dropped;
23715			}
23716
23717			if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],
23718					( draggable.currentItem || draggable.element ) ) ) {
23719				this.isout = true;
23720				this.isover = false;
23721				this._deactivate.call( this, event );
23722			}
23723
23724		} );
23725		return dropped;
23726
23727	},
23728	dragStart: function( draggable, event ) {
23729
23730		// Listen for scrolling so that if the dragging causes scrolling the position of the
23731		// droppables can be recalculated (see #5003)
23732		draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() {
23733			if ( !draggable.options.refreshPositions ) {
23734				$.ui.ddmanager.prepareOffsets( draggable, event );
23735			}
23736		} );
23737	},
23738	drag: function( draggable, event ) {
23739
23740		// If you have a highly dynamic page, you might try this option. It renders positions
23741		// every time you move the mouse.
23742		if ( draggable.options.refreshPositions ) {
23743			$.ui.ddmanager.prepareOffsets( draggable, event );
23744		}
23745
23746		// Run through all droppables and check their positions based on specific tolerance options
23747		$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
23748
23749			if ( this.options.disabled || this.greedyChild || !this.visible ) {
23750				return;
23751			}
23752
23753			var parentInstance, scope, parent,
23754				intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
23755				c = !intersects && this.isover ?
23756					"isout" :
23757					( intersects && !this.isover ? "isover" : null );
23758			if ( !c ) {
23759				return;
23760			}
23761
23762			if ( this.options.greedy ) {
23763
23764				// find droppable parents with same scope
23765				scope = this.options.scope;
23766				parent = this.element.parents( ":data(ui-droppable)" ).filter( function() {
23767					return $( this ).droppable( "instance" ).options.scope === scope;
23768				} );
23769
23770				if ( parent.length ) {
23771					parentInstance = $( parent[ 0 ] ).droppable( "instance" );
23772					parentInstance.greedyChild = ( c === "isover" );
23773				}
23774			}
23775
23776			// We just moved into a greedy child
23777			if ( parentInstance && c === "isover" ) {
23778				parentInstance.isover = false;
23779				parentInstance.isout = true;
23780				parentInstance._out.call( parentInstance, event );
23781			}
23782
23783			this[ c ] = true;
23784			this[ c === "isout" ? "isover" : "isout" ] = false;
23785			this[ c === "isover" ? "_over" : "_out" ].call( this, event );
23786
23787			// We just moved out of a greedy child
23788			if ( parentInstance && c === "isout" ) {
23789				parentInstance.isout = false;
23790				parentInstance.isover = true;
23791				parentInstance._over.call( parentInstance, event );
23792			}
23793		} );
23794
23795	},
23796	dragStop: function( draggable, event ) {
23797		draggable.element.parentsUntil( "body" ).off( "scroll.droppable" );
23798
23799		// Call prepareOffsets one final time since IE does not fire return scroll events when
23800		// overflow was caused by drag (see #5003)
23801		if ( !draggable.options.refreshPositions ) {
23802			$.ui.ddmanager.prepareOffsets( draggable, event );
23803		}
23804	}
23805};
23806
23807// DEPRECATED
23808// TODO: switch return back to widget declaration at top of file when this is removed
23809if ( $.uiBackCompat 
23809!== false ) {
23810
23811	// Backcompat for activeClass and hoverClass options
23812	$.widget( "ui.droppable", $.ui.droppable, {
23813		options: {
23814			hoverClass: false,
23815			activeClass: false
23816		},
23817		_addActiveClass: function() {
23818			this._super();
23819			if ( this.options.activeClass ) {
23820				this.element.addClass( this.options.activeClass );
23821			}
23822		},
23823		_removeActiveClass: function() {
23824			this._super();
23825			if ( this.options.activeClass ) {
23826				this.element.removeClass( this.options.activeClass );
23827			}
23828		},
23829		_addHoverClass: function() {
23830			this._super();
23831			if ( this.options.hoverClass ) {
23832				this.element.addClass( this.options.hoverClass );
23833			}
23834		},
23835		_removeHoverClass: function() {
23836			this._super();
23837			if ( this.options.hoverClass ) {
23838				this.element.removeClass( this.options.hoverClass );
23839			}
23840		}
23841	} );
23842}
23843
23844var widgetsDroppable = $.ui.droppable;
23845
23846
23847/*!
23848 * jQuery UI Progressbar 1.13.1
23849 * http://jqueryui.com
23850 *
23851 * Copyright jQuery Foundation and other contributors
23852 * Released under the MIT license.
23853 * http://jquery.org/license
23854 */
23855
23856//>>label: Progressbar
23857//>>group: Widgets
23858/* eslint-disable max-len */
23859//>>
vendor: 4,217 bytes, lines 23859-24028
23859description: Displays a status indicator for loading state, standard percentage, and other progress indicators.
23860/* eslint-enable max-len */
23861//>>docs: http://api.jqueryui.com/progressbar/
23862//>>demos: http://jqueryui.com/progressbar/
23863//>>css.structure: ../../themes/base/core.css
23864//>>css.structure: ../../themes/base/progressbar.css
23865//>>css.theme: ../../themes/base/theme.css
23866
23867
23868var widgetsProgressbar = $.widget( "ui.progressbar", {
23869	version: "1.13.1",
23870	options: {
23871		classes: {
23872			"ui-progressbar": "ui-corner-all",
23873			"ui-progressbar-value": "ui-corner-left",
23874			"ui-progressbar-complete": "ui-corner-right"
23875		},
23876		max: 100,
23877		value: 0,
23878
23879		change: null,
23880		complete: null
23881	},
23882
23883	min: 0,
23884
23885	_create: function() {
23886
23887		// Constrain initial value
23888		this.oldValue = this.options.value = this._constrainedValue();
23889
23890		this.element.attr( {
23891
23892			// Only set static values; aria-valuenow and aria-valuemax are
23893			// set inside _refreshValue()
23894			role: "progressbar",
23895			"aria-valuemin": this.min
23896		} );
23897		this._addClass( "ui-progressbar", "ui-widget ui-widget-content" );
23898
23899		this.valueDiv = $( "<div>" ).appendTo( this.element );
23900		this._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" );
23901		this._refreshValue();
23902	},
23903
23904	_destroy: function() {
23905		this.element.removeAttr( "role aria-valuemin aria-valuemax aria-valuenow" );
23906
23907		this.valueDiv.remove();
23908	},
23909
23910	value: function( newValue ) {
23911		if ( newValue === undefined ) {
23912			return this.options.value;
23913		}
23914
23915		this.options.value = this._constrainedValue( newValue );
23916		this._refreshValue();
23917	},
23918
23919	_constrainedValue: function( newValue ) {
23920		if ( newValue === undefined ) {
23921			newValue = this.options.value;
23922		}
23923
23924		this.indeterminate = newValue === false;
23925
23926		// Sanitize value
23927		if ( typeof newValue !== "number" ) {
23928			newValue = 0;
23929		}
23930
23931		return this.indeterminate ? false :
23932			Math.min( this.options.max, Math.max( this.min, newValue ) );
23933	},
23934
23935	_setOptions: function( options ) {
23936
23937		// Ensure "value" option is set after other values (like max)
23938		var value = options.value;
23939		delete options.value;
23940
23941		this._super( options );
23942
23943		this.options.value = this._constrainedValue( value );
23944		this._refreshValue();
23945	},
23946
23947	_setOption: function( key, value ) {
23948		if ( key === "max" ) {
23949
23950			// Don't allow a max less than min
23951			value = Math.max( this.min, value );
23952		}
23953		this._super( key, value );
23954	},
23955
23956	_setOptionDisabled: function( value ) {
23957		this._super( value );
23958
23959		this.element.attr( "aria-disabled", value );
23960		this._toggleClass( null, "ui-state-disabled", !!value );
23961	},
23962
23963	_percentage: function() {
23964		return this.indeterminate ?
23965			100 :
23966			100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
23967	},
23968
23969	_refreshValue: function() {
23970		var value = this.options.value,
23971			percentage = this._percentage();
23972
23973		this.valueDiv
23974			.toggle( this.indeterminate || value > this.min )
23975			.width( percentage.toFixed( 0 ) + "%" );
23976
23977		this
23978			._toggleClass( this.valueDiv, "ui-progressbar-complete", null,
23979				value === this.options.max )
23980			._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate );
23981
23982		if ( this.indeterminate ) {
23983			this.element.removeAttr( "aria-valuenow" );
23984			if ( !this.overlayDiv ) {
23985				this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv );
23986				this._addClass( this.overlayDiv, "ui-progressbar-overlay" );
23987			}
23988		} else {
23989			this.element.attr( {
23990				"aria-valuemax": this.options.max,
23991				"aria-valuenow": value
23992			} );
23993			if ( this.overlayDiv ) {
23994				this.overlayDiv.remove();
23995				this.overlayDiv = null;
23996			}
23997		}
23998
23999		if ( this.oldValue !== value ) {
24000			this.oldValue = value;
24001			this._trigger( "change" );
24002		}
24003		if ( value === this.options.max ) {
24004			this._trigger( "complete" );
24005		}
24006	}
24007} );
24008
24009
24010/*!
24011 * jQuery UI Selectable 1.13.1
24012 * http://jqueryui.com
24013 *
24014 * Copyright jQuery Foundation and other contributors
24015 * Released under the MIT license.
24016 * http://jquery.org/license
24017 */
24018
24019//>>label: Selectable
24020//>>group: Interactions
24021//>>description: Allows groups of elements to be selected with the mouse.
24022//>>docs: http://api.jqueryui.com/selectable/
24023//>>demos: http://jqueryui.com/selectable/
24024//>>css.structure: ../../themes/base/selectable.css
24025
24026
24027var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
24028	version: "1.13.1
vendor: 7,325 bytes, lines 24028-24309
24028",
24029	options: {
24030		appendTo: "body",
24031		autoRefresh: true,
24032		distance: 0,
24033		filter: "*",
24034		tolerance: "touch",
24035
24036		// Callbacks
24037		selected: null,
24038		selecting: null,
24039		start: null,
24040		stop: null,
24041		unselected: null,
24042		unselecting: null
24043	},
24044	_create: function() {
24045		var that = this;
24046
24047		this._addClass( "ui-selectable" );
24048
24049		this.dragged = false;
24050
24051		// Cache selectee children based on filter
24052		this.refresh = function() {
24053			that.elementPos = $( that.element[ 0 ] ).offset();
24054			that.selectees = $( that.options.filter, that.element[ 0 ] );
24055			that._addClass( that.selectees, "ui-selectee" );
24056			that.selectees.each( function() {
24057				var $this = $( this ),
24058					selecteeOffset = $this.offset(),
24059					pos = {
24060						left: selecteeOffset.left - that.elementPos.left,
24061						top: selecteeOffset.top - that.elementPos.top
24062					};
24063				$.data( this, "selectable-item", {
24064					element: this,
24065					$element: $this,
24066					left: pos.left,
24067					top: pos.top,
24068					right: pos.left + $this.outerWidth(),
24069					bottom: pos.top + $this.outerHeight(),
24070					startselected: false,
24071					selected: $this.hasClass( "ui-selected" ),
24072					selecting: $this.hasClass( "ui-selecting" ),
24073					unselecting: $this.hasClass( "ui-unselecting" )
24074				} );
24075			} );
24076		};
24077		this.refresh();
24078
24079		this._mouseInit();
24080
24081		this.helper = $( "<div>" );
24082		this._addClass( this.helper, "ui-selectable-helper" );
24083	},
24084
24085	_destroy: function() {
24086		this.selectees.removeData( "selectable-item" );
24087		this._mouseDestroy();
24088	},
24089
24090	_mouseStart: function( event ) {
24091		var that = this,
24092			options = this.options;
24093
24094		this.opos = [ event.pageX, event.pageY ];
24095		this.elementPos = $( this.element[ 0 ] ).offset();
24096
24097		if ( this.options.disabled ) {
24098			return;
24099		}
24100
24101		this.selectees = $( options.filter, this.element[ 0 ] );
24102
24103		this._trigger( "start", event );
24104
24105		$( options.appendTo ).append( this.helper );
24106
24107		// position helper (lasso)
24108		this.helper.css( {
24109			"left": event.pageX,
24110			"top": event.pageY,
24111			"width": 0,
24112			"height": 0
24113		} );
24114
24115		if ( options.autoRefresh ) {
24116			this.refresh();
24117		}
24118
24119		this.selectees.filter( ".ui-selected" ).each( function() {
24120			var selectee = $.data( this, "selectable-item" );
24121			selectee.startselected = true;
24122			if ( !event.metaKey && !event.ctrlKey ) {
24123				that._removeClass( selectee.$element, "ui-selected" );
24124				selectee.selected = false;
24125				that._addClass( selectee.$element, "ui-unselecting" );
24126				selectee.unselecting = true;
24127
24128				// selectable UNSELECTING callback
24129				that._trigger( "unselecting", event, {
24130					unselecting: selectee.element
24131				} );
24132			}
24133		} );
24134
24135		$( event.target ).parents().addBack().each( function() {
24136			var doSelect,
24137				selectee = $.data( this, "selectable-item" );
24138			if ( selectee ) {
24139				doSelect = ( !event.metaKey && !event.ctrlKey ) ||
24140					!selectee.$element.hasClass( "ui-selected" );
24141				that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
24142					._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
24143				selectee.unselecting = !doSelect;
24144				selectee.selecting = doSelect;
24145				selectee.selected = doSelect;
24146
24147				// selectable (UN)SELECTING callback
24148				if ( doSelect ) {
24149					that._trigger( "selecting", event, {
24150						selecting: selectee.element
24151					} );
24152				} else {
24153					that._trigger( "unselecting", event, {
24154						unselecting: selectee.element
24155					} );
24156				}
24157				return false;
24158			}
24159		} );
24160
24161	},
24162
24163	_mouseDrag: function( event ) {
24164
24165		this.dragged = true;
24166
24167		if ( this.options.disabled ) {
24168			return;
24169		}
24170
24171		var tmp,
24172			that = this,
24173			options = this.options,
24174			x1 = this.opos[ 0 ],
24175			y1 = this.opos[ 1 ],
24176			x2 = event.pageX,
24177			y2 = event.pageY;
24178
24179		if ( x1 > x2 ) {
24180			tmp = x2; x2 = x1; x1 = tmp;
24181		}
24182		if ( y1 > y2 ) {
24183			tmp = y2; y2 = y1; y1 = tmp;
24184		}
24185		this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
24186
24187		this.selectees.each( function() {
24188			var selectee = $.data( this, "selectable-item" ),
24189				hit = false,
24190				offset = {};
24191
24192			//prevent helper from being selected if appendTo: selectable
24193			if ( !selectee || selectee.element === that.element[ 0 ] ) {
24194				return;
24195			}
24196
24197			offset.left   = selectee.left   + that.elementPos.left;
24198			offset.right  = selectee.right  + that.elementPos.left;
24199			offset.top    = selectee.top    + that.elementPos.top;
24200			offset.bottom = selectee.bottom + that.elementPos.top;
24201
24202			if ( options.tolerance === "touch" ) {
24203				hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
24204                    offset.bottom < y1 ) );
24205			} else if ( options.tolerance === "fit" ) {
24206				hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
24207                    offset.bottom < y2 );
24208			}
24209
24210			if ( hit ) {
24211
24212				// SELECT
24213				if ( selectee.selected ) {
24214					that._removeClass( selectee.$element, "ui-selected" );
24215					selectee.selected = false;
24216				}
24217				if ( selectee.unselecting ) {
24218					that._removeClass( selectee.$element, "ui-unselecting" );
24219					selectee.unselecting = false;
24220				}
24221				if ( !selectee.selecting ) {
24222					that._addClass( selectee.$element, "ui-selecting" );
24223					selectee.selecting = true;
24224
24225					// selectable SELECTING callback
24226					that._trigger( "selecting", event, {
24227						selecting: selectee.element
24228					} );
24229				}
24230			} else {
24231
24232				// UNSELECT
24233				if ( selectee.selecting ) {
24234					if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
24235						that._removeClass( selectee.$element, "ui-selecting" );
24236						selectee.selecting = false;
24237						that._addClass( selectee.$element, "ui-selected" );
24238						selectee.selected = true;
24239					} else {
24240						that._removeClass( selectee.$element, "ui-selecting" );
24241						selectee.selecting = false;
24242						if ( selectee.startselected ) {
24243							that._addClass( selectee.$element, "ui-unselecting" );
24244							selectee.unselecting = true;
24245						}
24246
24247						// selectable UNSELECTING callback
24248						that._trigger( "unselecting", event, {
24249							unselecting: selectee.element
24250						} );
24251					}
24252				}
24253				if ( selectee.selected ) {
24254					if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
24255						that._removeClass( selectee.$element, "ui-selected" );
24256						selectee.selected = false;
24257
24258						that._addClass( selectee.$element, "ui-unselecting" );
24259						selectee.unselecting = true;
24260
24261						// selectable UNSELECTING callback
24262						that._trigger( "unselecting", event, {
24263							unselecting: selectee.element
24264						} );
24265					}
24266				}
24267			}
24268		} );
24269
24270		return false;
24271	},
24272
24273	_mouseStop: function( event ) {
24274		var that = this;
24275
24276		this.dragged = false;
24277
24278		$( ".ui-unselecting", this.element[ 0 ] ).each( function() {
24279			var selectee = $.data( this, "selectable-item" );
24280			that._removeClass( selectee.$element, "ui-unselecting" );
24281			selectee.unselecting = false;
24282			selectee.startselected = false;
24283			that._trigger( "unselected", event, {
24284				unselected: selectee.element
24285			} );
24286		} );
24287		$( ".ui-selecting", this.element[ 0 ] ).each( function() {
24288			var selectee = $.data( this, "selectable-item" );
24289			that._removeClass( selectee.$element, "ui-selecting" )
24290				._addClass( selectee.$element, "ui-selected" );
24291			selectee.selecting = false;
24292			selectee.selected = true;
24293			selectee.startselected = true;
24294			that._trigger( "selected", event, {
24295				selected: selectee.element
24296			} );
24297		} );
24298		this._trigger( "stop", event );
24299
24300		this.helper.remove();
24301
24302		return false;
24303	}
24304
24305} );
24306
24307
24308/*!
24309 * jQuery UI Selectmenu 1.1
vendor: 1,951 bytes, lines 24309-24385
243093.1
24310 * http://jqueryui.com
24311 *
24312 * Copyright jQuery Foundation and other contributors
24313 * Released under the MIT license.
24314 * http://jquery.org/license
24315 */
24316
24317//>>label: Selectmenu
24318//>>group: Widgets
24319/* eslint-disable max-len */
24320//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.
24321/* eslint-enable max-len */
24322//>>docs: http://api.jqueryui.com/selectmenu/
24323//>>demos: http://jqueryui.com/selectmenu/
24324//>>css.structure: ../../themes/base/core.css
24325//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css
24326//>>css.theme: ../../themes/base/theme.css
24327
24328
24329var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
24330	version: "1.13.1",
24331	defaultElement: "<select>",
24332	options: {
24333		appendTo: null,
24334		classes: {
24335			"ui-selectmenu-button-open": "ui-corner-top",
24336			"ui-selectmenu-button-closed": "ui-corner-all"
24337		},
24338		disabled: null,
24339		icons: {
24340			button: "ui-icon-triangle-1-s"
24341		},
24342		position: {
24343			my: "left top",
24344			at: "left bottom",
24345			collision: "none"
24346		},
24347		width: false,
24348
24349		// Callbacks
24350		change: null,
24351		close: null,
24352		focus: null,
24353		open: null,
24354		select: null
24355	},
24356
24357	_create: function() {
24358		var selectmenuId = this.element.uniqueId().attr( "id" );
24359		this.ids = {
24360			element: selectmenuId,
24361			button: selectmenuId + "-button",
24362			menu: selectmenuId + "-menu"
24363		};
24364
24365		this._drawButton();
24366		this._drawMenu();
24367		this._bindFormResetHandler();
24368
24369		this._rendered = false;
24370		this.menuItems = $();
24371	},
24372
24373	_drawButton: function() {
24374		var icon,
24375			that = this,
24376			item = this._parseOption(
24377				this.element.find( "option:selected" ),
24378				this.element[ 0 ].selectedIndex
24379			);
24380
24381		// Associate existing label with the new button
24382		this.labels = this.element.labels().attr( "for", this.ids.button );
24383		this._on( this.labels, {
24384			click: function( event ) {
24385				this.button.trigger( "focus" 
vendor: 7,703 bytes, lines 24385-24713
24385);
24386				event.preventDefault();
24387			}
24388		} );
24389
24390		// Hide original select element
24391		this.element.hide();
24392
24393		// Create button
24394		this.button = $( "<span>", {
24395			tabindex: this.options.disabled ? -1 : 0,
24396			id: this.ids.button,
24397			role: "combobox",
24398			"aria-expanded": "false",
24399			"aria-autocomplete": "list",
24400			"aria-owns": this.ids.menu,
24401			"aria-haspopup": "true",
24402			title: this.element.attr( "title" )
24403		} )
24404			.insertAfter( this.element );
24405
24406		this._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed",
24407			"ui-button ui-widget" );
24408
24409		icon = $( "<span>" ).appendTo( this.button );
24410		this._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button );
24411		this.buttonItem = this._renderButtonItem( item )
24412			.appendTo( this.button );
24413
24414		if ( this.options.width !== false ) {
24415			this._resizeButton();
24416		}
24417
24418		this._on( this.button, this._buttonEvents );
24419		this.button.one( "focusin", function() {
24420
24421			// Delay rendering the menu items until the button receives focus.
24422			// The menu may have already been rendered via a programmatic open.
24423			if ( !that._rendered ) {
24424				that._refreshMenu();
24425			}
24426		} );
24427	},
24428
24429	_drawMenu: function() {
24430		var that = this;
24431
24432		// Create menu
24433		this.menu = $( "<ul>", {
24434			"aria-hidden": "true",
24435			"aria-labelledby": this.ids.button,
24436			id: this.ids.menu
24437		} );
24438
24439		// Wrap menu
24440		this.menuWrap = $( "<div>" ).append( this.menu );
24441		this._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" );
24442		this.menuWrap.appendTo( this._appendTo() );
24443
24444		// Initialize menu widget
24445		this.menuInstance = this.menu
24446			.menu( {
24447				classes: {
24448					"ui-menu": "ui-corner-bottom"
24449				},
24450				role: "listbox",
24451				select: function( event, ui ) {
24452					event.preventDefault();
24453
24454					// Support: IE8
24455					// If the item was selected via a click, the text selection
24456					// will be destroyed in IE
24457					that._setSelection();
24458
24459					that._select( ui.item.data( "ui-selectmenu-item" ), event );
24460				},
24461				focus: function( event, ui ) {
24462					var item = ui.item.data( "ui-selectmenu-item" );
24463
24464					// Prevent inital focus from firing and check if its a newly focused item
24465					if ( that.focusIndex != null && item.index !== that.focusIndex ) {
24466						that._trigger( "focus", event, { item: item } );
24467						if ( !that.isOpen ) {
24468							that._select( item, event );
24469						}
24470					}
24471					that.focusIndex = item.index;
24472
24473					that.button.attr( "aria-activedescendant",
24474						that.menuItems.eq( item.index ).attr( "id" ) );
24475				}
24476			} )
24477			.menu( "instance" );
24478
24479		// Don't close the menu on mouseleave
24480		this.menuInstance._off( this.menu, "mouseleave" );
24481
24482		// Cancel the menu's collapseAll on document click
24483		this.menuInstance._closeOnDocumentClick = function() {
24484			return false;
24485		};
24486
24487		// Selects often contain empty items, but never contain dividers
24488		this.menuInstance._isDivider = function() {
24489			return false;
24490		};
24491	},
24492
24493	refresh: function() {
24494		this._refreshMenu();
24495		this.buttonItem.replaceWith(
24496			this.buttonItem = this._renderButtonItem(
24497
24498				// Fall back to an empty object in case there are no options
24499				this._getSelectedItem().data( "ui-selectmenu-item" ) || {}
24500			)
24501		);
24502		if ( this.options.width === null ) {
24503			this._resizeButton();
24504		}
24505	},
24506
24507	_refreshMenu: function() {
24508		var item,
24509			options = this.element.find( "option" );
24510
24511		this.menu.empty();
24512
24513		this._parseOptions( options );
24514		this._renderMenu( this.menu, this.items );
24515
24516		this.menuInstance.refresh();
24517		this.menuItems = this.menu.find( "li" )
24518			.not( ".ui-selectmenu-optgroup" )
24519				.find( ".ui-menu-item-wrapper" );
24520
24521		this._rendered = true;
24522
24523		if ( !options.length ) {
24524			return;
24525		}
24526
24527		item = this._getSelectedItem();
24528
24529		// Update the menu to have the correct item focused
24530		this.menuInstance.focus( null, item );
24531		this._setAria( item.data( "ui-selectmenu-item" ) );
24532
24533		// Set disabled state
24534		this._setOption( "disabled", this.element.prop( "disabled" ) );
24535	},
24536
24537	open: function( event ) {
24538		if ( this.options.disabled ) {
24539			return;
24540		}
24541
24542		// If this is the first time the menu is being opened, render the items
24543		if ( !this._rendered ) {
24544			this._refreshMenu();
24545		} else {
24546
24547			// Menu clears focus on close, reset focus to selected item
24548			this._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" );
24549			this.menuInstance.focus( null, this._getSelectedItem() );
24550		}
24551
24552		// If there are no options, don't open the menu
24553		if ( !this.menuItems.length ) {
24554			return;
24555		}
24556
24557		this.isOpen = true;
24558		this._toggleAttr();
24559		this._resizeMenu();
24560		this._position();
24561
24562		this._on( this.document, this._documentClick );
24563
24564		this._trigger( "open", event );
24565	},
24566
24567	_position: function() {
24568		this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
24569	},
24570
24571	close: function( event ) {
24572		if ( !this.isOpen ) {
24573			return;
24574		}
24575
24576		this.isOpen = false;
24577		this._toggleAttr();
24578
24579		this.range = null;
24580		this._off( this.document );
24581
24582		this._trigger( "close", event );
24583	},
24584
24585	widget: function() {
24586		return this.button;
24587	},
24588
24589	menuWidget: function() {
24590		return this.menu;
24591	},
24592
24593	_renderButtonItem: function( item ) {
24594		var buttonItem = $( "<span>" );
24595
24596		this._setText( buttonItem, item.label );
24597		this._addClass( buttonItem, "ui-selectmenu-text" );
24598
24599		return buttonItem;
24600	},
24601
24602	_renderMenu: function( ul, items ) {
24603		var that = this,
24604			currentOptgroup = "";
24605
24606		$.each( items, function( index, item ) {
24607			var li;
24608
24609			if ( item.optgroup !== currentOptgroup ) {
24610				li = $( "<li>", {
24611					text: item.optgroup
24612				} );
24613				that._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" +
24614					( item.element.parent( "optgroup" ).prop( "disabled" ) ?
24615						" ui-state-disabled" :
24616						"" ) );
24617
24618				li.appendTo( ul );
24619
24620				currentOptgroup = item.optgroup;
24621			}
24622
24623			that._renderItemData( ul, item );
24624		} );
24625	},
24626
24627	_renderItemData: function( ul, item ) {
24628		return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
24629	},
24630
24631	_renderItem: function( ul, item ) {
24632		var li = $( "<li>" ),
24633			wrapper = $( "<div>", {
24634				title: item.element.attr( "title" )
24635			} );
24636
24637		if ( item.disabled ) {
24638			this._addClass( li, null, "ui-state-disabled" );
24639		}
24640		this._setText( wrapper, item.label );
24641
24642		return li.append( wrapper ).appendTo( ul );
24643	},
24644
24645	_setText: function( element, value ) {
24646		if ( value ) {
24647			element.text( value );
24648		} else {
24649			element.html( "&#160;" );
24650		}
24651	},
24652
24653	_move: function( direction, event ) {
24654		var item, next,
24655			filter = ".ui-menu-item";
24656
24657		if ( this.isOpen ) {
24658			item = this.menuItems.eq( this.focusIndex ).parent( "li" );
24659		} else {
24660			item = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
24661			filter += ":not(.ui-state-disabled)";
24662		}
24663
24664		if ( direction === "first" || direction === "last" ) {
24665			next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
24666		} else {
24667			next = item[ direction + "All" ]( filter ).eq( 0 );
24668		}
24669
24670		if ( next.length ) {
24671			this.menuInstance.focus( event, next );
24672		}
24673	},
24674
24675	_getSelectedItem: function() {
24676		return this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
24677	},
24678
24679	_toggle: function( event ) {
24680		this[ this.isOpen ? "close" : "open" ]( event );
24681	},
24682
24683	_setSelection: function() {
24684		var selection;
24685
24686		if ( !this.range ) {
24687			return;
24688		}
24689
24690		if ( window.getSelection ) {
24691			selection = window.getSelection();
24692			selection.removeAllRanges();
24693			selection.addRange( this.range );
24694
24695		// Support: IE8
24696		} else {
24697			this.range.select();
24698		}
24699
24700		// Support: IE
24701		// Setting the text selection kills the button focus in IE, but
24702		// restoring the focus doesn't kill the selection.
24703		this.button.focus();
24704	},
24705
24706	_documentClick: {
24707		mousedown: function( event ) {
24708			if ( !this.isOpen ) {
24709				return;
24710			}
24711
24712			if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +
24713				
24713$
vendor: 5,493 bytes, lines 24713-24944
24713.escapeSelector( this.ids.button ) ).length ) {
24714				this.close( event );
24715			}
24716		}
24717	},
24718
24719	_buttonEvents: {
24720
24721		// Prevent text selection from being reset when interacting with the selectmenu (#10144)
24722		mousedown: function() {
24723			var selection;
24724
24725			if ( window.getSelection ) {
24726				selection = window.getSelection();
24727				if ( selection.rangeCount ) {
24728					this.range = selection.getRangeAt( 0 );
24729				}
24730
24731			// Support: IE8
24732			} else {
24733				this.range = document.selection.createRange();
24734			}
24735		},
24736
24737		click: function( event ) {
24738			this._setSelection();
24739			this._toggle( event );
24740		},
24741
24742		keydown: function( event ) {
24743			var preventDefault = true;
24744			switch ( event.keyCode ) {
24745			case $.ui.keyCode.TAB:
24746			case $.ui.keyCode.ESCAPE:
24747				this.close( event );
24748				preventDefault = false;
24749				break;
24750			case $.ui.keyCode.ENTER:
24751				if ( this.isOpen ) {
24752					this._selectFocusedItem( event );
24753				}
24754				break;
24755			case $.ui.keyCode.UP:
24756				if ( event.altKey ) {
24757					this._toggle( event );
24758				} else {
24759					this._move( "prev", event );
24760				}
24761				break;
24762			case $.ui.keyCode.DOWN:
24763				if ( event.altKey ) {
24764					this._toggle( event );
24765				} else {
24766					this._move( "next", event );
24767				}
24768				break;
24769			case $.ui.keyCode.SPACE:
24770				if ( this.isOpen ) {
24771					this._selectFocusedItem( event );
24772				} else {
24773					this._toggle( event );
24774				}
24775				break;
24776			case $.ui.keyCode.LEFT:
24777				this._move( "prev", event );
24778				break;
24779			case $.ui.keyCode.RIGHT:
24780				this._move( "next", event );
24781				break;
24782			case $.ui.keyCode.HOME:
24783			case $.ui.keyCode.PAGE_UP:
24784				this._move( "first", event );
24785				break;
24786			case $.ui.keyCode.END:
24787			case $.ui.keyCode.PAGE_DOWN:
24788				this._move( "last", event );
24789				break;
24790			default:
24791				this.menu.trigger( event );
24792				preventDefault = false;
24793			}
24794
24795			if ( preventDefault ) {
24796				event.preventDefault();
24797			}
24798		}
24799	},
24800
24801	_selectFocusedItem: function( event ) {
24802		var item = this.menuItems.eq( this.focusIndex ).parent( "li" );
24803		if ( !item.hasClass( "ui-state-disabled" ) ) {
24804			this._select( item.data( "ui-selectmenu-item" ), event );
24805		}
24806	},
24807
24808	_select: function( item, event ) {
24809		var oldIndex = this.element[ 0 ].selectedIndex;
24810
24811		// Change native select element
24812		this.element[ 0 ].selectedIndex = item.index;
24813		this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );
24814		this._setAria( item );
24815		this._trigger( "select", event, { item: item } );
24816
24817		if ( item.index !== oldIndex ) {
24818			this._trigger( "change", event, { item: item } );
24819		}
24820
24821		this.close( event );
24822	},
24823
24824	_setAria: function( item ) {
24825		var id = this.menuItems.eq( item.index ).attr( "id" );
24826
24827		this.button.attr( {
24828			"aria-labelledby": id,
24829			"aria-activedescendant": id
24830		} );
24831		this.menu.attr( "aria-activedescendant", id );
24832	},
24833
24834	_setOption: function( key, value ) {
24835		if ( key === "icons" ) {
24836			var icon = this.button.find( "span.ui-icon" );
24837			this._removeClass( icon, null, this.options.icons.button )
24838				._addClass( icon, null, value.button );
24839		}
24840
24841		this._super( key, value );
24842
24843		if ( key === "appendTo" ) {
24844			this.menuWrap.appendTo( this._appendTo() );
24845		}
24846
24847		if ( key === "width" ) {
24848			this._resizeButton();
24849		}
24850	},
24851
24852	_setOptionDisabled: function( value ) {
24853		this._super( value );
24854
24855		this.menuInstance.option( "disabled", value );
24856		this.button.attr( "aria-disabled", value );
24857		this._toggleClass( this.button, null, "ui-state-disabled", value );
24858
24859		this.element.prop( "disabled", value );
24860		if ( value ) {
24861			this.button.attr( "tabindex", -1 );
24862			this.close();
24863		} else {
24864			this.button.attr( "tabindex", 0 );
24865		}
24866	},
24867
24868	_appendTo: function() {
24869		var element = this.options.appendTo;
24870
24871		if ( element ) {
24872			element = element.jquery || element.nodeType ?
24873				$( element ) :
24874				this.document.find( element ).eq( 0 );
24875		}
24876
24877		if ( !element || !element[ 0 ] ) {
24878			element = this.element.closest( ".ui-front, dialog" );
24879		}
24880
24881		if ( !element.length ) {
24882			element = this.document[ 0 ].body;
24883		}
24884
24885		return element;
24886	},
24887
24888	_toggleAttr: function() {
24889		this.button.attr( "aria-expanded", this.isOpen );
24890
24891		// We can't use two _toggleClass() calls here, because we need to make sure
24892		// we always remove classes first and add them second, otherwise if both classes have the
24893		// same theme class, it will be removed after we add it.
24894		this._removeClass( this.button, "ui-selectmenu-button-" +
24895			( this.isOpen ? "closed" : "open" ) )
24896			._addClass( this.button, "ui-selectmenu-button-" +
24897				( this.isOpen ? "open" : "closed" ) )
24898			._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen );
24899
24900		this.menu.attr( "aria-hidden", !this.isOpen );
24901	},
24902
24903	_resizeButton: function() {
24904		var width = this.options.width;
24905
24906		// For `width: false`, just remove inline style and stop
24907		if ( width === false ) {
24908			this.button.css( "width", "" );
24909			return;
24910		}
24911
24912		// For `width: null`, match the width of the original element
24913		if ( width === null ) {
24914			width = this.element.show().outerWidth();
24915			this.element.hide();
24916		}
24917
24918		this.button.outerWidth( width );
24919	},
24920
24921	_resizeMenu: function() {
24922		this.menu.outerWidth( Math.max(
24923			this.button.outerWidth(),
24924
24925			// Support: IE10
24926			// IE10 wraps long text (possibly a rounding bug)
24927			// so we add 1px to avoid the wrapping
24928			this.menu.width( "" ).outerWidth() + 1
24929		) );
24930	},
24931
24932	_getCreateOptions: function() {
24933		var options = this._super();
24934
24935		options.disabled = this.element.prop( "disabled" );
24936
24937		return options;
24938	},
24939
24940	_parseOptions: function( options ) {
24941		var that = this,
24942			data = [];
24943		options.each( function( index, item ) {
24944			
vendor: 3,668 bytes, lines 24944-25094
24944if ( item.hidden ) {
24945				return;
24946			}
24947
24948			data.push( that._parseOption( $( item ), index ) );
24949		} );
24950		this.items = data;
24951	},
24952
24953	_parseOption: function( option, index ) {
24954		var optgroup = option.parent( "optgroup" );
24955
24956		return {
24957			element: option,
24958			index: index,
24959			value: option.val(),
24960			label: option.text(),
24961			optgroup: optgroup.attr( "label" ) || "",
24962			disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
24963		};
24964	},
24965
24966	_destroy: function() {
24967		this._unbindFormResetHandler();
24968		this.menuWrap.remove();
24969		this.button.remove();
24970		this.element.show();
24971		this.element.removeUniqueId();
24972		this.labels.attr( "for", this.ids.element );
24973	}
24974} ] );
24975
24976
24977/*!
24978 * jQuery UI Slider 1.13.1
24979 * http://jqueryui.com
24980 *
24981 * Copyright jQuery Foundation and other contributors
24982 * Released under the MIT license.
24983 * http://jquery.org/license
24984 */
24985
24986//>>label: Slider
24987//>>group: Widgets
24988//>>description: Displays a flexible slider with ranges and accessibility via keyboard.
24989//>>docs: http://api.jqueryui.com/slider/
24990//>>demos: http://jqueryui.com/slider/
24991//>>css.structure: ../../themes/base/core.css
24992//>>css.structure: ../../themes/base/slider.css
24993//>>css.theme: ../../themes/base/theme.css
24994
24995
24996var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
24997	version: "1.13.1",
24998	widgetEventPrefix: "slide",
24999
25000	options: {
25001		animate: false,
25002		classes: {
25003			"ui-slider": "ui-corner-all",
25004			"ui-slider-handle": "ui-corner-all",
25005
25006			// Note: ui-widget-header isn't the most fittingly semantic framework class for this
25007			// element, but worked best visually with a variety of themes
25008			"ui-slider-range": "ui-corner-all ui-widget-header"
25009		},
25010		distance: 0,
25011		max: 100,
25012		min: 0,
25013		orientation: "horizontal",
25014		range: false,
25015		step: 1,
25016		value: 0,
25017		values: null,
25018
25019		// Callbacks
25020		change: null,
25021		slide: null,
25022		start: null,
25023		stop: null
25024	},
25025
25026	// Number of pages in a slider
25027	// (how many times can you page up/down to go through the whole range)
25028	numPages: 5,
25029
25030	_create: function() {
25031		this._keySliding = false;
25032		this._mouseSliding = false;
25033		this._animateOff = true;
25034		this._handleIndex = null;
25035		this._detectOrientation();
25036		this._mouseInit();
25037		this._calculateNewMax();
25038
25039		this._addClass( "ui-slider ui-slider-" + this.orientation,
25040			"ui-widget ui-widget-content" );
25041
25042		this._refresh();
25043
25044		this._animateOff = false;
25045	},
25046
25047	_refresh: function() {
25048		this._createRange();
25049		this._createHandles();
25050		this._setupEvents();
25051		this._refreshValue();
25052	},
25053
25054	_createHandles: function() {
25055		var i, handleCount,
25056			options = this.options,
25057			existingHandles = this.element.find( ".ui-slider-handle" ),
25058			handle = "<span tabindex='0'></span>",
25059			handles = [];
25060
25061		handleCount = ( options.values && options.values.length ) || 1;
25062
25063		if ( existingHandles.length > handleCount ) {
25064			existingHandles.slice( handleCount ).remove();
25065			existingHandles = existingHandles.slice( 0, handleCount );
25066		}
25067
25068		for ( i = existingHandles.length; i < handleCount; i++ ) {
25069			handles.push( handle );
25070		}
25071
25072		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
25073
25074		this._addClass( this.handles, "ui-slider-handle", "ui-state-default" );
25075
25076		this.handle = this.handles.eq( 0 );
25077
25078		this.handles.each( function( i ) {
25079			$( this )
25080				.data( "ui-slider-handle-index", i )
25081				.attr( "tabIndex", 0 );
25082		} );
25083	},
25084
25085	_createRange: function() {
25086		var options = this.options;
25087
25088		if ( options.range ) {
25089			if ( options.range === true ) {
25090				if ( !options.values ) {
25091					options.values = [ this._valueMin(), this._valueMin() ];
25092				} else if ( options.values.length && options.values.length !== 2 ) {
25093					options.values = [ options.values[ 0 ], options.values[ 0 ] ];
25094				} else if ( Array
vendor: 6,343 bytes, lines 25094-25340
25094.isArray( options.values ) ) {
25095					options.values = options.values.slice( 0 );
25096				}
25097			}
25098
25099			if ( !this.range || !this.range.length ) {
25100				this.range = $( "<div>" )
25101					.appendTo( this.element );
25102
25103				this._addClass( this.range, "ui-slider-range" );
25104			} else {
25105				this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );
25106
25107				// Handle range switching from true to min/max
25108				this.range.css( {
25109					"left": "",
25110					"bottom": ""
25111				} );
25112			}
25113			if ( options.range === "min" || options.range === "max" ) {
25114				this._addClass( this.range, "ui-slider-range-" + options.range );
25115			}
25116		} else {
25117			if ( this.range ) {
25118				this.range.remove();
25119			}
25120			this.range = null;
25121		}
25122	},
25123
25124	_setupEvents: function() {
25125		this._off( this.handles );
25126		this._on( this.handles, this._handleEvents );
25127		this._hoverable( this.handles );
25128		this._focusable( this.handles );
25129	},
25130
25131	_destroy: function() {
25132		this.handles.remove();
25133		if ( this.range ) {
25134			this.range.remove();
25135		}
25136
25137		this._mouseDestroy();
25138	},
25139
25140	_mouseCapture: function( event ) {
25141		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
25142			that = this,
25143			o = this.options;
25144
25145		if ( o.disabled ) {
25146			return false;
25147		}
25148
25149		this.elementSize = {
25150			width: this.element.outerWidth(),
25151			height: this.element.outerHeight()
25152		};
25153		this.elementOffset = this.element.offset();
25154
25155		position = { x: event.pageX, y: event.pageY };
25156		normValue = this._normValueFromMouse( position );
25157		distance = this._valueMax() - this._valueMin() + 1;
25158		this.handles.each( function( i ) {
25159			var thisDistance = Math.abs( normValue - that.values( i ) );
25160			if ( ( distance > thisDistance ) ||
25161				( distance === thisDistance &&
25162					( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {
25163				distance = thisDistance;
25164				closestHandle = $( this );
25165				index = i;
25166			}
25167		} );
25168
25169		allowed = this._start( event, index );
25170		if ( allowed === false ) {
25171			return false;
25172		}
25173		this._mouseSliding = true;
25174
25175		this._handleIndex = index;
25176
25177		this._addClass( closestHandle, null, "ui-state-active" );
25178		closestHandle.trigger( "focus" );
25179
25180		offset = closestHandle.offset();
25181		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
25182		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
25183			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
25184			top: event.pageY - offset.top -
25185				( closestHandle.height() / 2 ) -
25186				( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) -
25187				( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) +
25188				( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 )
25189		};
25190
25191		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
25192			this._slide( event, index, normValue );
25193		}
25194		this._animateOff = true;
25195		return true;
25196	},
25197
25198	_mouseStart: function() {
25199		return true;
25200	},
25201
25202	_mouseDrag: function( event ) {
25203		var position = { x: event.pageX, y: event.pageY },
25204			normValue = this._normValueFromMouse( position );
25205
25206		this._slide( event, this._handleIndex, normValue );
25207
25208		return false;
25209	},
25210
25211	_mouseStop: function( event ) {
25212		this._removeClass( this.handles, null, "ui-state-active" );
25213		this._mouseSliding = false;
25214
25215		this._stop( event, this._handleIndex );
25216		this._change( event, this._handleIndex );
25217
25218		this._handleIndex = null;
25219		this._clickOffset = null;
25220		this._animateOff = false;
25221
25222		return false;
25223	},
25224
25225	_detectOrientation: function() {
25226		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
25227	},
25228
25229	_normValueFromMouse: function( position ) {
25230		var pixelTotal,
25231			pixelMouse,
25232			percentMouse,
25233			valueTotal,
25234			valueMouse;
25235
25236		if ( this.orientation === "horizontal" ) {
25237			pixelTotal = this.elementSize.width;
25238			pixelMouse = position.x - this.elementOffset.left -
25239				( this._clickOffset ? this._clickOffset.left : 0 );
25240		} else {
25241			pixelTotal = this.elementSize.height;
25242			pixelMouse = position.y - this.elementOffset.top -
25243				( this._clickOffset ? this._clickOffset.top : 0 );
25244		}
25245
25246		percentMouse = ( pixelMouse / pixelTotal );
25247		if ( percentMouse > 1 ) {
25248			percentMouse = 1;
25249		}
25250		if ( percentMouse < 0 ) {
25251			percentMouse = 0;
25252		}
25253		if ( this.orientation === "vertical" ) {
25254			percentMouse = 1 - percentMouse;
25255		}
25256
25257		valueTotal = this._valueMax() - this._valueMin();
25258		valueMouse = this._valueMin() + percentMouse * valueTotal;
25259
25260		return this._trimAlignValue( valueMouse );
25261	},
25262
25263	_uiHash: function( index, value, values ) {
25264		var uiHash = {
25265			handle: this.handles[ index ],
25266			handleIndex: index,
25267			value: value !== undefined ? value : this.value()
25268		};
25269
25270		if ( this._hasMultipleValues() ) {
25271			uiHash.value = value !== undefined ? value : this.values( index );
25272			uiHash.values = values || this.values();
25273		}
25274
25275		return uiHash;
25276	},
25277
25278	_hasMultipleValues: function() {
25279		return this.options.values && this.options.values.length;
25280	},
25281
25282	_start: function( event, index ) {
25283		return this._trigger( "start", event, this._uiHash( index ) );
25284	},
25285
25286	_slide: function( event, index, newVal ) {
25287		var allowed, otherVal,
25288			currentValue = this.value(),
25289			newValues = this.values();
25290
25291		if ( this._hasMultipleValues() ) {
25292			otherVal = this.values( index ? 0 : 1 );
25293			currentValue = this.values( index );
25294
25295			if ( this.options.values.length === 2 && this.options.range === true ) {
25296				newVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );
25297			}
25298
25299			newValues[ index ] = newVal;
25300		}
25301
25302		if ( newVal === currentValue ) {
25303			return;
25304		}
25305
25306		allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) );
25307
25308		// A slide can be canceled by returning false from the slide callback
25309		if ( allowed === false ) {
25310			return;
25311		}
25312
25313		if ( this._hasMultipleValues() ) {
25314			this.values( index, newVal );
25315		} else {
25316			this.value( newVal );
25317		}
25318	},
25319
25320	_stop: function( event, index ) {
25321		this._trigger( "stop", event, this._uiHash( index ) );
25322	},
25323
25324	_change: function( event, index ) {
25325		if ( !this._keySliding && !this._mouseSliding ) {
25326
25327			//store the last changed value index for reference when handles overlap
25328			this._lastChangedValue = index;
25329			this._trigger( "change", event, this._uiHash( index ) );
25330		}
25331	},
25332
25333	value: function( newValue ) {
25334		if ( arguments.length ) {
25335			this.options.value = this._trimAlignValue( newValue );
25336			this._refreshValue();
25337			this._change( null, 0 );
25338			return;
25339		}
25340
vendor: 4,358 bytes, lines 25341-25513
25341		return this._value();
25342	},
25343
25344	values: function( index, newValue ) {
25345		var vals,
25346			newValues,
25347			i;
25348
25349		if ( arguments.length > 1 ) {
25350			this.options.values[ index ] = this._trimAlignValue( newValue );
25351			this._refreshValue();
25352			this._change( null, index );
25353			return;
25354		}
25355
25356		if ( arguments.length ) {
25357			if ( Array.isArray( arguments[ 0 ] ) ) {
25358				vals = this.options.values;
25359				newValues = arguments[ 0 ];
25360				for ( i = 0; i < vals.length; i += 1 ) {
25361					vals[ i ] = this._trimAlignValue( newValues[ i ] );
25362					this._change( null, i );
25363				}
25364				this._refreshValue();
25365			} else {
25366				if ( this._hasMultipleValues() ) {
25367					return this._values( index );
25368				} else {
25369					return this.value();
25370				}
25371			}
25372		} else {
25373			return this._values();
25374		}
25375	},
25376
25377	_setOption: function( key, value ) {
25378		var i,
25379			valsLength = 0;
25380
25381		if ( key === "range" && this.options.range === true ) {
25382			if ( value === "min" ) {
25383				this.options.value = this._values( 0 );
25384				this.options.values = null;
25385			} else if ( value === "max" ) {
25386				this.options.value = this._values( this.options.values.length - 1 );
25387				this.options.values = null;
25388			}
25389		}
25390
25391		if ( Array.isArray( this.options.values ) ) {
25392			valsLength = this.options.values.length;
25393		}
25394
25395		this._super( key, value );
25396
25397		switch ( key ) {
25398			case "orientation":
25399				this._detectOrientation();
25400				this._removeClass( "ui-slider-horizontal ui-slider-vertical" )
25401					._addClass( "ui-slider-" + this.orientation );
25402				this._refreshValue();
25403				if ( this.options.range ) {
25404					this._refreshRange( value );
25405				}
25406
25407				// Reset positioning from previous orientation
25408				this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
25409				break;
25410			case "value":
25411				this._animateOff = true;
25412				this._refreshValue();
25413				this._change( null, 0 );
25414				this._animateOff = false;
25415				break;
25416			case "values":
25417				this._animateOff = true;
25418				this._refreshValue();
25419
25420				// Start from the last handle to prevent unreachable handles (#9046)
25421				for ( i = valsLength - 1; i >= 0; i-- ) {
25422					this._change( null, i );
25423				}
25424				this._animateOff = false;
25425				break;
25426			case "step":
25427			case "min":
25428			case "max":
25429				this._animateOff = true;
25430				this._calculateNewMax();
25431				this._refreshValue();
25432				this._animateOff = false;
25433				break;
25434			case "range":
25435				this._animateOff = true;
25436				this._refresh();
25437				this._animateOff = false;
25438				break;
25439		}
25440	},
25441
25442	_setOptionDisabled: function( value ) {
25443		this._super( value );
25444
25445		this._toggleClass( null, "ui-state-disabled", !!value );
25446	},
25447
25448	//internal value getter
25449	// _value() returns value trimmed by min and max, aligned by step
25450	_value: function() {
25451		var val = this.options.value;
25452		val = this._trimAlignValue( val );
25453
25454		return val;
25455	},
25456
25457	//internal values getter
25458	// _values() returns array of values trimmed by min and max, aligned by step
25459	// _values( index ) returns single value trimmed by min and max, aligned by step
25460	_values: function( index ) {
25461		var val,
25462			vals,
25463			i;
25464
25465		if ( arguments.length ) {
25466			val = this.options.values[ index ];
25467			val = this._trimAlignValue( val );
25468
25469			return val;
25470		} else if ( this._hasMultipleValues() ) {
25471
25472			// .slice() creates a copy of the array
25473			// this copy gets trimmed by min and max and then returned
25474			vals = this.options.values.slice();
25475			for ( i = 0; i < vals.length; i += 1 ) {
25476				vals[ i ] = this._trimAlignValue( vals[ i ] );
25477			}
25478
25479			return vals;
25480		} else {
25481			return [];
25482		}
25483	},
25484
25485	// Returns the step-aligned value that val is closest to, between (inclusive) min and max
25486	_trimAlignValue: function( val ) {
25487		if ( val <= this._valueMin() ) {
25488			return this._valueMin();
25489		}
25490		if ( val >= this._valueMax() ) {
25491			return this._valueMax();
25492		}
25493		var step = ( this.options.step > 0 ) ? this.options.step : 1,
25494			valModStep = ( val - this._valueMin() ) % step,
25495			alignValue = val - valModStep;
25496
25497		if ( Math.abs( valModStep ) * 2 >= step ) {
25498			alignValue += ( valModStep > 0 ) ? step : ( -step );
25499		}
25500
25501		// Since JavaScript has problems with large floats, round
25502		// the final value to 5 digits after the decimal point (see #4124)
25503		return parseFloat( alignValue.toFixed( 5 ) );
25504	},
25505
25506	_calculateNewMax: function() {
25507		var max = this.options.max,
25508			min = this._valueMin(),
25509			step = this.options.step,
25510			aboveMin = Math.round( ( max - min ) / step ) * step;
25511		max = aboveMin + min;
25512		if ( max > this.options.max ) {
25513
vendor: 5,594 bytes, lines 25514-25713
25514			//If max is not divisible by step, rounding off may increase its value
25515			max -= step;
25516		}
25517		this.max = parseFloat( max.toFixed( this._precision() ) );
25518	},
25519
25520	_precision: function() {
25521		var precision = this._precisionOf( this.options.step );
25522		if ( this.options.min !== null ) {
25523			precision = Math.max( precision, this._precisionOf( this.options.min ) );
25524		}
25525		return precision;
25526	},
25527
25528	_precisionOf: function( num ) {
25529		var str = num.toString(),
25530			decimal = str.indexOf( "." );
25531		return decimal === -1 ? 0 : str.length - decimal - 1;
25532	},
25533
25534	_valueMin: function() {
25535		return this.options.min;
25536	},
25537
25538	_valueMax: function() {
25539		return this.max;
25540	},
25541
25542	_refreshRange: function( orientation ) {
25543		if ( orientation === "vertical" ) {
25544			this.range.css( { "width": "", "left": "" } );
25545		}
25546		if ( orientation === "horizontal" ) {
25547			this.range.css( { "height": "", "bottom": "" } );
25548		}
25549	},
25550
25551	_refreshValue: function() {
25552		var lastValPercent, valPercent, value, valueMin, valueMax,
25553			oRange = this.options.range,
25554			o = this.options,
25555			that = this,
25556			animate = ( !this._animateOff ) ? o.animate : false,
25557			_set = {};
25558
25559		if ( this._hasMultipleValues() ) {
25560			this.handles.each( function( i ) {
25561				valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -
25562					that._valueMin() ) * 100;
25563				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
25564				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
25565				if ( that.options.range === true ) {
25566					if ( that.orientation === "horizontal" ) {
25567						if ( i === 0 ) {
25568							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
25569								left: valPercent + "%"
25570							}, o.animate );
25571						}
25572						if ( i === 1 ) {
25573							that.range[ animate ? "animate" : "css" ]( {
25574								width: ( valPercent - lastValPercent ) + "%"
25575							}, {
25576								queue: false,
25577								duration: o.animate
25578							} );
25579						}
25580					} else {
25581						if ( i === 0 ) {
25582							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
25583								bottom: ( valPercent ) + "%"
25584							}, o.animate );
25585						}
25586						if ( i === 1 ) {
25587							that.range[ animate ? "animate" : "css" ]( {
25588								height: ( valPercent - lastValPercent ) + "%"
25589							}, {
25590								queue: false,
25591								duration: o.animate
25592							} );
25593						}
25594					}
25595				}
25596				lastValPercent = valPercent;
25597			} );
25598		} else {
25599			value = this.value();
25600			valueMin = this._valueMin();
25601			valueMax = this._valueMax();
25602			valPercent = ( valueMax !== valueMin ) ?
25603					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
25604					0;
25605			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
25606			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
25607
25608			if ( oRange === "min" && this.orientation === "horizontal" ) {
25609				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
25610					width: valPercent + "%"
25611				}, o.animate );
25612			}
25613			if ( oRange === "max" && this.orientation === "horizontal" ) {
25614				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
25615					width: ( 100 - valPercent ) + "%"
25616				}, o.animate );
25617			}
25618			if ( oRange === "min" && this.orientation === "vertical" ) {
25619				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
25620					height: valPercent + "%"
25621				}, o.animate );
25622			}
25623			if ( oRange === "max" && this.orientation === "vertical" ) {
25624				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
25625					height: ( 100 - valPercent ) + "%"
25626				}, o.animate );
25627			}
25628		}
25629	},
25630
25631	_handleEvents: {
25632		keydown: function( event ) {
25633			var allowed, curVal, newVal, step,
25634				index = $( event.target ).data( "ui-slider-handle-index" );
25635
25636			switch ( event.keyCode ) {
25637				case $.ui.keyCode.HOME:
25638				case $.ui.keyCode.END:
25639				case $.ui.keyCode.PAGE_UP:
25640				case $.ui.keyCode.PAGE_DOWN:
25641				case $.ui.keyCode.UP:
25642				case $.ui.keyCode.RIGHT:
25643				case $.ui.keyCode.DOWN:
25644				case $.ui.keyCode.LEFT:
25645					event.preventDefault();
25646					if ( !this._keySliding ) {
25647						this._keySliding = true;
25648						this._addClass( $( event.target ), null, "ui-state-active" );
25649						allowed = this._start( event, index );
25650						if ( allowed === false ) {
25651							return;
25652						}
25653					}
25654					break;
25655			}
25656
25657			step = this.options.step;
25658			if ( this._hasMultipleValues() ) {
25659				curVal = newVal = this.values( index );
25660			} else {
25661				curVal = newVal = this.value();
25662			}
25663
25664			switch ( event.keyCode ) {
25665				case $.ui.keyCode.HOME:
25666					newVal = this._valueMin();
25667					break;
25668				case $.ui.keyCode.END:
25669					newVal = this._valueMax();
25670					break;
25671				case $.ui.keyCode.PAGE_UP:
25672					newVal = this._trimAlignValue(
25673						curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
25674					);
25675					break;
25676				case $.ui.keyCode.PAGE_DOWN:
25677					newVal = this._trimAlignValue(
25678						curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );
25679					break;
25680				case $.ui.keyCode.UP:
25681				case $.ui.keyCode.RIGHT:
25682					if ( curVal === this._valueMax() ) {
25683						return;
25684					}
25685					newVal = this._trimAlignValue( curVal + step );
25686					break;
25687				case $.ui.keyCode.DOWN:
25688				case $.ui.keyCode.LEFT:
25689					if ( curVal === this._valueMin() ) {
25690						return;
25691					}
25692					newVal = this._trimAlignValue( curVal - step );
25693					break;
25694			}
25695
25696			this._slide( event, index, newVal );
25697		},
25698		keyup: function( event ) {
25699			var index = $( event.target ).data( "ui-slider-handle-index" );
25700
25701			if ( this._keySliding ) {
25702				this._keySliding = false;
25703				this._stop( event, index );
25704				this._change( event, index );
25705				this._removeClass( $( event.target ), null, "ui-state-active" );
25706			}
25707		}
25708	}
25709} );
25710
25711
25712/*!
25713 * jQuery UI Sortable 1.1
257133.1
25714 * http://jqueryui.com
25715 *
25716 * Copyright jQuery Foundation and other contributors
25717 * Released under the MIT license.
25718 * http://jquery.org/license
25719 */
25720
25721//>>label: Sortable
25722//>>group: Interactions
25723//>>description: Enables items in a list to be sorted using the mouse.
25724//>>docs: http://api.jqueryui.com/sortable/
25725//>>demos: http://jqueryui.com/sortable/
25726//>>css.structure: ../../themes/base/sortable.css
25727
25728
25729var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
25730	version: "1.13.1
vendor: 7,925 bytes, lines 25730-26049
25730",
25731	widgetEventPrefix: "sort",
25732	ready: false,
25733	options: {
25734		appendTo: "parent",
25735		axis: false,
25736		connectWith: false,
25737		containment: false,
25738		cursor: "auto",
25739		cursorAt: false,
25740		dropOnEmpty: true,
25741		forcePlaceholderSize: false,
25742		forceHelperSize: false,
25743		grid: false,
25744		handle: false,
25745		helper: "original",
25746		items: "> *",
25747		opacity: false,
25748		placeholder: false,
25749		revert: false,
25750		scroll: true,
25751		scrollSensitivity: 20,
25752		scrollSpeed: 20,
25753		scope: "default",
25754		tolerance: "intersect",
25755		zIndex: 1000,
25756
25757		// Callbacks
25758		activate: null,
25759		beforeStop: null,
25760		change: null,
25761		deactivate: null,
25762		out: null,
25763		over: null,
25764		receive: null,
25765		remove: null,
25766		sort: null,
25767		start: null,
25768		stop: null,
25769		update: null
25770	},
25771
25772	_isOverAxis: function( x, reference, size ) {
25773		return ( x >= reference ) && ( x < ( reference + size ) );
25774	},
25775
25776	_isFloating: function( item ) {
25777		return ( /left|right/ ).test( item.css( "float" ) ) ||
25778			( /inline|table-cell/ ).test( item.css( "display" ) );
25779	},
25780
25781	_create: function() {
25782		this.containerCache = {};
25783		this._addClass( "ui-sortable" );
25784
25785		//Get the items
25786		this.refresh();
25787
25788		//Let's determine the parent's offset
25789		this.offset = this.element.offset();
25790
25791		//Initialize mouse events for interaction
25792		this._mouseInit();
25793
25794		this._setHandleClassName();
25795
25796		//We're ready to go
25797		this.ready = true;
25798
25799	},
25800
25801	_setOption: function( key, value ) {
25802		this._super( key, value );
25803
25804		if ( key === "handle" ) {
25805			this._setHandleClassName();
25806		}
25807	},
25808
25809	_setHandleClassName: function() {
25810		var that = this;
25811		this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );
25812		$.each( this.items, function() {
25813			that._addClass(
25814				this.instance.options.handle ?
25815					this.item.find( this.instance.options.handle ) :
25816					this.item,
25817				"ui-sortable-handle"
25818			);
25819		} );
25820	},
25821
25822	_destroy: function() {
25823		this._mouseDestroy();
25824
25825		for ( var i = this.items.length - 1; i >= 0; i-- ) {
25826			this.items[ i ].item.removeData( this.widgetName + "-item" );
25827		}
25828
25829		return this;
25830	},
25831
25832	_mouseCapture: function( event, overrideHandle ) {
25833		var currentItem = null,
25834			validHandle = false,
25835			that = this;
25836
25837		if ( this.reverting ) {
25838			return false;
25839		}
25840
25841		if ( this.options.disabled || this.options.type === "static" ) {
25842			return false;
25843		}
25844
25845		//We have to refresh the items data once first
25846		this._refreshItems( event );
25847
25848		//Find out if the clicked node (or one of its parents) is a actual item in this.items
25849		$( event.target ).parents().each( function() {
25850			if ( $.data( this, that.widgetName + "-item" ) === that ) {
25851				currentItem = $( this );
25852				return false;
25853			}
25854		} );
25855		if ( $.data( event.target, that.widgetName + "-item" ) === that ) {
25856			currentItem = $( event.target );
25857		}
25858
25859		if ( !currentItem ) {
25860			return false;
25861		}
25862		if ( this.options.handle && !overrideHandle ) {
25863			$( this.options.handle, currentItem ).find( "*" ).addBack().each( function() {
25864				if ( this === event.target ) {
25865					validHandle = true;
25866				}
25867			} );
25868			if ( !validHandle ) {
25869				return false;
25870			}
25871		}
25872
25873		this.currentItem = currentItem;
25874		this._removeCurrentsFromItems();
25875		return true;
25876
25877	},
25878
25879	_mouseStart: function( event, overrideHandle, noActivation ) {
25880
25881		var i, body,
25882			o = this.options;
25883
25884		this.currentContainer = this;
25885
25886		//We only need to call refreshPositions, because the refreshItems call has been moved to
25887		// mouseCapture
25888		this.refreshPositions();
25889
25890		//Prepare the dragged items parent
25891		this.appendTo = $( o.appendTo !== "parent" ?
25892				o.appendTo :
25893				this.currentItem.parent() );
25894
25895		//Create and append the visible helper
25896		this.helper = this._createHelper( event );
25897
25898		//Cache the helper size
25899		this._cacheHelperProportions();
25900
25901		/*
25902		 * - Position generation -
25903		 * This block generates everything position related - it's the core of draggables.
25904		 */
25905
25906		//Cache the margins of the original element
25907		this._cacheMargins();
25908
25909		//The element's absolute position on the page minus margins
25910		this.offset = this.currentItem.offset();
25911		this.offset = {
25912			top: this.offset.top - this.margins.top,
25913			left: this.offset.left - this.margins.left
25914		};
25915
25916		$.extend( this.offset, {
25917			click: { //Where the click happened, relative to the element
25918				left: event.pageX - this.offset.left,
25919				top: event.pageY - this.offset.top
25920			},
25921
25922			// This is a relative to absolute position minus the actual position calculation -
25923			// only used for relative positioned helper
25924			relative: this._getRelativeOffset()
25925		} );
25926
25927		// After we get the helper offset, but before we get the parent offset we can
25928		// change the helper's position to absolute
25929		// TODO: Still need to figure out a way to make relative sorting possible
25930		this.helper.css( "position", "absolute" );
25931		this.cssPosition = this.helper.css( "position" );
25932
25933		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
25934		if ( o.cursorAt ) {
25935			this._adjustOffsetFromHelper( o.cursorAt );
25936		}
25937
25938		//Cache the former DOM position
25939		this.domPosition = {
25940			prev: this.currentItem.prev()[ 0 ],
25941			parent: this.currentItem.parent()[ 0 ]
25942		};
25943
25944		// If the helper is not the original, hide the original so it's not playing any role during
25945		// the drag, won't cause anything bad this way
25946		if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
25947			this.currentItem.hide();
25948		}
25949
25950		//Create the placeholder
25951		this._createPlaceholder();
25952
25953		//Get the next scrolling parent
25954		this.scrollParent = this.placeholder.scrollParent();
25955
25956		$.extend( this.offset, {
25957			parent: this._getParentOffset()
25958		} );
25959
25960		//Set a containment if given in the options
25961		if ( o.containment ) {
25962			this._setContainment();
25963		}
25964
25965		if ( o.cursor && o.cursor !== "auto" ) { // cursor option
25966			body = this.document.find( "body" );
25967
25968			// Support: IE
25969			this.storedCursor = body.css( "cursor" );
25970			body.css( "cursor", o.cursor );
25971
25972			this.storedStylesheet =
25973				$( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );
25974		}
25975
25976		// We need to make sure to grab the zIndex before setting the
25977		// opacity, because setting the opacity to anything lower than 1
25978		// causes the zIndex to change from "auto" to 0.
25979		if ( o.zIndex ) { // zIndex option
25980			if ( this.helper.css( "zIndex" ) ) {
25981				this._storedZIndex = this.helper.css( "zIndex" );
25982			}
25983			this.helper.css( "zIndex", o.zIndex );
25984		}
25985
25986		if ( o.opacity ) { // opacity option
25987			if ( this.helper.css( "opacity" ) ) {
25988				this._storedOpacity = this.helper.css( "opacity" );
25989			}
25990			this.helper.css( "opacity", o.opacity );
25991		}
25992
25993		//Prepare scrolling
25994		if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
25995				this.scrollParent[ 0 ].tagName !== "HTML" ) {
25996			this.overflowOffset = this.scrollParent.offset();
25997		}
25998
25999		//Call callbacks
26000		this._trigger( "start", event, this._uiHash() );
26001
26002		//Recache the helper size
26003		if ( !this._preserveHelperProportions ) {
26004			this._cacheHelperProportions();
26005		}
26006
26007		//Post "activate" events to possible containers
26008		if ( !noActivation ) {
26009			for ( i = this.containers.length - 1; i >= 0; i-- ) {
26010				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
26011			}
26012		}
26013
26014		//Prepare possible droppables
26015		if ( $.ui.ddmanager ) {
26016			$.ui.ddmanager.current = this;
26017		}
26018
26019		if ( $.ui.ddmanager && !o.dropBehaviour ) {
26020			$.ui.ddmanager.prepareOffsets( this, event );
26021		}
26022
26023		this.dragging = true;
26024
26025		this._addClass( this.helper, "ui-sortable-helper" );
26026
26027		//Move the helper, if needed
26028		if ( !this.helper.parent().is( this.appendTo ) ) {
26029			this.helper.detach().appendTo( this.appendTo );
26030
26031			//Update position
26032			this.offset.parent = this._getParentOffset();
26033		}
26034
26035		//Generate the original position
26036		this.position = this.originalPosition = this._generatePosition( event );
26037		this.originalPageX = event.pageX;
26038		this.originalPageY = event.pageY;
26039		this.lastPositionAbs = this.positionAbs = this._convertPositionTo( "absolute" );
26040
26041		this._mouseDrag( event );
26042
26043		return true;
26044
26045	},
26046
26047	_scroll: function( event ) {
26048		var o = this.options,
26049			scrolled = false;
vendor: 4,489 bytes, lines 26050-26192
26050
26051		if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
26052				this.scrollParent[ 0 ].tagName !== "HTML" ) {
26053
26054			if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
26055					event.pageY < o.scrollSensitivity ) {
26056				this.scrollParent[ 0 ].scrollTop =
26057					scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
26058			} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
26059				this.scrollParent[ 0 ].scrollTop =
26060					scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
26061			}
26062
26063			if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
26064					event.pageX < o.scrollSensitivity ) {
26065				this.scrollParent[ 0 ].scrollLeft = scrolled =
26066					this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
26067			} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
26068				this.scrollParent[ 0 ].scrollLeft = scrolled =
26069					this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
26070			}
26071
26072		} else {
26073
26074			if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
26075				scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
26076			} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
26077					o.scrollSensitivity ) {
26078				scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
26079			}
26080
26081			if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
26082				scrolled = this.document.scrollLeft(
26083					this.document.scrollLeft() - o.scrollSpeed
26084				);
26085			} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
26086					o.scrollSensitivity ) {
26087				scrolled = this.document.scrollLeft(
26088					this.document.scrollLeft() + o.scrollSpeed
26089				);
26090			}
26091
26092		}
26093
26094		return scrolled;
26095	},
26096
26097	_mouseDrag: function( event ) {
26098		var i, item, itemElement, intersection,
26099			o = this.options;
26100
26101		//Compute the helpers position
26102		this.position = this._generatePosition( event );
26103		this.positionAbs = this._convertPositionTo( "absolute" );
26104
26105		//Set the helper position
26106		if ( !this.options.axis || this.options.axis !== "y" ) {
26107			this.helper[ 0 ].style.left = this.position.left + "px";
26108		}
26109		if ( !this.options.axis || this.options.axis !== "x" ) {
26110			this.helper[ 0 ].style.top = this.position.top + "px";
26111		}
26112
26113		//Do scrolling
26114		if ( o.scroll ) {
26115			if ( this._scroll( event ) !== false ) {
26116
26117				//Update item positions used in position checks
26118				this._refreshItemPositions( true );
26119
26120				if ( $.ui.ddmanager && !o.dropBehaviour ) {
26121					$.ui.ddmanager.prepareOffsets( this, event );
26122				}
26123			}
26124		}
26125
26126		this.dragDirection = {
26127			vertical: this._getDragVerticalDirection(),
26128			horizontal: this._getDragHorizontalDirection()
26129		};
26130
26131		//Rearrange
26132		for ( i = this.items.length - 1; i >= 0; i-- ) {
26133
26134			//Cache variables and intersection, continue if no intersection
26135			item = this.items[ i ];
26136			itemElement = item.item[ 0 ];
26137			intersection = this._intersectsWithPointer( item );
26138			if ( !intersection ) {
26139				continue;
26140			}
26141
26142			// Only put the placeholder inside the current Container, skip all
26143			// items from other containers. This works because when moving
26144			// an item from one container to another the
26145			// currentContainer is switched before the placeholder is moved.
26146			//
26147			// Without this, moving items in "sub-sortables" can cause
26148			// the placeholder to jitter between the outer and inner container.
26149			if ( item.instance !== this.currentContainer ) {
26150				continue;
26151			}
26152
26153			// Cannot intersect with itself
26154			// no useless actions that have been done before
26155			// no action if the item moved is the parent of the item checked
26156			if ( itemElement !== this.currentItem[ 0 ] &&
26157				this.placeholder[ intersection === 1 ?
26158				"next" : "prev" ]()[ 0 ] !== itemElement &&
26159				!$.contains( this.placeholder[ 0 ], itemElement ) &&
26160				( this.options.type === "semi-dynamic" ?
26161					!$.contains( this.element[ 0 ], itemElement ) :
26162					true
26163				)
26164			) {
26165
26166				this.direction = intersection === 1 ? "down" : "up";
26167
26168				if ( this.options.tolerance === "pointer" ||
26169						this._intersectsWithSides( item ) ) {
26170					this._rearrange( event, item );
26171				} else {
26172					break;
26173				}
26174
26175				this._trigger( "change", event, this._uiHash() );
26176				break;
26177			}
26178		}
26179
26180		//Post events to containers
26181		this._contactContainers( event );
26182
26183		//Interconnect with droppables
26184		if ( $.ui.ddmanager ) {
26185			$.ui.ddmanager.drag( this, event );
26186		}
26187
26188		//Call callbacks
26189		this._trigger( "sort", event, this._uiHash() );
26190
26191		this.lastPositionAbs = this.positionAbs;
26192		return false;
vendor: 5,063 bytes, lines 26193-26382
26193
26194	},
26195
26196	_mouseStop: function( event, noPropagation ) {
26197
26198		if ( !event ) {
26199			return;
26200		}
26201
26202		//If we are using droppables, inform the manager about the drop
26203		if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
26204			$.ui.ddmanager.drop( this, event );
26205		}
26206
26207		if ( this.options.revert ) {
26208			var that = this,
26209				cur = this.placeholder.offset(),
26210				axis = this.options.axis,
26211				animation = {};
26212
26213			if ( !axis || axis === "x" ) {
26214				animation.left = cur.left - this.offset.parent.left - this.margins.left +
26215					( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
26216						0 :
26217						this.offsetParent[ 0 ].scrollLeft
26218					);
26219			}
26220			if ( !axis || axis === "y" ) {
26221				animation.top = cur.top - this.offset.parent.top - this.margins.top +
26222					( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
26223						0 :
26224						this.offsetParent[ 0 ].scrollTop
26225					);
26226			}
26227			this.reverting = true;
26228			$( this.helper ).animate(
26229				animation,
26230				parseInt( this.options.revert, 10 ) || 500,
26231				function() {
26232					that._clear( event );
26233				}
26234			);
26235		} else {
26236			this._clear( event, noPropagation );
26237		}
26238
26239		return false;
26240
26241	},
26242
26243	cancel: function() {
26244
26245		if ( this.dragging ) {
26246
26247			this._mouseUp( new $.Event( "mouseup", { target: null } ) );
26248
26249			if ( this.options.helper === "original" ) {
26250				this.currentItem.css( this._storedCSS );
26251				this._removeClass( this.currentItem, "ui-sortable-helper" );
26252			} else {
26253				this.currentItem.show();
26254			}
26255
26256			//Post deactivating events to containers
26257			for ( var i = this.containers.length - 1; i >= 0; i-- ) {
26258				this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) );
26259				if ( this.containers[ i ].containerCache.over ) {
26260					this.containers[ i ]._trigger( "out", null, this._uiHash( this ) );
26261					this.containers[ i ].containerCache.over = 0;
26262				}
26263			}
26264
26265		}
26266
26267		if ( this.placeholder ) {
26268
26269			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
26270			// it unbinds ALL events from the original node!
26271			if ( this.placeholder[ 0 ].parentNode ) {
26272				this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
26273			}
26274			if ( this.options.helper !== "original" && this.helper &&
26275					this.helper[ 0 ].parentNode ) {
26276				this.helper.remove();
26277			}
26278
26279			$.extend( this, {
26280				helper: null,
26281				dragging: false,
26282				reverting: false,
26283				_noFinalSort: null
26284			} );
26285
26286			if ( this.domPosition.prev ) {
26287				$( this.domPosition.prev ).after( this.currentItem );
26288			} else {
26289				$( this.domPosition.parent ).prepend( this.currentItem );
26290			}
26291		}
26292
26293		return this;
26294
26295	},
26296
26297	serialize: function( o ) {
26298
26299		var items = this._getItemsAsjQuery( o && o.connected ),
26300			str = [];
26301		o = o || {};
26302
26303		$( items ).each( function() {
26304			var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" )
26305				.match( o.expression || ( /(.+)[\-=_](.+)/ ) );
26306			if ( res ) {
26307				str.push(
26308					( o.key || res[ 1 ] + "[]" ) +
26309					"=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );
26310			}
26311		} );
26312
26313		if ( !str.length && o.key ) {
26314			str.push( o.key + "=" );
26315		}
26316
26317		return str.join( "&" );
26318
26319	},
26320
26321	toArray: function( o ) {
26322
26323		var items = this._getItemsAsjQuery( o && o.connected ),
26324			ret = [];
26325
26326		o = o || {};
26327
26328		items.each( function() {
26329			ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" );
26330		} );
26331		return ret;
26332
26333	},
26334
26335	/* Be careful with the following core functions */
26336	_intersectsWith: function( item ) {
26337
26338		var x1 = this.positionAbs.left,
26339			x2 = x1 + this.helperProportions.width,
26340			y1 = this.positionAbs.top,
26341			y2 = y1 + this.helperProportions.height,
26342			l = item.left,
26343			r = l + item.width,
26344			t = item.top,
26345			b = t + item.height,
26346			dyClick = this.offset.click.top,
26347			dxClick = this.offset.click.left,
26348			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t &&
26349				( y1 + dyClick ) < b ),
26350			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l &&
26351				( x1 + dxClick ) < r ),
26352			isOverElement = isOverElementHeight && isOverElementWidth;
26353
26354		if ( this.options.tolerance === "pointer" ||
26355			this.options.forcePointerForContainers ||
26356			( this.options.tolerance !== "pointer" &&
26357				this.helperProportions[ this.floating ? "width" : "height" ] >
26358				item[ this.floating ? "width" : "height" ] )
26359		) {
26360			return isOverElement;
26361		} else {
26362
26363			return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half
26364				x2 - ( this.helperProportions.width / 2 ) < r && // Left Half
26365				t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half
26366				y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half
26367
26368		}
26369	},
26370
26371	_intersectsWithPointer: function( item ) {
26372		var verticalDirection, horizontalDirection,
26373			isOverElementHeight = ( this.options.axis === "x" ) ||
26374				this._isOverAxis(
26375					this.positionAbs.top + this.offset.click.top, item.top, item.height ),
26376			isOverElementWidth = ( this.options.axis === "y" ) ||
26377				this._isOverAxis(
26378					this.positionAbs.left + this.offset.click.left, item.left, item.width ),
26379			isOverElement = isOverElementHeight && isOverElementWidth;
26380
26381		if ( !isOverElement ) {
26382			return false;
vendor: 8,518 bytes, lines 26383-26657
26383		}
26384
26385		verticalDirection = this.dragDirection.vertical;
26386		horizontalDirection = this.dragDirection.horizontal;
26387
26388		return this.floating ?
26389			( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) :
26390			( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
26391
26392	},
26393
26394	_intersectsWithSides: function( item ) {
26395
26396		var isOverBottomHalf = this._isOverAxis( this.positionAbs.top +
26397				this.offset.click.top, item.top + ( item.height / 2 ), item.height ),
26398			isOverRightHalf = this._isOverAxis( this.positionAbs.left +
26399				this.offset.click.left, item.left + ( item.width / 2 ), item.width ),
26400			verticalDirection = this.dragDirection.vertical,
26401			horizontalDirection = this.dragDirection.horizontal;
26402
26403		if ( this.floating && horizontalDirection ) {
26404			return ( ( horizontalDirection === "right" && isOverRightHalf ) ||
26405				( horizontalDirection === "left" && !isOverRightHalf ) );
26406		} else {
26407			return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) ||
26408				( verticalDirection === "up" && !isOverBottomHalf ) );
26409		}
26410
26411	},
26412
26413	_getDragVerticalDirection: function() {
26414		var delta = this.positionAbs.top - this.lastPositionAbs.top;
26415		return delta !== 0 && ( delta > 0 ? "down" : "up" );
26416	},
26417
26418	_getDragHorizontalDirection: function() {
26419		var delta = this.positionAbs.left - this.lastPositionAbs.left;
26420		return delta !== 0 && ( delta > 0 ? "right" : "left" );
26421	},
26422
26423	refresh: function( event ) {
26424		this._refreshItems( event );
26425		this._setHandleClassName();
26426		this.refreshPositions();
26427		return this;
26428	},
26429
26430	_connectWith: function() {
26431		var options = this.options;
26432		return options.connectWith.constructor === String ?
26433			[ options.connectWith ] :
26434			options.connectWith;
26435	},
26436
26437	_getItemsAsjQuery: function( connected ) {
26438
26439		var i, j, cur, inst,
26440			items = [],
26441			queries = [],
26442			connectWith = this._connectWith();
26443
26444		if ( connectWith && connected ) {
26445			for ( i = connectWith.length - 1; i >= 0; i-- ) {
26446				cur = $( connectWith[ i ], this.document[ 0 ] );
26447				for ( j = cur.length - 1; j >= 0; j-- ) {
26448					inst = $.data( cur[ j ], this.widgetFullName );
26449					if ( inst && inst !== this && !inst.options.disabled ) {
26450						queries.push( [ typeof inst.options.items === "function" ?
26451							inst.options.items.call( inst.element ) :
26452							$( inst.options.items, inst.element )
26453								.not( ".ui-sortable-helper" )
26454								.not( ".ui-sortable-placeholder" ), inst ] );
26455					}
26456				}
26457			}
26458		}
26459
26460		queries.push( [ typeof this.options.items === "function" ?
26461			this.options.items
26462				.call( this.element, null, { options: this.options, item: this.currentItem } ) :
26463			$( this.options.items, this.element )
26464				.not( ".ui-sortable-helper" )
26465				.not( ".ui-sortable-placeholder" ), this ] );
26466
26467		function addItems() {
26468			items.push( this );
26469		}
26470		for ( i = queries.length - 1; i >= 0; i-- ) {
26471			queries[ i ][ 0 ].each( addItems );
26472		}
26473
26474		return $( items );
26475
26476	},
26477
26478	_removeCurrentsFromItems: function() {
26479
26480		var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" );
26481
26482		this.items = $.grep( this.items, function( item ) {
26483			for ( var j = 0; j < list.length; j++ ) {
26484				if ( list[ j ] === item.item[ 0 ] ) {
26485					return false;
26486				}
26487			}
26488			return true;
26489		} );
26490
26491	},
26492
26493	_refreshItems: function( event ) {
26494
26495		this.items = [];
26496		this.containers = [ this ];
26497
26498		var i, j, cur, inst, targetData, _queries, item, queriesLength,
26499			items = this.items,
26500			queries = [ [ typeof this.options.items === "function" ?
26501				this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :
26502				$( this.options.items, this.element ), this ] ],
26503			connectWith = this._connectWith();
26504
26505		//Shouldn't be run the first time through due to massive slow-down
26506		if ( connectWith && this.ready ) {
26507			for ( i = connectWith.length - 1; i >= 0; i-- ) {
26508				cur = $( connectWith[ i ], this.document[ 0 ] );
26509				for ( j = cur.length - 1; j >= 0; j-- ) {
26510					inst = $.data( cur[ j ], this.widgetFullName );
26511					if ( inst && inst !== this && !inst.options.disabled ) {
26512						queries.push( [ typeof inst.options.items === "function" ?
26513							inst.options.items
26514								.call( inst.element[ 0 ], event, { item: this.currentItem } ) :
26515							$( inst.options.items, inst.element ), inst ] );
26516						this.containers.push( inst );
26517					}
26518				}
26519			}
26520		}
26521
26522		for ( i = queries.length - 1; i >= 0; i-- ) {
26523			targetData = queries[ i ][ 1 ];
26524			_queries = queries[ i ][ 0 ];
26525
26526			for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {
26527				item = $( _queries[ j ] );
26528
26529				// Data for target checking (mouse manager)
26530				item.data( this.widgetName + "-item", targetData );
26531
26532				items.push( {
26533					item: item,
26534					instance: targetData,
26535					width: 0, height: 0,
26536					left: 0, top: 0
26537				} );
26538			}
26539		}
26540
26541	},
26542
26543	_refreshItemPositions: function( fast ) {
26544		var i, item, t, p;
26545
26546		for ( i = this.items.length - 1; i >= 0; i-- ) {
26547			item = this.items[ i ];
26548
26549			//We ignore calculating positions of all connected containers when we're not over them
26550			if ( this.currentContainer && item.instance !== this.currentContainer &&
26551					item.item[ 0 ] !== this.currentItem[ 0 ] ) {
26552				continue;
26553			}
26554
26555			t = this.options.toleranceElement ?
26556				$( this.options.toleranceElement, item.item ) :
26557				item.item;
26558
26559			if ( !fast ) {
26560				item.width = t.outerWidth();
26561				item.height = t.outerHeight();
26562			}
26563
26564			p = t.offset();
26565			item.left = p.left;
26566			item.top = p.top;
26567		}
26568	},
26569
26570	refreshPositions: function( fast ) {
26571
26572		// Determine whether items are being displayed horizontally
26573		this.floating = this.items.length ?
26574			this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
26575			false;
26576
26577		// This has to be redone because due to the item being moved out/into the offsetParent,
26578		// the offsetParent's position will change
26579		if ( this.offsetParent && this.helper ) {
26580			this.offset.parent = this._getParentOffset();
26581		}
26582
26583		this._refreshItemPositions( fast );
26584
26585		var i, p;
26586
26587		if ( this.options.custom && this.options.custom.refreshContainers ) {
26588			this.options.custom.refreshContainers.call( this );
26589		} else {
26590			for ( i = this.containers.length - 1; i >= 0; i-- ) {
26591				p = this.containers[ i ].element.offset();
26592				this.containers[ i ].containerCache.left = p.left;
26593				this.containers[ i ].containerCache.top = p.top;
26594				this.containers[ i ].containerCache.width =
26595					this.containers[ i ].element.outerWidth();
26596				this.containers[ i ].containerCache.height =
26597					this.containers[ i ].element.outerHeight();
26598			}
26599		}
26600
26601		return this;
26602	},
26603
26604	_createPlaceholder: function( that ) {
26605		that = that || this;
26606		var className, nodeName,
26607			o = that.options;
26608
26609		if ( !o.placeholder || o.placeholder.constructor === String ) {
26610			className = o.placeholder;
26611			nodeName = that.currentItem[ 0 ].nodeName.toLowerCase();
26612			o.placeholder = {
26613				element: function() {
26614
26615					var element = $( "<" + nodeName + ">", that.document[ 0 ] );
26616
26617					that._addClass( element, "ui-sortable-placeholder",
26618							className || that.currentItem[ 0 ].className )
26619						._removeClass( element, "ui-sortable-helper" );
26620
26621					if ( nodeName === "tbody" ) {
26622						that._createTrPlaceholder(
26623							that.currentItem.find( "tr" ).eq( 0 ),
26624							$( "<tr>", that.document[ 0 ] ).appendTo( element )
26625						);
26626					} else if ( nodeName === "tr" ) {
26627						that._createTrPlaceholder( that.currentItem, element );
26628					} else if ( nodeName === "img" ) {
26629						element.attr( "src", that.currentItem.attr( "src" ) );
26630					}
26631
26632					if ( !className ) {
26633						element.css( "visibility", "hidden" );
26634					}
26635
26636					return element;
26637				},
26638				update: function( container, p ) {
26639
26640					// 1. If a className is set as 'placeholder option, we don't force sizes -
26641					// the class is responsible for that
26642					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a
26643					// class name is specified
26644					if ( className && !o.forcePlaceholderSize ) {
26645						return;
26646					}
26647
26648					// If the element doesn't have a actual height or width by itself (without
26649					// styles coming from a stylesheet), it receives the inline height and width
26650					// from the dragged item. Or, if it's a tbody or tr, it's going to have a height
26651					// anyway since we're populating them with <td>s above, but they're unlikely to
26652					// be the correct height on their own if the row heights are dynamic, so we'll
26653					// always assign the height of the dragged item given forcePlaceholderSize
26654					// is true.
26655					if ( !p.height() || ( o.forcePlaceholderSize &&
26656							( nodeName === "tbody" || nodeName === "tr" ) ) ) {
26657						p.height(
vendor: 10,145 bytes, lines 26658-26965
26658							that.currentItem.innerHeight() -
26659							parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -
26660							parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) );
26661					}
26662					if ( !p.width() ) {
26663						p.width(
26664							that.currentItem.innerWidth() -
26665							parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) -
26666							parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) );
26667					}
26668				}
26669			};
26670		}
26671
26672		//Create the placeholder
26673		that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );
26674
26675		//Append it after the actual current item
26676		that.currentItem.after( that.placeholder );
26677
26678		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
26679		o.placeholder.update( that, that.placeholder );
26680
26681	},
26682
26683	_createTrPlaceholder: function( sourceTr, targetTr ) {
26684		var that = this;
26685
26686		sourceTr.children().each( function() {
26687			$( "<td>&#160;</td>", that.document[ 0 ] )
26688				.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
26689				.appendTo( targetTr );
26690		} );
26691	},
26692
26693	_contactContainers: function( event ) {
26694		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,
26695			floating, axis,
26696			innermostContainer = null,
26697			innermostIndex = null;
26698
26699		// Get innermost container that intersects with item
26700		for ( i = this.containers.length - 1; i >= 0; i-- ) {
26701
26702			// Never consider a container that's located within the item itself
26703			if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {
26704				continue;
26705			}
26706
26707			if ( this._intersectsWith( this.containers[ i ].containerCache ) ) {
26708
26709				// If we've already found a container and it's more "inner" than this, then continue
26710				if ( innermostContainer &&
26711						$.contains(
26712							this.containers[ i ].element[ 0 ],
26713							innermostContainer.element[ 0 ] ) ) {
26714					continue;
26715				}
26716
26717				innermostContainer = this.containers[ i ];
26718				innermostIndex = i;
26719
26720			} else {
26721
26722				// container doesn't intersect. trigger "out" event if necessary
26723				if ( this.containers[ i ].containerCache.over ) {
26724					this.containers[ i ]._trigger( "out", event, this._uiHash( this ) );
26725					this.containers[ i ].containerCache.over = 0;
26726				}
26727			}
26728
26729		}
26730
26731		// If no intersecting containers found, return
26732		if ( !innermostContainer ) {
26733			return;
26734		}
26735
26736		// Move the item into the container if it's not there already
26737		if ( this.containers.length === 1 ) {
26738			if ( !this.containers[ innermostIndex ].containerCache.over ) {
26739				this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
26740				this.containers[ innermostIndex ].containerCache.over = 1;
26741			}
26742		} else {
26743
26744			// When entering a new container, we will find the item with the least distance and
26745			// append our item near it
26746			dist = 10000;
26747			itemWithLeastDistance = null;
26748			floating = innermostContainer.floating || this._isFloating( this.currentItem );
26749			posProperty = floating ? "left" : "top";
26750			sizeProperty = floating ? "width" : "height";
26751			axis = floating ? "pageX" : "pageY";
26752
26753			for ( j = this.items.length - 1; j >= 0; j-- ) {
26754				if ( !$.contains(
26755						this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )
26756				) {
26757					continue;
26758				}
26759				if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {
26760					continue;
26761				}
26762
26763				cur = this.items[ j ].item.offset()[ posProperty ];
26764				nearBottom = false;
26765				if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
26766					nearBottom = true;
26767				}
26768
26769				if ( Math.abs( event[ axis ] - cur ) < dist ) {
26770					dist = Math.abs( event[ axis ] - cur );
26771					itemWithLeastDistance = this.items[ j ];
26772					this.direction = nearBottom ? "up" : "down";
26773				}
26774			}
26775
26776			//Check if dropOnEmpty is enabled
26777			if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {
26778				return;
26779			}
26780
26781			if ( this.currentContainer === this.containers[ innermostIndex ] ) {
26782				if ( !this.currentContainer.containerCache.over ) {
26783					this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
26784					this.currentContainer.containerCache.over = 1;
26785				}
26786				return;
26787			}
26788
26789			if ( itemWithLeastDistance ) {
26790				this._rearrange( event, itemWithLeastDistance, null, true );
26791			} else {
26792				this._rearrange( event, null, this.containers[ innermostIndex ].element, true );
26793			}
26794			this._trigger( "change", event, this._uiHash() );
26795			this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );
26796			this.currentContainer = this.containers[ innermostIndex ];
26797
26798			//Update the placeholder
26799			this.options.placeholder.update( this.currentContainer, this.placeholder );
26800
26801			//Update scrollParent
26802			this.scrollParent = this.placeholder.scrollParent();
26803
26804			//Update overflowOffset
26805			if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
26806					this.scrollParent[ 0 ].tagName !== "HTML" ) {
26807				this.overflowOffset = this.scrollParent.offset();
26808			}
26809
26810			this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
26811			this.containers[ innermostIndex ].containerCache.over = 1;
26812		}
26813
26814	},
26815
26816	_createHelper: function( event ) {
26817
26818		var o = this.options,
26819			helper = typeof o.helper === "function" ?
26820				$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :
26821				( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );
26822
26823		//Add the helper to the DOM if that didn't happen already
26824		if ( !helper.parents( "body" ).length ) {
26825			this.appendTo[ 0 ].appendChild( helper[ 0 ] );
26826		}
26827
26828		if ( helper[ 0 ] === this.currentItem[ 0 ] ) {
26829			this._storedCSS = {
26830				width: this.currentItem[ 0 ].style.width,
26831				height: this.currentItem[ 0 ].style.height,
26832				position: this.currentItem.css( "position" ),
26833				top: this.currentItem.css( "top" ),
26834				left: this.currentItem.css( "left" )
26835			};
26836		}
26837
26838		if ( !helper[ 0 ].style.width || o.forceHelperSize ) {
26839			helper.width( this.currentItem.width() );
26840		}
26841		if ( !helper[ 0 ].style.height || o.forceHelperSize ) {
26842			helper.height( this.currentItem.height() );
26843		}
26844
26845		return helper;
26846
26847	},
26848
26849	_adjustOffsetFromHelper: function( obj ) {
26850		if ( typeof obj === "string" ) {
26851			obj = obj.split( " " );
26852		}
26853		if ( Array.isArray( obj ) ) {
26854			obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
26855		}
26856		if ( "left" in obj ) {
26857			this.offset.click.left = obj.left + this.margins.left;
26858		}
26859		if ( "right" in obj ) {
26860			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
26861		}
26862		if ( "top" in obj ) {
26863			this.offset.click.top = obj.top + this.margins.top;
26864		}
26865		if ( "bottom" in obj ) {
26866			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
26867		}
26868	},
26869
26870	_getParentOffset: function() {
26871
26872		//Get the offsetParent and cache its position
26873		this.offsetParent = this.helper.offsetParent();
26874		var po = this.offsetParent.offset();
26875
26876		// This is a special case where we need to modify a offset calculated on start, since the
26877		// following happened:
26878		// 1. The position of the helper is absolute, so it's position is calculated based on the
26879		// next positioned parent
26880		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
26881		// the document, which means that the scroll is included in the initial calculation of the
26882		// offset of the parent, and never recalculated upon drag
26883		if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&
26884				$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
26885			po.left += this.scrollParent.scrollLeft();
26886			po.top += this.scrollParent.scrollTop();
26887		}
26888
26889		// This needs to be actually done for all browsers, since pageX/pageY includes this
26890		// information with an ugly IE fix
26891		if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||
26892				( this.offsetParent[ 0 ].tagName &&
26893				this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {
26894			po = { top: 0, left: 0 };
26895		}
26896
26897		return {
26898			top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
26899			left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
26900		};
26901
26902	},
26903
26904	_getRelativeOffset: function() {
26905
26906		if ( this.cssPosition === "relative" ) {
26907			var p = this.currentItem.position();
26908			return {
26909				top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
26910					this.scrollParent.scrollTop(),
26911				left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
26912					this.scrollParent.scrollLeft()
26913			};
26914		} else {
26915			return { top: 0, left: 0 };
26916		}
26917
26918	},
26919
26920	_cacheMargins: function() {
26921		this.margins = {
26922			left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ),
26923			top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 )
26924		};
26925	},
26926
26927	_cacheHelperProportions: function() {
26928		this.helperProportions = {
26929			width: this.helper.outerWidth(),
26930			height: this.helper.outerHeight()
26931		};
26932	},
26933
26934	_setContainment: function() {
26935
26936		var ce, co, over,
26937			o = this.options;
26938		if ( o.containment === "parent" ) {
26939			o.containment = this.helper[ 0 ].parentNode;
26940		}
26941		if ( o.containment === "document" || o.containment === "window" ) {
26942			this.containment = [
26943				0 - this.offset.relative.left - this.offset.parent.left,
26944				0 - this.offset.relative.top - this.offset.parent.top,
26945				o.containment === "document" ?
26946					this.document.width() :
26947					this.window.width() - this.helperProportions.width - this.margins.left,
26948				( o.containment === "document" ?
26949					( this.document.height() || document.body.parentNode.scrollHeight ) :
26950					this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight
26951				) - this.helperProportions.height - this.margins.top
26952			];
26953		}
26954
26955		if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {
26956			ce = $( o.containment )[ 0 ];
26957			co = $( o.containment ).offset();
26958			over = ( $( ce ).css( "overflow" ) !== "hidden" );
26959
26960			this.containment = [
26961				co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) +
26962					( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left,
26963				co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) +
26964					( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top,
26965				co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) 
vendor: 1,747 bytes, lines 26965-27017
26965: ce.offsetWidth ) -
26966					( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) -
26967					( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) -
26968					this.helperProportions.width - this.margins.left,
26969				co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
26970					( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) -
26971					( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) -
26972					this.helperProportions.height - this.margins.top
26973			];
26974		}
26975
26976	},
26977
26978	_convertPositionTo: function( d, pos ) {
26979
26980		if ( !pos ) {
26981			pos = this.position;
26982		}
26983		var mod = d === "absolute" ? 1 : -1,
26984			scroll = this.cssPosition === "absolute" &&
26985				!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
26986				$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
26987					this.offsetParent :
26988					this.scrollParent,
26989			scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
26990
26991		return {
26992			top: (
26993
26994				// The absolute mouse position
26995				pos.top	+
26996
26997				// Only for relative positioned nodes: Relative offset from element to offset parent
26998				this.offset.relative.top * mod +
26999
27000				// The offsetParent's offset without borders (offset + border)
27001				this.offset.parent.top * mod -
27002				( ( this.cssPosition === "fixed" ?
27003					-this.scrollParent.scrollTop() :
27004					( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )
27005			),
27006			left: (
27007
27008				// The absolute mouse position
27009				pos.left +
27010
27011				// Only for relative positioned nodes: Relative offset from element to offset parent
27012				this.offset.relative.left * mod +
27013
27014				// The offsetParent's offset without borders (offset + border)
27015				this.offset.parent.left * mod	-
27016				( ( this.cssPosition === "fixed" ?
27017					-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
vendor: 4,632 bytes, lines 27018-27161
27018					scroll.scrollLeft() ) * mod )
27019			)
27020		};
27021
27022	},
27023
27024	_generatePosition: function( event ) {
27025
27026		var top, left,
27027			o = this.options,
27028			pageX = event.pageX,
27029			pageY = event.pageY,
27030			scroll = this.cssPosition === "absolute" &&
27031				!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
27032				$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
27033					this.offsetParent :
27034					this.scrollParent,
27035				scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
27036
27037		// This is another very weird special case that only happens for relative elements:
27038		// 1. If the css position is relative
27039		// 2. and the scroll parent is the document or similar to the offset parent
27040		// we have to refresh the relative offset during the scroll so there are no jumps
27041		if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
27042				this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {
27043			this.offset.relative = this._getRelativeOffset();
27044		}
27045
27046		/*
27047		 * - Position constraining -
27048		 * Constrain the position to a mix of grid, containment.
27049		 */
27050
27051		if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options
27052
27053			if ( this.containment ) {
27054				if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {
27055					pageX = this.containment[ 0 ] + this.offset.click.left;
27056				}
27057				if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {
27058					pageY = this.containment[ 1 ] + this.offset.click.top;
27059				}
27060				if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {
27061					pageX = this.containment[ 2 ] + this.offset.click.left;
27062				}
27063				if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {
27064					pageY = this.containment[ 3 ] + this.offset.click.top;
27065				}
27066			}
27067
27068			if ( o.grid ) {
27069				top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /
27070					o.grid[ 1 ] ) * o.grid[ 1 ];
27071				pageY = this.containment ?
27072					( ( top - this.offset.click.top >= this.containment[ 1 ] &&
27073						top - this.offset.click.top <= this.containment[ 3 ] ) ?
27074							top :
27075							( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?
27076								top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :
27077								top;
27078
27079				left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /
27080					o.grid[ 0 ] ) * o.grid[ 0 ];
27081				pageX = this.containment ?
27082					( ( left - this.offset.click.left >= this.containment[ 0 ] &&
27083						left - this.offset.click.left <= this.containment[ 2 ] ) ?
27084							left :
27085							( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?
27086								left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :
27087								left;
27088			}
27089
27090		}
27091
27092		return {
27093			top: (
27094
27095				// The absolute mouse position
27096				pageY -
27097
27098				// Click offset (relative to the element)
27099				this.offset.click.top -
27100
27101				// Only for relative positioned nodes: Relative offset from element to offset parent
27102				this.offset.relative.top -
27103
27104				// The offsetParent's offset without borders (offset + border)
27105				this.offset.parent.top +
27106				( ( this.cssPosition === "fixed" ?
27107					-this.scrollParent.scrollTop() :
27108					( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )
27109			),
27110			left: (
27111
27112				// The absolute mouse position
27113				pageX -
27114
27115				// Click offset (relative to the element)
27116				this.offset.click.left -
27117
27118				// Only for relative positioned nodes: Relative offset from element to offset parent
27119				this.offset.relative.left -
27120
27121				// The offsetParent's offset without borders (offset + border)
27122				this.offset.parent.left +
27123				( ( this.cssPosition === "fixed" ?
27124					-this.scrollParent.scrollLeft() :
27125					scrollIsRootNode ? 0 : scroll.scrollLeft() ) )
27126			)
27127		};
27128
27129	},
27130
27131	_rearrange: function( event, i, a, hardRefresh ) {
27132
27133		if ( a ) {
27134			a[ 0 ].appendChild( this.placeholder[ 0 ] );
27135		} else {
27136			i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],
27137				( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );
27138		}
27139
27140		//Various things done here to improve the performance:
27141		// 1. we create a setTimeout, that calls refreshPositions
27142		// 2. on the instance, we have a counter variable, that get's higher after every append
27143		// 3. on the local scope, we copy the counter variable, and check in the timeout,
27144		// if it's still the same
27145		// 4. this lets only the last addition to the timeout stack through
27146		this.counter = this.counter ? ++this.counter : 1;
27147		var counter = this.counter;
27148
27149		this._delay( function() {
27150			if ( counter === this.counter ) {
27151
27152				//Precompute after each DOM insertion, NOT on mousemove
27153				this.refreshPositions( !hardRefresh );
27154			}
27155		} );
27156
27157	},
27158
27159	_clear: function( event, noPropagation ) {
27160
27161		this.reverting = false;
vendor: 4,281 bytes, lines 27162-27306
27162
27163		// We delay all events that have to be triggered to after the point where the placeholder
27164		// has been removed and everything else normalized again
27165		var i,
27166			delayedTriggers = [];
27167
27168		// We first have to update the dom position of the actual currentItem
27169		// Note: don't do it if the current item is already removed (by a user), or it gets
27170		// reappended (see #4088)
27171		if ( !this._noFinalSort && this.currentItem.parent().length ) {
27172			this.placeholder.before( this.currentItem );
27173		}
27174		this._noFinalSort = null;
27175
27176		if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {
27177			for ( i in this._storedCSS ) {
27178				if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) {
27179					this._storedCSS[ i ] = "";
27180				}
27181			}
27182			this.currentItem.css( this._storedCSS );
27183			this._removeClass( this.currentItem, "ui-sortable-helper" );
27184		} else {
27185			this.currentItem.show();
27186		}
27187
27188		if ( this.fromOutside && !noPropagation ) {
27189			delayedTriggers.push( function( event ) {
27190				this._trigger( "receive", event, this._uiHash( this.fromOutside ) );
27191			} );
27192		}
27193		if ( ( this.fromOutside ||
27194				this.domPosition.prev !==
27195				this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] ||
27196				this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {
27197
27198			// Trigger update callback if the DOM position has changed
27199			delayedTriggers.push( function( event ) {
27200				this._trigger( "update", event, this._uiHash() );
27201			} );
27202		}
27203
27204		// Check if the items Container has Changed and trigger appropriate
27205		// events.
27206		if ( this !== this.currentContainer ) {
27207			if ( !noPropagation ) {
27208				delayedTriggers.push( function( event ) {
27209					this._trigger( "remove", event, this._uiHash() );
27210				} );
27211				delayedTriggers.push( ( function( c ) {
27212					return function( event ) {
27213						c._trigger( "receive", event, this._uiHash( this ) );
27214					};
27215				} ).call( this, this.currentContainer ) );
27216				delayedTriggers.push( ( function( c ) {
27217					return function( event ) {
27218						c._trigger( "update", event, this._uiHash( this ) );
27219					};
27220				} ).call( this, this.currentContainer ) );
27221			}
27222		}
27223
27224		//Post events to containers
27225		function delayEvent( type, instance, container ) {
27226			return function( event ) {
27227				container._trigger( type, event, instance._uiHash( instance ) );
27228			};
27229		}
27230		for ( i = this.containers.length - 1; i >= 0; i-- ) {
27231			if ( !noPropagation ) {
27232				delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
27233			}
27234			if ( this.containers[ i ].containerCache.over ) {
27235				delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
27236				this.containers[ i ].containerCache.over = 0;
27237			}
27238		}
27239
27240		//Do what was originally in plugins
27241		if ( this.storedCursor ) {
27242			this.document.find( "body" ).css( "cursor", this.storedCursor );
27243			this.storedStylesheet.remove();
27244		}
27245		if ( this._storedOpacity ) {
27246			this.helper.css( "opacity", this._storedOpacity );
27247		}
27248		if ( this._storedZIndex ) {
27249			this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex );
27250		}
27251
27252		this.dragging = false;
27253
27254		if ( !noPropagation ) {
27255			this._trigger( "beforeStop", event, this._uiHash() );
27256		}
27257
27258		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
27259		// it unbinds ALL events from the original node!
27260		this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
27261
27262		if ( !this.cancelHelperRemoval ) {
27263			if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
27264				this.helper.remove();
27265			}
27266			this.helper = null;
27267		}
27268
27269		if ( !noPropagation ) {
27270			for ( i = 0; i < delayedTriggers.length; i++ ) {
27271
27272				// Trigger all delayed events
27273				delayedTriggers[ i ].call( this, event );
27274			}
27275			this._trigger( "stop", event, this._uiHash() );
27276		}
27277
27278		this.fromOutside = false;
27279		return !this.cancelHelperRemoval;
27280
27281	},
27282
27283	_trigger: function() {
27284		if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {
27285			this.cancel();
27286		}
27287	},
27288
27289	_uiHash: function( _inst ) {
27290		var inst = _inst || this;
27291		return {
27292			helper: inst.helper,
27293			placeholder: inst.placeholder || $( [] ),
27294			position: inst.position,
27295			originalPosition: inst.originalPosition,
27296			offset: inst.positionAbs,
27297			item: inst.currentItem,
27298			sender: _inst ? _inst.element : null
27299		};
27300	}
27301
27302} );
27303
27304
27305/*!
27306 * jQuery UI Spinner 1.1
273063.1
27307 * http://jqueryui.com
27308 *
27309 * Copyright jQuery Foundation and other contributors
27310 * Released under the MIT license.
27311 * http://jquery.org/license
27312 */
27313
27314//>>label: Spinner
27315//>>group: Widgets
27316//>>description: Displays buttons to easily input numbers via the keyboard or mouse.
27317//>>docs: http://api.jqueryui.com/spinner/
27318//>>demos: http://jqueryui.com/spinner/
27319//>>css.structure: ../../themes/base/core.css
27320//>>css.structure: ../../themes/base/spinner.css
27321//>>css.theme: ../../themes/base/theme.css
27322
27323
27324function spinnerModifier( fn ) {
27325	return function() {
27326		var previous = this.element.val();
27327		fn.apply( this, arguments );
27328		this._refresh();
27329		if ( previous !== this.element.val() ) {
27330			this._trigger( "change" );
27331		}
27332	};
27333}
27334
27335$.widget( "ui.spinner", {
27336	version: "1.13.1
vendor: 13,310 bytes, lines 27336-27867
27336",
27337	defaultElement: "<input>",
27338	widgetEventPrefix: "spin",
27339	options: {
27340		classes: {
27341			"ui-spinner": "ui-corner-all",
27342			"ui-spinner-down": "ui-corner-br",
27343			"ui-spinner-up": "ui-corner-tr"
27344		},
27345		culture: null,
27346		icons: {
27347			down: "ui-icon-triangle-1-s",
27348			up: "ui-icon-triangle-1-n"
27349		},
27350		incremental: true,
27351		max: null,
27352		min: null,
27353		numberFormat: null,
27354		page: 10,
27355		step: 1,
27356
27357		change: null,
27358		spin: null,
27359		start: null,
27360		stop: null
27361	},
27362
27363	_create: function() {
27364
27365		// handle string values that need to be parsed
27366		this._setOption( "max", this.options.max );
27367		this._setOption( "min", this.options.min );
27368		this._setOption( "step", this.options.step );
27369
27370		// Only format if there is a value, prevents the field from being marked
27371		// as invalid in Firefox, see #9573.
27372		if ( this.value() !== "" ) {
27373
27374			// Format the value, but don't constrain.
27375			this._value( this.element.val(), true );
27376		}
27377
27378		this._draw();
27379		this._on( this._events );
27380		this._refresh();
27381
27382		// Turning off autocomplete prevents the browser from remembering the
27383		// value when navigating through history, so we re-enable autocomplete
27384		// if the page is unloaded before the widget is destroyed. #7790
27385		this._on( this.window, {
27386			beforeunload: function() {
27387				this.element.removeAttr( "autocomplete" );
27388			}
27389		} );
27390	},
27391
27392	_getCreateOptions: function() {
27393		var options = this._super();
27394		var element = this.element;
27395
27396		$.each( [ "min", "max", "step" ], function( i, option ) {
27397			var value = element.attr( option );
27398			if ( value != null && value.length ) {
27399				options[ option ] = value;
27400			}
27401		} );
27402
27403		return options;
27404	},
27405
27406	_events: {
27407		keydown: function( event ) {
27408			if ( this._start( event ) && this._keydown( event ) ) {
27409				event.preventDefault();
27410			}
27411		},
27412		keyup: "_stop",
27413		focus: function() {
27414			this.previous = this.element.val();
27415		},
27416		blur: function( event ) {
27417			if ( this.cancelBlur ) {
27418				delete this.cancelBlur;
27419				return;
27420			}
27421
27422			this._stop();
27423			this._refresh();
27424			if ( this.previous !== this.element.val() ) {
27425				this._trigger( "change", event );
27426			}
27427		},
27428		mousewheel: function( event, delta ) {
27429			var activeElement = $.ui.safeActiveElement( this.document[ 0 ] );
27430			var isActive = this.element[ 0 ] === activeElement;
27431
27432			if ( !isActive || !delta ) {
27433				return;
27434			}
27435
27436			if ( !this.spinning && !this._start( event ) ) {
27437				return false;
27438			}
27439
27440			this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );
27441			clearTimeout( this.mousewheelTimer );
27442			this.mousewheelTimer = this._delay( function() {
27443				if ( this.spinning ) {
27444					this._stop( event );
27445				}
27446			}, 100 );
27447			event.preventDefault();
27448		},
27449		"mousedown .ui-spinner-button": function( event ) {
27450			var previous;
27451
27452			// We never want the buttons to have focus; whenever the user is
27453			// interacting with the spinner, the focus should be on the input.
27454			// If the input is focused then this.previous is properly set from
27455			// when the input first received focus. If the input is not focused
27456			// then we need to set this.previous based on the value before spinning.
27457			previous = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?
27458				this.previous : this.element.val();
27459			function checkFocus() {
27460				var isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );
27461				if ( !isActive ) {
27462					this.element.trigger( "focus" );
27463					this.previous = previous;
27464
27465					// support: IE
27466					// IE sets focus asynchronously, so we need to check if focus
27467					// moved off of the input because the user clicked on the button.
27468					this._delay( function() {
27469						this.previous = previous;
27470					} );
27471				}
27472			}
27473
27474			// Ensure focus is on (or stays on) the text field
27475			event.preventDefault();
27476			checkFocus.call( this );
27477
27478			// Support: IE
27479			// IE doesn't prevent moving focus even with event.preventDefault()
27480			// so we set a flag to know when we should ignore the blur event
27481			// and check (again) if focus moved off of the input.
27482			this.cancelBlur = true;
27483			this._delay( function() {
27484				delete this.cancelBlur;
27485				checkFocus.call( this );
27486			} );
27487
27488			if ( this._start( event ) === false ) {
27489				return;
27490			}
27491
27492			this._repeat( null, $( event.currentTarget )
27493				.hasClass( "ui-spinner-up" ) ? 1 : -1, event );
27494		},
27495		"mouseup .ui-spinner-button": "_stop",
27496		"mouseenter .ui-spinner-button": function( event ) {
27497
27498			// button will add ui-state-active if mouse was down while mouseleave and kept down
27499			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
27500				return;
27501			}
27502
27503			if ( this._start( event ) === false ) {
27504				return false;
27505			}
27506			this._repeat( null, $( event.currentTarget )
27507				.hasClass( "ui-spinner-up" ) ? 1 : -1, event );
27508		},
27509
27510		// TODO: do we really want to consider this a stop?
27511		// shouldn't we just stop the repeater and wait until mouseup before
27512		// we trigger the stop event?
27513		"mouseleave .ui-spinner-button": "_stop"
27514	},
27515
27516	// Support mobile enhanced option and make backcompat more sane
27517	_enhance: function() {
27518		this.uiSpinner = this.element
27519			.attr( "autocomplete", "off" )
27520			.wrap( "<span>" )
27521			.parent()
27522
27523				// Add buttons
27524				.append(
27525					"<a></a><a></a>"
27526				);
27527	},
27528
27529	_draw: function() {
27530		this._enhance();
27531
27532		this._addClass( this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content" );
27533		this._addClass( "ui-spinner-input" );
27534
27535		this.element.attr( "role", "spinbutton" );
27536
27537		// Button bindings
27538		this.buttons = this.uiSpinner.children( "a" )
27539			.attr( "tabIndex", -1 )
27540			.attr( "aria-hidden", true )
27541			.button( {
27542				classes: {
27543					"ui-button": ""
27544				}
27545			} );
27546
27547		// TODO: Right now button does not support classes this is already updated in button PR
27548		this._removeClass( this.buttons, "ui-corner-all" );
27549
27550		this._addClass( this.buttons.first(), "ui-spinner-button ui-spinner-up" );
27551		this._addClass( this.buttons.last(), "ui-spinner-button ui-spinner-down" );
27552		this.buttons.first().button( {
27553			"icon": this.options.icons.up,
27554			"showLabel": false
27555		} );
27556		this.buttons.last().button( {
27557			"icon": this.options.icons.down,
27558			"showLabel": false
27559		} );
27560
27561		// IE 6 doesn't understand height: 50% for the buttons
27562		// unless the wrapper has an explicit height
27563		if ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&
27564				this.uiSpinner.height() > 0 ) {
27565			this.uiSpinner.height( this.uiSpinner.height() );
27566		}
27567	},
27568
27569	_keydown: function( event ) {
27570		var options = this.options,
27571			keyCode = $.ui.keyCode;
27572
27573		switch ( event.keyCode ) {
27574		case keyCode.UP:
27575			this._repeat( null, 1, event );
27576			return true;
27577		case keyCode.DOWN:
27578			this._repeat( null, -1, event );
27579			return true;
27580		case keyCode.PAGE_UP:
27581			this._repeat( null, options.page, event );
27582			return true;
27583		case keyCode.PAGE_DOWN:
27584			this._repeat( null, -options.page, event );
27585			return true;
27586		}
27587
27588		return false;
27589	},
27590
27591	_start: function( event ) {
27592		if ( !this.spinning && this._trigger( "start", event ) === false ) {
27593			return false;
27594		}
27595
27596		if ( !this.counter ) {
27597			this.counter = 1;
27598		}
27599		this.spinning = true;
27600		return true;
27601	},
27602
27603	_repeat: function( i, steps, event ) {
27604		i = i || 500;
27605
27606		clearTimeout( this.timer );
27607		this.timer = this._delay( function() {
27608			this._repeat( 40, steps, event );
27609		}, i );
27610
27611		this._spin( steps * this.options.step, event );
27612	},
27613
27614	_spin: function( step, event ) {
27615		var value = this.value() || 0;
27616
27617		if ( !this.counter ) {
27618			this.counter = 1;
27619		}
27620
27621		value = this._adjustValue( value + step * this._increment( this.counter ) );
27622
27623		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false ) {
27624			this._value( value );
27625			this.counter++;
27626		}
27627	},
27628
27629	_increment: function( i ) {
27630		var incremental = this.options.incremental;
27631
27632		if ( incremental ) {
27633			return typeof incremental === "function" ?
27634				incremental( i ) :
27635				Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
27636		}
27637
27638		return 1;
27639	},
27640
27641	_precision: function() {
27642		var precision = this._precisionOf( this.options.step );
27643		if ( this.options.min !== null ) {
27644			precision = Math.max( precision, this._precisionOf( this.options.min ) );
27645		}
27646		return precision;
27647	},
27648
27649	_precisionOf: function( num ) {
27650		var str = num.toString(),
27651			decimal = str.indexOf( "." );
27652		return decimal === -1 ? 0 : str.length - decimal - 1;
27653	},
27654
27655	_adjustValue: function( value ) {
27656		var base, aboveMin,
27657			options = this.options;
27658
27659		// Make sure we're at a valid step
27660		// - find out where we are relative to the base (min or 0)
27661		base = options.min !== null ? options.min : 0;
27662		aboveMin = value - base;
27663
27664		// - round to the nearest step
27665		aboveMin = Math.round( aboveMin / options.step ) * options.step;
27666
27667		// - rounding is based on 0, so adjust back to our base
27668		value = base + aboveMin;
27669
27670		// Fix precision from bad JS floating point math
27671		value = parseFloat( value.toFixed( this._precision() ) );
27672
27673		// Clamp the value
27674		if ( options.max !== null && value > options.max ) {
27675			return options.max;
27676		}
27677		if ( options.min !== null && value < options.min ) {
27678			return options.min;
27679		}
27680
27681		return value;
27682	},
27683
27684	_stop: function( event ) {
27685		if ( !this.spinning ) {
27686			return;
27687		}
27688
27689		clearTimeout( this.timer );
27690		clearTimeout( this.mousewheelTimer );
27691		this.counter = 0;
27692		this.spinning = false;
27693		this._trigger( "stop", event );
27694	},
27695
27696	_setOption: function( key, value ) {
27697		var prevValue, first, last;
27698
27699		if ( key === "culture" || key === "numberFormat" ) {
27700			prevValue = this._parse( this.element.val() );
27701			this.options[ key ] = value;
27702			this.element.val( this._format( prevValue ) );
27703			return;
27704		}
27705
27706		if ( key === "max" || key === "min" || key === "step" ) {
27707			if ( typeof value === "string" ) {
27708				value = this._parse( value );
27709			}
27710		}
27711		if ( key === "icons" ) {
27712			first = this.buttons.first().find( ".ui-icon" );
27713			this._removeClass( first, null, this.options.icons.up );
27714			this._addClass( first, null, value.up );
27715			last = this.buttons.last().find( ".ui-icon" );
27716			this._removeClass( last, null, this.options.icons.down );
27717			this._addClass( last, null, value.down );
27718		}
27719
27720		this._super( key, value );
27721	},
27722
27723	_setOptionDisabled: function( value ) {
27724		this._super( value );
27725
27726		this._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value );
27727		this.element.prop( "disabled", !!value );
27728		this.buttons.button( value ? "disable" : "enable" );
27729	},
27730
27731	_setOptions: spinnerModifier( function( options ) {
27732		this._super( options );
27733	} ),
27734
27735	_parse: function( val ) {
27736		if ( typeof val === "string" && val !== "" ) {
27737			val = window.Globalize && this.options.numberFormat ?
27738				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
27739		}
27740		return val === "" || isNaN( val ) ? null : val;
27741	},
27742
27743	_format: function( value ) {
27744		if ( value === "" ) {
27745			return "";
27746		}
27747		return window.Globalize && this.options.numberFormat ?
27748			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
27749			value;
27750	},
27751
27752	_refresh: function() {
27753		this.element.attr( {
27754			"aria-valuemin": this.options.min,
27755			"aria-valuemax": this.options.max,
27756
27757			// TODO: what should we do with values that can't be parsed?
27758			"aria-valuenow": this._parse( this.element.val() )
27759		} );
27760	},
27761
27762	isValid: function() {
27763		var value = this.value();
27764
27765		// Null is invalid
27766		if ( value === null ) {
27767			return false;
27768		}
27769
27770		// If value gets adjusted, it's invalid
27771		return value === this._adjustValue( value );
27772	},
27773
27774	// Update the value without triggering change
27775	_value: function( value, allowAny ) {
27776		var parsed;
27777		if ( value !== "" ) {
27778			parsed = this._parse( value );
27779			if ( parsed !== null ) {
27780				if ( !allowAny ) {
27781					parsed = this._adjustValue( parsed );
27782				}
27783				value = this._format( parsed );
27784			}
27785		}
27786		this.element.val( value );
27787		this._refresh();
27788	},
27789
27790	_destroy: function() {
27791		this.element
27792			.prop( "disabled", false )
27793			.removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" );
27794
27795		this.uiSpinner.replaceWith( this.element );
27796	},
27797
27798	stepUp: spinnerModifier( function( steps ) {
27799		this._stepUp( steps );
27800	} ),
27801	_stepUp: function( steps ) {
27802		if ( this._start() ) {
27803			this._spin( ( steps || 1 ) * this.options.step );
27804			this._stop();
27805		}
27806	},
27807
27808	stepDown: spinnerModifier( function( steps ) {
27809		this._stepDown( steps );
27810	} ),
27811	_stepDown: function( steps ) {
27812		if ( this._start() ) {
27813			this._spin( ( steps || 1 ) * -this.options.step );
27814			this._stop();
27815		}
27816	},
27817
27818	pageUp: spinnerModifier( function( pages ) {
27819		this._stepUp( ( pages || 1 ) * this.options.page );
27820	} ),
27821
27822	pageDown: spinnerModifier( function( pages ) {
27823		this._stepDown( ( pages || 1 ) * this.options.page );
27824	} ),
27825
27826	value: function( newVal ) {
27827		if ( !arguments.length ) {
27828			return this._parse( this.element.val() );
27829		}
27830		spinnerModifier( this._value ).call( this, newVal );
27831	},
27832
27833	widget: function() {
27834		return this.uiSpinner;
27835	}
27836} );
27837
27838// DEPRECATED
27839// TODO: switch return back to widget declaration at top of file when this is removed
27840if ( $.uiBackCompat !== false ) {
27841
27842	// Backcompat for spinner html extension points
27843	$.widget( "ui.spinner", $.ui.spinner, {
27844		_enhance: function() {
27845			this.uiSpinner = this.element
27846				.attr( "autocomplete", "off" )
27847				.wrap( this._uiSpinnerHtml() )
27848				.parent()
27849
27850					// Add buttons
27851					.append( this._buttonHtml() );
27852		},
27853		_uiSpinnerHtml: function() {
27854			return "<span>";
27855		},
27856
27857		_buttonHtml: function() {
27858			return "<a></a><a></a>";
27859		}
27860	} );
27861}
27862
27863var widgetsSpinner = $.ui.spinner;
27864
27865
27866/*!
27867 * jQuery UI Tabs 1.13.
278671
27868 * http://jqueryui.com
27869 *
27870 * Copyright jQuery Foundation and other contributors
27871 * Released under the MIT license.
27872 * http://jquery.org/license
27873 */
27874
27875//>>label: Tabs
27876//>>group: Widgets
27877//>>description: Transforms a set of container elements into a tab structure.
27878//>>docs: http://api.jqueryui.com/tabs/
27879//>>demos: http://jqueryui.com/tabs/
27880//>>css.structure: ../../themes/base/core.css
27881//>>css.structure: ../../themes/base/tabs.css
27882//>>css.theme: ../../themes/base/theme.css
27883
27884
27885$.widget( "ui.tabs", {
27886	version: "1.13.1
vendor: 12,261 bytes, lines 27886-28353
27886",
27887	delay: 300,
27888	options: {
27889		active: null,
27890		classes: {
27891			"ui-tabs": "ui-corner-all",
27892			"ui-tabs-nav": "ui-corner-all",
27893			"ui-tabs-panel": "ui-corner-bottom",
27894			"ui-tabs-tab": "ui-corner-top"
27895		},
27896		collapsible: false,
27897		event: "click",
27898		heightStyle: "content",
27899		hide: null,
27900		show: null,
27901
27902		// Callbacks
27903		activate: null,
27904		beforeActivate: null,
27905		beforeLoad: null,
27906		load: null
27907	},
27908
27909	_isLocal: ( function() {
27910		var rhash = /#.*$/;
27911
27912		return function( anchor ) {
27913			var anchorUrl, locationUrl;
27914
27915			anchorUrl = anchor.href.replace( rhash, "" );
27916			locationUrl = location.href.replace( rhash, "" );
27917
27918			// Decoding may throw an error if the URL isn't UTF-8 (#9518)
27919			try {
27920				anchorUrl = decodeURIComponent( anchorUrl );
27921			} catch ( error ) {}
27922			try {
27923				locationUrl = decodeURIComponent( locationUrl );
27924			} catch ( error ) {}
27925
27926			return anchor.hash.length > 1 && anchorUrl === locationUrl;
27927		};
27928	} )(),
27929
27930	_create: function() {
27931		var that = this,
27932			options = this.options;
27933
27934		this.running = false;
27935
27936		this._addClass( "ui-tabs", "ui-widget ui-widget-content" );
27937		this._toggleClass( "ui-tabs-collapsible", null, options.collapsible );
27938
27939		this._processTabs();
27940		options.active = this._initialActive();
27941
27942		// Take disabling tabs via class attribute from HTML
27943		// into account and update option properly.
27944		if ( Array.isArray( options.disabled ) ) {
27945			options.disabled = $.uniqueSort( options.disabled.concat(
27946				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
27947					return that.tabs.index( li );
27948				} )
27949			) ).sort();
27950		}
27951
27952		// Check for length avoids error when initializing empty list
27953		if ( this.options.active !== false && this.anchors.length ) {
27954			this.active = this._findActive( options.active );
27955		} else {
27956			this.active = $();
27957		}
27958
27959		this._refresh();
27960
27961		if ( this.active.length ) {
27962			this.load( options.active );
27963		}
27964	},
27965
27966	_initialActive: function() {
27967		var active = this.options.active,
27968			collapsible = this.options.collapsible,
27969			locationHash = location.hash.substring( 1 );
27970
27971		if ( active === null ) {
27972
27973			// check the fragment identifier in the URL
27974			if ( locationHash ) {
27975				this.tabs.each( function( i, tab ) {
27976					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
27977						active = i;
27978						return false;
27979					}
27980				} );
27981			}
27982
27983			// Check for a tab marked active via a class
27984			if ( active === null ) {
27985				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
27986			}
27987
27988			// No active tab, set to false
27989			if ( active === null || active === -1 ) {
27990				active = this.tabs.length ? 0 : false;
27991			}
27992		}
27993
27994		// Handle numbers: negative, out of range
27995		if ( active !== false ) {
27996			active = this.tabs.index( this.tabs.eq( active ) );
27997			if ( active === -1 ) {
27998				active = collapsible ? false : 0;
27999			}
28000		}
28001
28002		// Don't allow collapsible: false and active: false
28003		if ( !collapsible && active === false && this.anchors.length ) {
28004			active = 0;
28005		}
28006
28007		return active;
28008	},
28009
28010	_getCreateEventData: function() {
28011		return {
28012			tab: this.active,
28013			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
28014		};
28015	},
28016
28017	_tabKeydown: function( event ) {
28018		var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),
28019			selectedIndex = this.tabs.index( focusedTab ),
28020			goingForward = true;
28021
28022		if ( this._handlePageNav( event ) ) {
28023			return;
28024		}
28025
28026		switch ( event.keyCode ) {
28027		case $.ui.keyCode.RIGHT:
28028		case $.ui.keyCode.DOWN:
28029			selectedIndex++;
28030			break;
28031		case $.ui.keyCode.UP:
28032		case $.ui.keyCode.LEFT:
28033			goingForward = false;
28034			selectedIndex--;
28035			break;
28036		case $.ui.keyCode.END:
28037			selectedIndex = this.anchors.length - 1;
28038			break;
28039		case $.ui.keyCode.HOME:
28040			selectedIndex = 0;
28041			break;
28042		case $.ui.keyCode.SPACE:
28043
28044			// Activate only, no collapsing
28045			event.preventDefault();
28046			clearTimeout( this.activating );
28047			this._activate( selectedIndex );
28048			return;
28049		case $.ui.keyCode.ENTER:
28050
28051			// Toggle (cancel delayed activation, allow collapsing)
28052			event.preventDefault();
28053			clearTimeout( this.activating );
28054
28055			// Determine if we should collapse or activate
28056			this._activate( selectedIndex === this.options.active ? false : selectedIndex );
28057			return;
28058		default:
28059			return;
28060		}
28061
28062		// Focus the appropriate tab, based on which key was pressed
28063		event.preventDefault();
28064		clearTimeout( this.activating );
28065		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
28066
28067		// Navigating with control/command key will prevent automatic activation
28068		if ( !event.ctrlKey && !event.metaKey ) {
28069
28070			// Update aria-selected immediately so that AT think the tab is already selected.
28071			// Otherwise AT may confuse the user by stating that they need to activate the tab,
28072			// but the tab will already be activated by the time the announcement finishes.
28073			focusedTab.attr( "aria-selected", "false" );
28074			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
28075
28076			this.activating = this._delay( function() {
28077				this.option( "active", selectedIndex );
28078			}, this.delay );
28079		}
28080	},
28081
28082	_panelKeydown: function( event ) {
28083		if ( this._handlePageNav( event ) ) {
28084			return;
28085		}
28086
28087		// Ctrl+up moves focus to the current tab
28088		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
28089			event.preventDefault();
28090			this.active.trigger( "focus" );
28091		}
28092	},
28093
28094	// Alt+page up/down moves focus to the previous/next tab (and activates)
28095	_handlePageNav: function( event ) {
28096		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
28097			this._activate( this._focusNextTab( this.options.active - 1, false ) );
28098			return true;
28099		}
28100		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
28101			this._activate( this._focusNextTab( this.options.active + 1, true ) );
28102			return true;
28103		}
28104	},
28105
28106	_findNextTab: function( index, goingForward ) {
28107		var lastTabIndex = this.tabs.length - 1;
28108
28109		function constrain() {
28110			if ( index > lastTabIndex ) {
28111				index = 0;
28112			}
28113			if ( index < 0 ) {
28114				index = lastTabIndex;
28115			}
28116			return index;
28117		}
28118
28119		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
28120			index = goingForward ? index + 1 : index - 1;
28121		}
28122
28123		return index;
28124	},
28125
28126	_focusNextTab: function( index, goingForward ) {
28127		index = this._findNextTab( index, goingForward );
28128		this.tabs.eq( index ).trigger( "focus" );
28129		return index;
28130	},
28131
28132	_setOption: function( key, value ) {
28133		if ( key === "active" ) {
28134
28135			// _activate() will handle invalid values and update this.options
28136			this._activate( value );
28137			return;
28138		}
28139
28140		this._super( key, value );
28141
28142		if ( key === "collapsible" ) {
28143			this._toggleClass( "ui-tabs-collapsible", null, value );
28144
28145			// Setting collapsible: false while collapsed; open first panel
28146			if ( !value && this.options.active === false ) {
28147				this._activate( 0 );
28148			}
28149		}
28150
28151		if ( key === "event" ) {
28152			this._setupEvents( value );
28153		}
28154
28155		if ( key === "heightStyle" ) {
28156			this._setupHeightStyle( value );
28157		}
28158	},
28159
28160	_sanitizeSelector: function( hash ) {
28161		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
28162	},
28163
28164	refresh: function() {
28165		var options = this.options,
28166			lis = this.tablist.children( ":has(a[href])" );
28167
28168		// Get disabled tabs from class attribute from HTML
28169		// this will get converted to a boolean if needed in _refresh()
28170		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
28171			return lis.index( tab );
28172		} );
28173
28174		this._processTabs();
28175
28176		// Was collapsed or no tabs
28177		if ( options.active === false || !this.anchors.length ) {
28178			options.active = false;
28179			this.active = $();
28180
28181		// was active, but active tab is gone
28182		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
28183
28184			// all remaining tabs are disabled
28185			if ( this.tabs.length === options.disabled.length ) {
28186				options.active = false;
28187				this.active = $();
28188
28189			// activate previous tab
28190			} else {
28191				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
28192			}
28193
28194		// was active, active tab still exists
28195		} else {
28196
28197			// make sure active index is correct
28198			options.active = this.tabs.index( this.active );
28199		}
28200
28201		this._refresh();
28202	},
28203
28204	_refresh: function() {
28205		this._setOptionDisabled( this.options.disabled );
28206		this._setupEvents( this.options.event );
28207		this._setupHeightStyle( this.options.heightStyle );
28208
28209		this.tabs.not( this.active ).attr( {
28210			"aria-selected": "false",
28211			"aria-expanded": "false",
28212			tabIndex: -1
28213		} );
28214		this.panels.not( this._getPanelForTab( this.active ) )
28215			.hide()
28216			.attr( {
28217				"aria-hidden": "true"
28218			} );
28219
28220		// Make sure one tab is in the tab order
28221		if ( !this.active.length ) {
28222			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
28223		} else {
28224			this.active
28225				.attr( {
28226					"aria-selected": "true",
28227					"aria-expanded": "true",
28228					tabIndex: 0
28229				} );
28230			this._addClass( this.active, "ui-tabs-active", "ui-state-active" );
28231			this._getPanelForTab( this.active )
28232				.show()
28233				.attr( {
28234					"aria-hidden": "false"
28235				} );
28236		}
28237	},
28238
28239	_processTabs: function() {
28240		var that = this,
28241			prevTabs = this.tabs,
28242			prevAnchors = this.anchors,
28243			prevPanels = this.panels;
28244
28245		this.tablist = this._getList().attr( "role", "tablist" );
28246		this._addClass( this.tablist, "ui-tabs-nav",
28247			"ui-helper-reset ui-helper-clearfix ui-widget-header" );
28248
28249		// Prevent users from focusing disabled tabs via click
28250		this.tablist
28251			.on( "mousedown" + this.eventNamespace, "> li", function( event ) {
28252				if ( $( this ).is( ".ui-state-disabled" ) ) {
28253					event.preventDefault();
28254				}
28255			} )
28256
28257			// Support: IE <9
28258			// Preventing the default action in mousedown doesn't prevent IE
28259			// from focusing the element, so if the anchor gets focused, blur.
28260			// We don't have to worry about focusing the previously focused
28261			// element since clicking on a non-focusable element should focus
28262			// the body anyway.
28263			.on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
28264				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
28265					this.blur();
28266				}
28267			} );
28268
28269		this.tabs = this.tablist.find( "> li:has(a[href])" )
28270			.attr( {
28271				role: "tab",
28272				tabIndex: -1
28273			} );
28274		this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" );
28275
28276		this.anchors = this.tabs.map( function() {
28277			return $( "a", this )[ 0 ];
28278		} )
28279			.attr( {
28280				tabIndex: -1
28281			} );
28282		this._addClass( this.anchors, "ui-tabs-anchor" );
28283
28284		this.panels = $();
28285
28286		this.anchors.each( function( i, anchor ) {
28287			var selector, panel, panelId,
28288				anchorId = $( anchor ).uniqueId().attr( "id" ),
28289				tab = $( anchor ).closest( "li" ),
28290				originalAriaControls = tab.attr( "aria-controls" );
28291
28292			// Inline tab
28293			if ( that._isLocal( anchor ) ) {
28294				selector = anchor.hash;
28295				panelId = selector.substring( 1 );
28296				panel = that.element.find( that._sanitizeSelector( selector ) );
28297
28298			// remote tab
28299			} else {
28300
28301				// If the tab doesn't already have aria-controls,
28302				// generate an id by using a throw-away element
28303				panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
28304				selector = "#" + panelId;
28305				panel = that.element.find( selector );
28306				if ( !panel.length ) {
28307					panel = that._createPanel( panelId );
28308					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
28309				}
28310				panel.attr( "aria-live", "polite" );
28311			}
28312
28313			if ( panel.length ) {
28314				that.panels = that.panels.add( panel );
28315			}
28316			if ( originalAriaControls ) {
28317				tab.data( "ui-tabs-aria-controls", originalAriaControls );
28318			}
28319			tab.attr( {
28320				"aria-controls": panelId,
28321				"aria-labelledby": anchorId
28322			} );
28323			panel.attr( "aria-labelledby", anchorId );
28324		} );
28325
28326		this.panels.attr( "role", "tabpanel" );
28327		this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" );
28328
28329		// Avoid memory leaks (#10056)
28330		if ( prevTabs ) {
28331			this._off( prevTabs.not( this.tabs ) );
28332			this._off( prevAnchors.not( this.anchors ) );
28333			this._off( prevPanels.not( this.panels ) );
28334		}
28335	},
28336
28337	// Allow overriding how to find the list for rare usage scenarios (#7715)
28338	_getList: function() {
28339		return this.tablist || this.element.find( "ol, ul" ).eq( 0 );
28340	},
28341
28342	_createPanel: function( id ) {
28343		return $( "<div>" )
28344			.attr( "id", id )
28345			.data( "ui-tabs-destroy", true );
28346	},
28347
28348	_setOptionDisabled: function( disabled ) {
28349		var currentItem, li, i;
28350
28351		if ( Array.isArray( disabled ) ) {
28352			if ( !disabled.length ) {
28353				disabled = false;
vendor: 6,148 bytes, lines 28354-28582
28354			} else if ( disabled.length === this.anchors.length ) {
28355				disabled = true;
28356			}
28357		}
28358
28359		// Disable tabs
28360		for ( i = 0; ( li = this.tabs[ i ] ); i++ ) {
28361			currentItem = $( li );
28362			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
28363				currentItem.attr( "aria-disabled", "true" );
28364				this._addClass( currentItem, null, "ui-state-disabled" );
28365			} else {
28366				currentItem.removeAttr( "aria-disabled" );
28367				this._removeClass( currentItem, null, "ui-state-disabled" );
28368			}
28369		}
28370
28371		this.options.disabled = disabled;
28372
28373		this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null,
28374			disabled === true );
28375	},
28376
28377	_setupEvents: function( event ) {
28378		var events = {};
28379		if ( event ) {
28380			$.each( event.split( " " ), function( index, eventName ) {
28381				events[ eventName ] = "_eventHandler";
28382			} );
28383		}
28384
28385		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
28386
28387		// Always prevent the default action, even when disabled
28388		this._on( true, this.anchors, {
28389			click: function( event ) {
28390				event.preventDefault();
28391			}
28392		} );
28393		this._on( this.anchors, events );
28394		this._on( this.tabs, { keydown: "_tabKeydown" } );
28395		this._on( this.panels, { keydown: "_panelKeydown" } );
28396
28397		this._focusable( this.tabs );
28398		this._hoverable( this.tabs );
28399	},
28400
28401	_setupHeightStyle: function( heightStyle ) {
28402		var maxHeight,
28403			parent = this.element.parent();
28404
28405		if ( heightStyle === "fill" ) {
28406			maxHeight = parent.height();
28407			maxHeight -= this.element.outerHeight() - this.element.height();
28408
28409			this.element.siblings( ":visible" ).each( function() {
28410				var elem = $( this ),
28411					position = elem.css( "position" );
28412
28413				if ( position === "absolute" || position === "fixed" ) {
28414					return;
28415				}
28416				maxHeight -= elem.outerHeight( true );
28417			} );
28418
28419			this.element.children().not( this.panels ).each( function() {
28420				maxHeight -= $( this ).outerHeight( true );
28421			} );
28422
28423			this.panels.each( function() {
28424				$( this ).height( Math.max( 0, maxHeight -
28425					$( this ).innerHeight() + $( this ).height() ) );
28426			} )
28427				.css( "overflow", "auto" );
28428		} else if ( heightStyle === "auto" ) {
28429			maxHeight = 0;
28430			this.panels.each( function() {
28431				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
28432			} ).height( maxHeight );
28433		}
28434	},
28435
28436	_eventHandler: function( event ) {
28437		var options = this.options,
28438			active = this.active,
28439			anchor = $( event.currentTarget ),
28440			tab = anchor.closest( "li" ),
28441			clickedIsActive = tab[ 0 ] === active[ 0 ],
28442			collapsing = clickedIsActive && options.collapsible,
28443			toShow = collapsing ? $() : this._getPanelForTab( tab ),
28444			toHide = !active.length ? $() : this._getPanelForTab( active ),
28445			eventData = {
28446				oldTab: active,
28447				oldPanel: toHide,
28448				newTab: collapsing ? $() : tab,
28449				newPanel: toShow
28450			};
28451
28452		event.preventDefault();
28453
28454		if ( tab.hasClass( "ui-state-disabled" ) ||
28455
28456				// tab is already loading
28457				tab.hasClass( "ui-tabs-loading" ) ||
28458
28459				// can't switch durning an animation
28460				this.running ||
28461
28462				// click on active header, but not collapsible
28463				( clickedIsActive && !options.collapsible ) ||
28464
28465				// allow canceling activation
28466				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
28467			return;
28468		}
28469
28470		options.active = collapsing ? false : this.tabs.index( tab );
28471
28472		this.active = clickedIsActive ? $() : tab;
28473		if ( this.xhr ) {
28474			this.xhr.abort();
28475		}
28476
28477		if ( !toHide.length && !toShow.length ) {
28478			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
28479		}
28480
28481		if ( toShow.length ) {
28482			this.load( this.tabs.index( tab ), event );
28483		}
28484		this._toggle( event, eventData );
28485	},
28486
28487	// Handles show/hide for selecting tabs
28488	_toggle: function( event, eventData ) {
28489		var that = this,
28490			toShow = eventData.newPanel,
28491			toHide = eventData.oldPanel;
28492
28493		this.running = true;
28494
28495		function complete() {
28496			that.running = false;
28497			that._trigger( "activate", event, eventData );
28498		}
28499
28500		function show() {
28501			that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" );
28502
28503			if ( toShow.length && that.options.show ) {
28504				that._show( toShow, that.options.show, complete );
28505			} else {
28506				toShow.show();
28507				complete();
28508			}
28509		}
28510
28511		// Start out by hiding, then showing, then completing
28512		if ( toHide.length && this.options.hide ) {
28513			this._hide( toHide, this.options.hide, function() {
28514				that._removeClass( eventData.oldTab.closest( "li" ),
28515					"ui-tabs-active", "ui-state-active" );
28516				show();
28517			} );
28518		} else {
28519			this._removeClass( eventData.oldTab.closest( "li" ),
28520				"ui-tabs-active", "ui-state-active" );
28521			toHide.hide();
28522			show();
28523		}
28524
28525		toHide.attr( "aria-hidden", "true" );
28526		eventData.oldTab.attr( {
28527			"aria-selected": "false",
28528			"aria-expanded": "false"
28529		} );
28530
28531		// If we're switching tabs, remove the old tab from the tab order.
28532		// If we're opening from collapsed state, remove the previous tab from the tab order.
28533		// If we're collapsing, then keep the collapsing tab in the tab order.
28534		if ( toShow.length && toHide.length ) {
28535			eventData.oldTab.attr( "tabIndex", -1 );
28536		} else if ( toShow.length ) {
28537			this.tabs.filter( function() {
28538				return $( this ).attr( "tabIndex" ) === 0;
28539			} )
28540				.attr( "tabIndex", -1 );
28541		}
28542
28543		toShow.attr( "aria-hidden", "false" );
28544		eventData.newTab.attr( {
28545			"aria-selected": "true",
28546			"aria-expanded": "true",
28547			tabIndex: 0
28548		} );
28549	},
28550
28551	_activate: function( index ) {
28552		var anchor,
28553			active = this._findActive( index );
28554
28555		// Trying to activate the already active panel
28556		if ( active[ 0 ] === this.active[ 0 ] ) {
28557			return;
28558		}
28559
28560		// Trying to collapse, simulate a click on the current active header
28561		if ( !active.length ) {
28562			active = this.active;
28563		}
28564
28565		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
28566		this._eventHandler( {
28567			target: anchor,
28568			currentTarget: anchor,
28569			preventDefault: $.noop
28570		} );
28571	},
28572
28573	_findActive: function( index ) {
28574		return index === false ? $() : this.tabs.eq( index );
28575	},
28576
28577	_getIndex: function( index ) {
28578
28579		// meta-function to give users option to provide a href string instead of a numerical index.
28580		if ( typeof index === "string" ) {
28581			index = this.anchors.index( this.anchors.filter( "[href$='" +
28582				$.
vendor: 4,911 bytes, lines 28582-28790
28582escapeSelector( index ) + "']" ) );
28583		}
28584
28585		return index;
28586	},
28587
28588	_destroy: function() {
28589		if ( this.xhr ) {
28590			this.xhr.abort();
28591		}
28592
28593		this.tablist
28594			.removeAttr( "role" )
28595			.off( this.eventNamespace );
28596
28597		this.anchors
28598			.removeAttr( "role tabIndex" )
28599			.removeUniqueId();
28600
28601		this.tabs.add( this.panels ).each( function() {
28602			if ( $.data( this, "ui-tabs-destroy" ) ) {
28603				$( this ).remove();
28604			} else {
28605				$( this ).removeAttr( "role tabIndex " +
28606					"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" );
28607			}
28608		} );
28609
28610		this.tabs.each( function() {
28611			var li = $( this ),
28612				prev = li.data( "ui-tabs-aria-controls" );
28613			if ( prev ) {
28614				li
28615					.attr( "aria-controls", prev )
28616					.removeData( "ui-tabs-aria-controls" );
28617			} else {
28618				li.removeAttr( "aria-controls" );
28619			}
28620		} );
28621
28622		this.panels.show();
28623
28624		if ( this.options.heightStyle !== "content" ) {
28625			this.panels.css( "height", "" );
28626		}
28627	},
28628
28629	enable: function( index ) {
28630		var disabled = this.options.disabled;
28631		if ( disabled === false ) {
28632			return;
28633		}
28634
28635		if ( index === undefined ) {
28636			disabled = false;
28637		} else {
28638			index = this._getIndex( index );
28639			if ( Array.isArray( disabled ) ) {
28640				disabled = $.map( disabled, function( num ) {
28641					return num !== index ? num : null;
28642				} );
28643			} else {
28644				disabled = $.map( this.tabs, function( li, num ) {
28645					return num !== index ? num : null;
28646				} );
28647			}
28648		}
28649		this._setOptionDisabled( disabled );
28650	},
28651
28652	disable: function( index ) {
28653		var disabled = this.options.disabled;
28654		if ( disabled === true ) {
28655			return;
28656		}
28657
28658		if ( index === undefined ) {
28659			disabled = true;
28660		} else {
28661			index = this._getIndex( index );
28662			if ( $.inArray( index, disabled ) !== -1 ) {
28663				return;
28664			}
28665			if ( Array.isArray( disabled ) ) {
28666				disabled = $.merge( [ index ], disabled ).sort();
28667			} else {
28668				disabled = [ index ];
28669			}
28670		}
28671		this._setOptionDisabled( disabled );
28672	},
28673
28674	load: function( index, event ) {
28675		index = this._getIndex( index );
28676		var that = this,
28677			tab = this.tabs.eq( index ),
28678			anchor = tab.find( ".ui-tabs-anchor" ),
28679			panel = this._getPanelForTab( tab ),
28680			eventData = {
28681				tab: tab,
28682				panel: panel
28683			},
28684			complete = function( jqXHR, status ) {
28685				if ( status === "abort" ) {
28686					that.panels.stop( false, true );
28687				}
28688
28689				that._removeClass( tab, "ui-tabs-loading" );
28690				panel.removeAttr( "aria-busy" );
28691
28692				if ( jqXHR === that.xhr ) {
28693					delete that.xhr;
28694				}
28695			};
28696
28697		// Not remote
28698		if ( this._isLocal( anchor[ 0 ] ) ) {
28699			return;
28700		}
28701
28702		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
28703
28704		// Support: jQuery <1.8
28705		// jQuery <1.8 returns false if the request is canceled in beforeSend,
28706		// but as of 1.8, $.ajax() always returns a jqXHR object.
28707		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
28708			this._addClass( tab, "ui-tabs-loading" );
28709			panel.attr( "aria-busy", "true" );
28710
28711			this.xhr
28712				.done( function( response, status, jqXHR ) {
28713
28714					// support: jQuery <1.8
28715					// http://bugs.jquery.com/ticket/11778
28716					setTimeout( function() {
28717						panel.html( response );
28718						that._trigger( "load", event, eventData );
28719
28720						complete( jqXHR, status );
28721					}, 1 );
28722				} )
28723				.fail( function( jqXHR, status ) {
28724
28725					// support: jQuery <1.8
28726					// http://bugs.jquery.com/ticket/11778
28727					setTimeout( function() {
28728						complete( jqXHR, status );
28729					}, 1 );
28730				} );
28731		}
28732	},
28733
28734	_ajaxSettings: function( anchor, event, eventData ) {
28735		var that = this;
28736		return {
28737
28738			// Support: IE <11 only
28739			// Strip any hash that exists to prevent errors with the Ajax request
28740			url: anchor.attr( "href" ).replace( /#.*$/, "" ),
28741			beforeSend: function( jqXHR, settings ) {
28742				return that._trigger( "beforeLoad", event,
28743					$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
28744			}
28745		};
28746	},
28747
28748	_getPanelForTab: function( tab ) {
28749		var id = $( tab ).attr( "aria-controls" );
28750		return this.element.find( this._sanitizeSelector( "#" + id ) );
28751	}
28752} );
28753
28754// DEPRECATED
28755// TODO: Switch return back to widget declaration at top of file when this is removed
28756if ( $.uiBackCompat !== false ) {
28757
28758	// Backcompat for ui-tab class (now ui-tabs-tab)
28759	$.widget( "ui.tabs", $.ui.tabs, {
28760		_processTabs: function() {
28761			this._superApply( arguments );
28762			this._addClass( this.tabs, "ui-tab" );
28763		}
28764	} );
28765}
28766
28767var widgetsTabs = $.ui.tabs;
28768
28769
28770/*!
28771 * jQuery UI Tooltip 1.13.1
28772 * http://jqueryui.com
28773 *
28774 * Copyright jQuery Foundation and other contributors
28775 * Released under the MIT license.
28776 * http://jquery.org/license
28777 */
28778
28779//>>label: Tooltip
28780//>>group: Widgets
28781//>>description: Shows additional information for any element on hover or focus.
28782//>>docs: http://api.jqueryui.com/tooltip/
28783//>>demos: http://jqueryui.com/tooltip/
28784//>>css.structure: ../../themes/base/core.css
28785//>>css.structure: ../../themes/base/tooltip.css
28786//>>css.theme: ../../themes/base/theme.css
28787
28788
28789$.widget( "ui.tooltip", {
28790	version: "1.13.1
vendor: 13,567 bytes, lines 28790-29278
28790",
28791	options: {
28792		classes: {
28793			"ui-tooltip": "ui-corner-all ui-widget-shadow"
28794		},
28795		content: function() {
28796			var title = $( this ).attr( "title" );
28797
28798			// Escape title, since we're going from an attribute to raw HTML
28799			return $( "<a>" ).text( title ).html();
28800		},
28801		hide: true,
28802
28803		// Disabled elements have inconsistent behavior across browsers (#8661)
28804		items: "[title]:not([disabled])",
28805		position: {
28806			my: "left top+15",
28807			at: "left bottom",
28808			collision: "flipfit flip"
28809		},
28810		show: true,
28811		track: false,
28812
28813		// Callbacks
28814		close: null,
28815		open: null
28816	},
28817
28818	_addDescribedBy: function( elem, id ) {
28819		var describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ );
28820		describedby.push( id );
28821		elem
28822			.data( "ui-tooltip-id", id )
28823			.attr( "aria-describedby", String.prototype.trim.call( describedby.join( " " ) ) );
28824	},
28825
28826	_removeDescribedBy: function( elem ) {
28827		var id = elem.data( "ui-tooltip-id" ),
28828			describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ),
28829			index = $.inArray( id, describedby );
28830
28831		if ( index !== -1 ) {
28832			describedby.splice( index, 1 );
28833		}
28834
28835		elem.removeData( "ui-tooltip-id" );
28836		describedby = String.prototype.trim.call( describedby.join( " " ) );
28837		if ( describedby ) {
28838			elem.attr( "aria-describedby", describedby );
28839		} else {
28840			elem.removeAttr( "aria-describedby" );
28841		}
28842	},
28843
28844	_create: function() {
28845		this._on( {
28846			mouseover: "open",
28847			focusin: "open"
28848		} );
28849
28850		// IDs of generated tooltips, needed for destroy
28851		this.tooltips = {};
28852
28853		// IDs of parent tooltips where we removed the title attribute
28854		this.parents = {};
28855
28856		// Append the aria-live region so tooltips announce correctly
28857		this.liveRegion = $( "<div>" )
28858			.attr( {
28859				role: "log",
28860				"aria-live": "assertive",
28861				"aria-relevant": "additions"
28862			} )
28863			.appendTo( this.document[ 0 ].body );
28864		this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );
28865
28866		this.disabledTitles = $( [] );
28867	},
28868
28869	_setOption: function( key, value ) {
28870		var that = this;
28871
28872		this._super( key, value );
28873
28874		if ( key === "content" ) {
28875			$.each( this.tooltips, function( id, tooltipData ) {
28876				that._updateContent( tooltipData.element );
28877			} );
28878		}
28879	},
28880
28881	_setOptionDisabled: function( value ) {
28882		this[ value ? "_disable" : "_enable" ]();
28883	},
28884
28885	_disable: function() {
28886		var that = this;
28887
28888		// Close open tooltips
28889		$.each( this.tooltips, function( id, tooltipData ) {
28890			var event = $.Event( "blur" );
28891			event.target = event.currentTarget = tooltipData.element[ 0 ];
28892			that.close( event, true );
28893		} );
28894
28895		// Remove title attributes to prevent native tooltips
28896		this.disabledTitles = this.disabledTitles.add(
28897			this.element.find( this.options.items ).addBack()
28898				.filter( function() {
28899					var element = $( this );
28900					if ( element.is( "[title]" ) ) {
28901						return element
28902							.data( "ui-tooltip-title", element.attr( "title" ) )
28903							.removeAttr( "title" );
28904					}
28905				} )
28906		);
28907	},
28908
28909	_enable: function() {
28910
28911		// restore title attributes
28912		this.disabledTitles.each( function() {
28913			var element = $( this );
28914			if ( element.data( "ui-tooltip-title" ) ) {
28915				element.attr( "title", element.data( "ui-tooltip-title" ) );
28916			}
28917		} );
28918		this.disabledTitles = $( [] );
28919	},
28920
28921	open: function( event ) {
28922		var that = this,
28923			target = $( event ? event.target : this.element )
28924
28925				// we need closest here due to mouseover bubbling,
28926				// but always pointing at the same event target
28927				.closest( this.options.items );
28928
28929		// No element to show a tooltip for or the tooltip is already open
28930		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
28931			return;
28932		}
28933
28934		if ( target.attr( "title" ) ) {
28935			target.data( "ui-tooltip-title", target.attr( "title" ) );
28936		}
28937
28938		target.data( "ui-tooltip-open", true );
28939
28940		// Kill parent tooltips, custom or native, for hover
28941		if ( event && event.type === "mouseover" ) {
28942			target.parents().each( function() {
28943				var parent = $( this ),
28944					blurEvent;
28945				if ( parent.data( "ui-tooltip-open" ) ) {
28946					blurEvent = $.Event( "blur" );
28947					blurEvent.target = blurEvent.currentTarget = this;
28948					that.close( blurEvent, true );
28949				}
28950				if ( parent.attr( "title" ) ) {
28951					parent.uniqueId();
28952					that.parents[ this.id ] = {
28953						element: this,
28954						title: parent.attr( "title" )
28955					};
28956					parent.attr( "title", "" );
28957				}
28958			} );
28959		}
28960
28961		this._registerCloseHandlers( event, target );
28962		this._updateContent( target, event );
28963	},
28964
28965	_updateContent: function( target, event ) {
28966		var content,
28967			contentOption = this.options.content,
28968			that = this,
28969			eventType = event ? event.type : null;
28970
28971		if ( typeof contentOption === "string" || contentOption.nodeType ||
28972				contentOption.jquery ) {
28973			return this._open( event, target, contentOption );
28974		}
28975
28976		content = contentOption.call( target[ 0 ], function( response ) {
28977
28978			// IE may instantly serve a cached response for ajax requests
28979			// delay this call to _open so the other call to _open runs first
28980			that._delay( function() {
28981
28982				// Ignore async response if tooltip was closed already
28983				if ( !target.data( "ui-tooltip-open" ) ) {
28984					return;
28985				}
28986
28987				// JQuery creates a special event for focusin when it doesn't
28988				// exist natively. To improve performance, the native event
28989				// object is reused and the type is changed. Therefore, we can't
28990				// rely on the type being correct after the event finished
28991				// bubbling, so we set it back to the previous value. (#8740)
28992				if ( event ) {
28993					event.type = eventType;
28994				}
28995				this._open( event, target, response );
28996			} );
28997		} );
28998		if ( content ) {
28999			this._open( event, target, content );
29000		}
29001	},
29002
29003	_open: function( event, target, content ) {
29004		var tooltipData, tooltip, delayedShow, a11yContent,
29005			positionOption = $.extend( {}, this.options.position );
29006
29007		if ( !content ) {
29008			return;
29009		}
29010
29011		// Content can be updated multiple times. If the tooltip already
29012		// exists, then just update the content and bail.
29013		tooltipData = this._find( target );
29014		if ( tooltipData ) {
29015			tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
29016			return;
29017		}
29018
29019		// If we have a title, clear it to prevent the native tooltip
29020		// we have to check first to avoid defining a title if none exists
29021		// (we don't want to cause an element to start matching [title])
29022		//
29023		// We use removeAttr only for key events, to allow IE to export the correct
29024		// accessible attributes. For mouse events, set to empty string to avoid
29025		// native tooltip showing up (happens only when removing inside mouseover).
29026		if ( target.is( "[title]" ) ) {
29027			if ( event && event.type === "mouseover" ) {
29028				target.attr( "title", "" );
29029			} else {
29030				target.removeAttr( "title" );
29031			}
29032		}
29033
29034		tooltipData = this._tooltip( target );
29035		tooltip = tooltipData.tooltip;
29036		this._addDescribedBy( target, tooltip.attr( "id" ) );
29037		tooltip.find( ".ui-tooltip-content" ).html( content );
29038
29039		// Support: Voiceover on OS X, JAWS on IE <= 9
29040		// JAWS announces deletions even when aria-relevant="additions"
29041		// Voiceover will sometimes re-read the entire log region's contents from the beginning
29042		this.liveRegion.children().hide();
29043		a11yContent = $( "<div>" ).html( tooltip.find( ".ui-tooltip-content" ).html() );
29044		a11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" );
29045		a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
29046		a11yContent.appendTo( this.liveRegion );
29047
29048		function position( event ) {
29049			positionOption.of = event;
29050			if ( tooltip.is( ":hidden" ) ) {
29051				return;
29052			}
29053			tooltip.position( positionOption );
29054		}
29055		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
29056			this._on( this.document, {
29057				mousemove: position
29058			} );
29059
29060			// trigger once to override element-relative positioning
29061			position( event );
29062		} else {
29063			tooltip.position( $.extend( {
29064				of: target
29065			}, this.options.position ) );
29066		}
29067
29068		tooltip.hide();
29069
29070		this._show( tooltip, this.options.show );
29071
29072		// Handle tracking tooltips that are shown with a delay (#8644). As soon
29073		// as the tooltip is visible, position the tooltip using the most recent
29074		// event.
29075		// Adds the check to add the timers only when both delay and track options are set (#14682)
29076		if ( this.options.track && this.options.show && this.options.show.delay ) {
29077			delayedShow = this.delayedShow = setInterval( function() {
29078				if ( tooltip.is( ":visible" ) ) {
29079					position( positionOption.of );
29080					clearInterval( delayedShow );
29081				}
29082			}, 13 );
29083		}
29084
29085		this._trigger( "open", event, { tooltip: tooltip } );
29086	},
29087
29088	_registerCloseHandlers: function( event, target ) {
29089		var events = {
29090			keyup: function( event ) {
29091				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
29092					var fakeEvent = $.Event( event );
29093					fakeEvent.currentTarget = target[ 0 ];
29094					this.close( fakeEvent, true );
29095				}
29096			}
29097		};
29098
29099		// Only bind remove handler for delegated targets. Non-delegated
29100		// tooltips will handle this in destroy.
29101		if ( target[ 0 ] !== this.element[ 0 ] ) {
29102			events.remove = function() {
29103				var targetElement = this._find( target );
29104				if ( targetElement ) {
29105					this._removeTooltip( targetElement.tooltip );
29106				}
29107			};
29108		}
29109
29110		if ( !event || event.type === "mouseover" ) {
29111			events.mouseleave = "close";
29112		}
29113		if ( !event || event.type === "focusin" ) {
29114			events.focusout = "close";
29115		}
29116		this._on( true, target, events );
29117	},
29118
29119	close: function( event ) {
29120		var tooltip,
29121			that = this,
29122			target = $( event ? event.currentTarget : this.element ),
29123			tooltipData = this._find( target );
29124
29125		// The tooltip may already be closed
29126		if ( !tooltipData ) {
29127
29128			// We set ui-tooltip-open immediately upon open (in open()), but only set the
29129			// additional data once there's actually content to show (in _open()). So even if the
29130			// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
29131			// the period between open() and _open().
29132			target.removeData( "ui-tooltip-open" );
29133			return;
29134		}
29135
29136		tooltip = tooltipData.tooltip;
29137
29138		// Disabling closes the tooltip, so we need to track when we're closing
29139		// to avoid an infinite loop in case the tooltip becomes disabled on close
29140		if ( tooltipData.closing ) {
29141			return;
29142		}
29143
29144		// Clear the interval for delayed tracking tooltips
29145		clearInterval( this.delayedShow );
29146
29147		// Only set title if we had one before (see comment in _open())
29148		// If the title attribute has changed since open(), don't restore
29149		if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
29150			target.attr( "title", target.data( "ui-tooltip-title" ) );
29151		}
29152
29153		this._removeDescribedBy( target );
29154
29155		tooltipData.hiding = true;
29156		tooltip.stop( true );
29157		this._hide( tooltip, this.options.hide, function() {
29158			that._removeTooltip( $( this ) );
29159		} );
29160
29161		target.removeData( "ui-tooltip-open" );
29162		this._off( target, "mouseleave focusout keyup" );
29163
29164		// Remove 'remove' binding only on delegated targets
29165		if ( target[ 0 ] !== this.element[ 0 ] ) {
29166			this._off( target, "remove" );
29167		}
29168		this._off( this.document, "mousemove" );
29169
29170		if ( event && event.type === "mouseleave" ) {
29171			$.each( this.parents, function( id, parent ) {
29172				$( parent.element ).attr( "title", parent.title );
29173				delete that.parents[ id ];
29174			} );
29175		}
29176
29177		tooltipData.closing = true;
29178		this._trigger( "close", event, { tooltip: tooltip } );
29179		if ( !tooltipData.hiding ) {
29180			tooltipData.closing = false;
29181		}
29182	},
29183
29184	_tooltip: function( element ) {
29185		var tooltip = $( "<div>" ).attr( "role", "tooltip" ),
29186			content = $( "<div>" ).appendTo( tooltip ),
29187			id = tooltip.uniqueId().attr( "id" );
29188
29189		this._addClass( content, "ui-tooltip-content" );
29190		this._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" );
29191
29192		tooltip.appendTo( this._appendTo( element ) );
29193
29194		return this.tooltips[ id ] = {
29195			element: element,
29196			tooltip: tooltip
29197		};
29198	},
29199
29200	_find: function( target ) {
29201		var id = target.data( "ui-tooltip-id" );
29202		return id ? this.tooltips[ id ] : null;
29203	},
29204
29205	_removeTooltip: function( tooltip ) {
29206
29207		// Clear the interval for delayed tracking tooltips
29208		clearInterval( this.delayedShow );
29209
29210		tooltip.remove();
29211		delete this.tooltips[ tooltip.attr( "id" ) ];
29212	},
29213
29214	_appendTo: function( target ) {
29215		var element = target.closest( ".ui-front, dialog" );
29216
29217		if ( !element.length ) {
29218			element = this.document[ 0 ].body;
29219		}
29220
29221		return element;
29222	},
29223
29224	_destroy: function() {
29225		var that = this;
29226
29227		// Close open tooltips
29228		$.each( this.tooltips, function( id, tooltipData ) {
29229
29230			// Delegate to close method to handle common cleanup
29231			var event = $.Event( "blur" ),
29232				element = tooltipData.element;
29233			event.target = event.currentTarget = element[ 0 ];
29234			that.close( event, true );
29235
29236			// Remove immediately; destroying an open tooltip doesn't use the
29237			// hide animation
29238			$( "#" + id ).remove();
29239
29240			// Restore the title
29241			if ( element.data( "ui-tooltip-title" ) ) {
29242
29243				// If the title attribute has changed since open(), don't restore
29244				if ( !element.attr( "title" ) ) {
29245					element.attr( "title", element.data( "ui-tooltip-title" ) );
29246				}
29247				element.removeData( "ui-tooltip-title" );
29248			}
29249		} );
29250		this.liveRegion.remove();
29251	}
29252} );
29253
29254// DEPRECATED
29255// TODO: Switch return back to widget declaration at top of file when this is removed
29256if ( $.uiBackCompat !== false ) {
29257
29258	// Backcompat for tooltipClass option
29259	$.widget( "ui.tooltip", $.ui.tooltip, {
29260		options: {
29261			tooltipClass: null
29262		},
29263		_tooltip: function() {
29264			var tooltipData = this._superApply( arguments );
29265			if ( this.options.tooltipClass ) {
29266				tooltipData.tooltip.addClass( this.options.tooltipClass );
29267			}
29268			return tooltipData;
29269		}
29270	} );
29271}
29272
29273var widgetsTooltip = $.ui.tooltip;
29274
29275
29276
29277
29278} );
29278
vendor: 10,254 bytes, lines 29279-29530
29279/*!
29280 * jQuery throttle / debounce - v1.1 - 3/7/2010
29281 * http://benalman.com/projects/jquery-throttle-debounce-plugin/
29282 * 
29283 * Copyright (c) 2010 "Cowboy" Ben Alman
29284 * Dual licensed under the MIT and GPL licenses.
29285 * http://benalman.com/about/license/
29286 */
29287
29288// Script: jQuery throttle / debounce: Sometimes, less is more!
29289//
29290// *Version: 1.1, Last updated: 3/7/2010*
29291// 
29292// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/
29293// GitHub       - http://github.com/cowboy/jquery-throttle-debounce/
29294// Source       - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js
29295// (Minified)   - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb)
29296// 
29297// About: License
29298// 
29299// Copyright (c) 2010 "Cowboy" Ben Alman,
29300// Dual licensed under the MIT and GPL licenses.
29301// http://benalman.com/about/license/
29302// 
29303// About: Examples
29304// 
29305// These working examples, complete with fully commented code, illustrate a few
29306// ways in which this plugin can be used.
29307// 
29308// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/
29309// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/
29310// 
29311// About: Support and Testing
29312// 
29313// Information about what version or versions of jQuery this plugin has been
29314// tested with, what browsers it has been tested in, and where the unit tests
29315// reside (so you can test it yourself).
29316// 
29317// jQuery Versions - none, 1.3.2, 1.4.2
29318// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1.
29319// Unit Tests      - http://benalman.com/code/projects/jquery-throttle-debounce/unit/
29320// 
29321// About: Release History
29322// 
29323// 1.1 - (3/7/2010) Fixed a bug in <jQuery.throttle> where trailing callbacks
29324//       executed later than they should. Reworked a fair amount of internal
29325//       logic as well.
29326// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over
29327//       from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the
29328//       no_trailing throttle parameter and debounce functionality.
29329// 
29330// Topic: Note for non-jQuery users
29331// 
29332// jQuery isn't actually required for this plugin, because nothing internal
29333// uses any jQuery methods or properties. jQuery is just used as a namespace
29334// under which these methods can exist.
29335// 
29336// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist
29337// when this plugin is loaded, the method described below will be created in
29338// the `Cowboy` namespace. Usage will be exactly the same, but instead of
29339// $.method() or jQuery.method(), you'll need to use Cowboy.method().
29340
29341(function(window,undefined){
29342  '$:nomunge'; // Used by YUI compressor.
29343  
29344  // Since jQuery really isn't required for this plugin, use `jQuery` as the
29345  // namespace only if it already exists, otherwise use the `Cowboy` namespace,
29346  // creating it if necessary.
29347  var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ),
29348    
29349    // Internal method reference.
29350    jq_throttle;
29351  
29352  // Method: jQuery.throttle
29353  // 
29354  // Throttle execution of a function. Especially useful for rate limiting
29355  // execution of handlers on events like resize and scroll. If you want to
29356  // rate-limit execution of a function to a single time, see the
29357  // <jQuery.debounce> method.
29358  // 
29359  // In this visualization, | is a throttled-function call and X is the actual
29360  // callback execution:
29361  // 
29362  // > Throttled with `no_trailing` specified as false or unspecified:
29363  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
29364  // > X    X    X    X    X    X        X    X    X    X    X    X
29365  // > 
29366  // > Throttled with `no_trailing` specified as true:
29367  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
29368  // > X    X    X    X    X             X    X    X    X    X
29369  // 
29370  // Usage:
29371  // 
29372  // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback );
29373  // > 
29374  // > jQuery('selector').bind( 'someevent', throttled );
29375  // > jQuery('selector').unbind( 'someevent', throttled );
29376  // 
29377  // This also works in jQuery 1.4+:
29378  // 
29379  // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) );
29380  // > jQuery('selector').unbind( 'someevent', callback );
29381  // 
29382  // Arguments:
29383  // 
29384  //  delay - (Number) A zero-or-greater delay in milliseconds. For event
29385  //    callbacks, values around 100 or 250 (or even higher) are most useful.
29386  //  no_trailing - (Boolean) Optional, defaults to false. If no_trailing is
29387  //    true, callback will only execute every `delay` milliseconds while the
29388  //    throttled-function is being called. If no_trailing is false or
29389  //    unspecified, callback will be executed one final time after the last
29390  //    throttled-function call. (After the throttled-function has not been
29391  //    called for `delay` milliseconds, the internal counter is reset)
29392  //  callback - (Function) A function to be executed after delay milliseconds.
29393  //    The `this` context and all arguments are passed through, as-is, to
29394  //    `callback` when the throttled-function is executed.
29395  // 
29396  // Returns:
29397  // 
29398  //  (Function) A new, throttled, function.
29399  
29400  $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) {
29401    // After wrapper has stopped being called, this timeout ensures that
29402    // `callback` is executed at the proper times in `throttle` and `end`
29403    // debounce modes.
29404    var timeout_id,
29405      
29406      // Keep track of the last time `callback` was executed.
29407      last_exec = 0;
29408    
29409    // `no_trailing` defaults to falsy.
29410    if ( typeof no_trailing !== 'boolean' ) {
29411      debounce_mode = callback;
29412      callback = no_trailing;
29413      no_trailing = undefined;
29414    }
29415    
29416    // The `wrapper` function encapsulates all of the throttling / debouncing
29417    // functionality and when executed will limit the rate at which `callback`
29418    // is executed.
29419    function wrapper() {
29420      var that = this,
29421        elapsed = +new Date() - last_exec,
29422        args = arguments;
29423      
29424      // Execute `callback` and update the `last_exec` timestamp.
29425      function exec() {
29426        last_exec = +new Date();
29427        callback.apply( that, args );
29428      };
29429      
29430      // If `debounce_mode` is true (at_begin) this is used to clear the flag
29431      // to allow future `callback` executions.
29432      function clear() {
29433        timeout_id = undefined;
29434      };
29435      
29436      if ( debounce_mode && !timeout_id ) {
29437        // Since `wrapper` is being called for the first time and
29438        // `debounce_mode` is true (at_begin), execute `callback`.
29439        exec();
29440      }
29441      
29442      // Clear any existing timeout.
29443      timeout_id && clearTimeout( timeout_id );
29444      
29445      if ( debounce_mode === undefined && elapsed > delay ) {
29446        // In throttle mode, if `delay` time has been exceeded, execute
29447        // `callback`.
29448        exec();
29449        
29450      } else if ( no_trailing !== true ) {
29451        // In trailing throttle mode, since `delay` time has not been
29452        // exceeded, schedule `callback` to execute `delay` ms after most
29453        // recent execution.
29454        // 
29455        // If `debounce_mode` is true (at_begin), schedule `clear` to execute
29456        // after `delay` ms.
29457        // 
29458        // If `debounce_mode` is false (at end), schedule `callback` to
29459        // execute after `delay` ms.
29460        timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay );
29461      }
29462    };
29463    
29464    // Set the guid of `wrapper` function to the same of original callback, so
29465    // it can be removed in jQuery 1.4+ .unbind or .die by using the original
29466    // callback as a reference.
29467    if ( $.guid ) {
29468      wrapper.guid = callback.guid = callback.guid || $.guid++;
29469    }
29470    
29471    // Return the wrapper function.
29472    return wrapper;
29473  };
29474  
29475  // Method: jQuery.debounce
29476  // 
29477  // Debounce execution of a function. Debouncing, unlike throttling,
29478  // guarantees that a function is only executed a single time, either at the
29479  // very beginning of a series of calls, or at the very end. If you want to
29480  // simply rate-limit execution of a function, see the <jQuery.throttle>
29481  // method.
29482  // 
29483  // In this visualization, | is a debounced-function call and X is the actual
29484  // callback execution:
29485  // 
29486  // > Debounced with `at_begin` specified as false or unspecified:
29487  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
29488  // >                          X                                 X
29489  // > 
29490  // > Debounced with `at_begin` specified as true:
29491  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
29492  // > X                                 X
29493  // 
29494  // Usage:
29495  // 
29496  // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback );
29497  // > 
29498  // > jQuery('selector').bind( 'someevent', debounced );
29499  // > jQuery('selector').unbind( 'someevent', debounced );
29500  // 
29501  // This also works in jQuery 1.4+:
29502  // 
29503  // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) );
29504  // > jQuery('selector').unbind( 'someevent', callback );
29505  // 
29506  // Arguments:
29507  // 
29508  //  delay - (Number) A zero-or-greater delay in milliseconds. For event
29509  //    callbacks, values around 100 or 250 (or even higher) are most useful.
29510  //  at_begin - (Boolean) Optional, defaults to false. If at_begin is false or
29511  //    unspecified, callback will only be executed `delay` milliseconds after
29512  //    the last debounced-function call. If at_begin is true, callback will be
29513  //    executed only at the first debounced-function call. (After the
29514  //    throttled-function has not been called for `delay` milliseconds, the
29515  //    internal counter is reset)
29516  //  callback - (Function) A function to be executed after delay milliseconds.
29517  //    The `this` context and all arguments are passed through, as-is, to
29518  //    `callback` when the debounced-function is executed.
29519  // 
29520  // Returns:
29521  // 
29522  //  (Function) A new, debounced, function.
29523  
29524  $.debounce = function( delay, at_begin, callback ) {
29525    return callback === undefined
29526      ? jq_throttle( delay, at_begin, false )
29527      : jq_throttle( delay, callback, at_begin !== false );
29528  };
29529  
29530})(this);
29531
29532/*!
29533  * Bootstrap v4.1.3 (https://getbootstrap.com/)
29534  * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
29535  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
29536  */
29537(function (global, factory) {
29538  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
29539  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
29540  (factory((global.bootstrap = {}),global.jQuery));
29541}(this, (function (exports,$) { 'use strict';
29542
29543  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
29544
29545  function _defineProperties(target, props) {
29546    for (var i = 0; i < props.length; i++) {
29547      var descriptor = props[i];
29548      descriptor.enumerable = descriptor.enumerable || false;
29549      descriptor.configurable = true;
29550      if ("value" in descriptor) descriptor.writable = true;
29551      Object.defineProperty(target, descriptor.key, descriptor);
29552    }
29553  }
29554
29555  function _createClass(Constructor, protoProps, staticProps) {
29556    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29557    if (staticProps) _defineProperties(Constructor, staticProps);
29558    return Constructor;
29559  }
29560
29561  function _defineProperty(obj, key, value) {
29562    if (key in obj) {
29563      Object.defineProperty(obj, key, {
29564        value: value,
29565        enumerable: true,
29566        configurable: true,
29567        writable: true
29568      });
29569    } else {
29570      obj[key] = value;
29571    }
29572
29573    return obj;
29574  }
29575
29576  function _objectSpread(target) {
29577    for (var i = 1; i < arguments.length; i++) {
29578      var source = arguments[i] != null ? arguments[i] : {};
29579      var ownKeys = Object.keys(source);
29580
29581      if (typeof Object.getOwnPropertySymbols === 'function') {
29582        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
29583          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
29584        }));
29585      }
29586
29587      ownKeys.forEach(function (key) {
29588        _defineProperty(target, key, source[key]);
29589      });
29590    }
29591
29592    return target;
29593  }
29594
29595  function _inheritsLoose(subClass, superClass) {
29596    subClass.prototype = Object.create(superClass.prototype);
29597    subClass.prototype.constructor = subClass;
29598    subClass.__proto__ = superClass;
29599  }
29600
29601  /**
29602   * --------------------------------------------------------------------------
29603   * Bootstrap (v4.1.3): util.js
29604   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
29605   * --------------------------------------------------------------------------
29606   */
29607
29608  var Util = function ($$$1) {
29609    /**
29610     * ------------------------------------------------------------------------
29611     * Private TransitionEnd Helpers
29612     * ------------------------------------------------------------------------
29613     */
29614    var TRANSITION_END = 'transitionend';
29615    var MAX_UID = 1000000;
29616    var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
29617
29618    function toType(obj) {
29619      return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
29620    }
29621
29622    function getSpecialTransitionEndEvent() {
29623      return {
29624        bindType: TRANSITION_END,
29625        delegateType: TRANSITION_END,
29626        handle: function handle(event) {
29627          if ($$$1(event.target).is(this)) {
29628            return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
29629          }
29630
29631          return undefined; // eslint-disable-line no-undefined
29632        }
29633      };
29634    }
29635
29636    function transitionEndEmulator(duration) {
29637      var _this = this;
29638
29639      var called = false;
29640      $$$1(this).one(Util.TRANSITION_END, function () {
29641        called = true;
29642      });
29643      setTimeout(function () {
29644        if (!called) {
29645          Util.triggerTransitionEnd(_this);
29646        }
29647      }, duration);
29648      return this;
29649    }
29650
29651    function setTransitionEndSupport() {
29652      $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
29653      $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
29654    }
29655    /**
29656     * --------------------------------------------------------------------------
29657     * Public Util Api
29658     * --------------------------------------------------------------------------
29659     */
29660
29661
29662    var Util = {
29663      TRANSITION_END: 'bsTransitionEnd',
29664      getUID: function getUID(prefix) {
29665        do {
29666          // eslint-disable-next-line no-bitwise
29667          prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
29668        } while (document.getElementById(prefix));
29669
29670        return prefix;
29671      },
29672      getSelectorFromElement: function getSelectorFromElement(element) {
29673        var selector = element.getAttribute('data-target');
29674
29675        if (!selector || selector === '#') {
29676          selector = element.getAttribute('href') || '';
29677        }
29678
29679        try {
29680          return document.querySelector(selector) ? selector : null;
29681        } catch (err) {
29682          return null;
29683        }
29684      },
29685      getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
29686        if (!element) {
29687          return 0;
29688        } // Get transition-duration of the element
29689
29690
29691        var transitionDuration = $$$1(element).css('transition-duration');
29692        var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
29693
29694        if (!floatTransitionDuration) {
29695          return 0;
29696        } // If multiple durations are defined, take the first
29697
29698
29699        transitionDuration = transitionDuration.split(',')[0];
29700        return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
29701      },
29702      reflow: function reflow(element) {
29703        return element.offsetHeight;
29704      },
29705      triggerTransitionEnd: function triggerTransitionEnd(element) {
29706        $$$1(element).trigger(TRANSITION_END);
29707      },
29708      // TODO: Remove in v5
29709      supportsTransitionEnd: function supportsTransitionEnd() {
29710        return Boolean(TRANSITION_END);
29711      },
29712      isElement: function isElement(obj) {
29713        return (obj[0] || obj).nodeType;
29714      },
29715      typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
29716        for (var property in configTypes) {
29717          if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
29718            var expectedTypes = configTypes[property];
29719            var value = config[property];
29720            var valueType = value && Util.isElement(value) ? 'element' : toType(value);
29721
29722            if (!new RegExp(expectedTypes).test(valueType)) {
29723              throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
29724            }
29725          }
29726        }
29727      }
29728    };
29729    setTransitionEndSupport();
29730    return Util;
29731  }($);
29732
29733  /**
29734   * --------------------------------------------------------------------------
29735   * Bootstrap (v4.1.3): alert.js
29736   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
29737   * --------------------------------------------------------------------------
29738   */
29739
29740  var Alert = function ($$$1) {
29741    /**
29742     * ------------------------------------------------------------------------
29743     * Constants
29744     * ------------------------------------------------------------------------
29745     */
29746    var NAME = 'alert';
29747    var VERSION = '4.1.3';
29748    var DATA_KEY = 'bs.alert';
29749    var EVENT_KEY = "." + DATA_KEY;
29750    var DATA_API_KEY = '.data-api';
29751    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
29752    var Selector = {
29753      DISMISS: '[data-dismiss="alert"]'
29754    };
29755    var Event = {
29756      CLOSE: "close" + EVENT_KEY,
29757      CLOSED: "closed" + EVENT_KEY,
29758      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
29759    };
29760    var ClassName = {
29761      ALERT: 'alert',
29762      FADE: 'fade',
29763      SHOW: 'show'
29764      /**
29765       * ------------------------------------------------------------------------
29766       * Class Definition
29767       * ------------------------------------------------------------------------
29768       */
29769
29770    };
29771
29772    var Alert =
29773    /*#__PURE__*/
29774    function () {
29775      function Alert(element) {
29776        this._element = element;
29777      } // Getters
29778
29779
29780      var _proto = Alert.prototype;
29781
29782      // Public
29783      _proto.close = function close(element) {
29784        var rootElement = this._element;
29785
29786        if (element) {
29787          rootElement = this._getRootElement(element);
29788        }
29789
29790        var customEvent = this._triggerCloseEvent(rootElement);
29791
29792        if (customEvent.isDefaultPrevented()) {
29793          return;
29794        }
29795
29796        this._removeElement(rootElement);
29797      };
29798
29799      _proto.dispose = function dispose() {
29800        $$$1.removeData(this._element, DATA_KEY);
29801        this._element = null;
29802      }; // Private
29803
29804
29805      _proto._getRootElement = function _getRootElement(element) {
29806        var selector = Util.getSelectorFromElement(element);
29807        var parent = false;
29808
29809        if (selector) {
29810          parent = document.querySelector(selector);
29811        }
29812
29813        if (!parent) {
29814          parent = $$$1(element).closest("." + ClassName.ALERT)[0];
29815        }
29816
29817        return parent;
29818      };
29819
29820      _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
29821        var closeEvent = $$$1.Event(Event.CLOSE);
29822        $$$1(element).trigger(closeEvent);
29823        return closeEvent;
29824      };
29825
29826      _proto._removeElement = function _removeElement(element) {
29827        var _this = this;
29828
29829        $$$1(element).removeClass(ClassName.SHOW);
29830
29831        if (!$$$1(element).hasClass(ClassName.FADE)) {
29832          this._destroyElement(element);
29833
29834          return;
29835        }
29836
29837        var transitionDuration = Util.getTransitionDurationFromElement(element);
29838        $$$1(element).one(Util.TRANSITION_END, function (event) {
29839          return _this._destroyElement(element, event);
29840        }).emulateTransitionEnd(transitionDuration);
29841      };
29842
29843      _proto._destroyElement = function _destroyElement(element) {
29844        $$$1(element).detach().trigger(Event.CLOSED).remove();
29845      }; // Static
29846
29847
29848      Alert._jQueryInterface = function _jQueryInterface(config) {
29849        return this.each(function () {
29850          var $element = $$$1(this);
29851          var data = $element.data(DATA_KEY);
29852
29853          if (!data) {
29854            data = new Alert(this);
29855            $element.data(DATA_KEY, data);
29856          }
29857
29858          if (config === 'close') {
29859            data[config](this);
29860          }
29861        });
29862      };
29863
29864      Alert._handleDismiss = function _handleDismiss(alertInstance) {
29865        return function (event) {
29866          if (event) {
29867            event.preventDefault();
29868          }
29869
29870          alertInstance.close(this);
29871        };
29872      };
29873
29874      _createClass(Alert, null, [{
29875        key: "VERSION",
29876        get: function get() {
29877          return VERSION;
29878        }
29879      }]);
29880
29881      return Alert;
29882    }();
29883    /**
29884     * ------------------------------------------------------------------------
29885     * Data Api implementation
29886     * ------------------------------------------------------------------------
29887     */
29888
29889
29890    $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
29891    /**
29892     * ------------------------------------------------------------------------
29893     * jQuery
29894     * ------------------------------------------------------------------------
29895     */
29896
29897    $$$1.fn[NAME] = Alert._jQueryInterface;
29898    $$$1.fn[NAME].Constructor = Alert;
29899
29900    $$$1.fn[NAME].noConflict = function () {
29901      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
29902      return Alert._jQueryInterface;
29903    };
29904
29905    return Alert;
29906  }($);
29907
29908  /**
29909   * --------------------------------------------------------------------------
29910   * Bootstrap (v4.1.3): button.js
29911   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
29912   * --------------------------------------------------------------------------
29913   */
29914
29915  var Button = function ($$$1) {
29916    /**
29917     * ------------------------------------------------------------------------
29918     * Constants
29919     * ------------------------------------------------------------------------
29920     */
29921    var NAME = 'button';
29922    var VERSION = '4.1.3';
29923    var DATA_KEY = 'bs.button';
29924    var EVENT_KEY = "." + DATA_KEY;
29925    var DATA_API_KEY = '.data-api';
29926    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
29927    var ClassName = {
29928      ACTIVE: 'active',
29929      BUTTON: 'btn',
29930      FOCUS: 'focus'
29931    };
29932    var Selector = {
29933      DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
29934      DATA_TOGGLE: '[data-toggle="buttons"]',
29935      INPUT: 'input',
29936      ACTIVE: '.active',
29937      BUTTON: '.btn'
29938    };
29939    var Event = {
29940      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
29941      FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY)
29942      /**
29943       * ------------------------------------------------------------------------
29944       * Class Definition
29945       * ------------------------------------------------------------------------
29946       */
29947
29948    };
29949
29950    var Button =
29951    /*#__PURE__*/
29952    function () {
29953      function Button(element) {
29954        this._element = element;
29955      } // Getters
29956
29957
29958      var _proto = Button.prototype;
29959
29960      // Public
vendor: 5,671 bytes, lines 29961-30142
29961      _proto.toggle = function toggle() {
29962        var triggerChangeEvent = true;
29963        var addAriaPressed = true;
29964        var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0];
29965
29966        if (rootElement) {
29967          var input = this._element.querySelector(Selector.INPUT);
29968
29969          if (input) {
29970            if (input.type === 'radio') {
29971              if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {
29972                triggerChangeEvent = false;
29973              } else {
29974                var activeElement = rootElement.querySelector(Selector.ACTIVE);
29975
29976                if (activeElement) {
29977                  $$$1(activeElement).removeClass(ClassName.ACTIVE);
29978                }
29979              }
29980            }
29981
29982            if (triggerChangeEvent) {
29983              if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
29984                return;
29985              }
29986
29987              input.checked = !this._element.classList.contains(ClassName.ACTIVE);
29988              $$$1(input).trigger('change');
29989            }
29990
29991            input.focus();
29992            addAriaPressed = false;
29993          }
29994        }
29995
29996        if (addAriaPressed) {
29997          this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));
29998        }
29999
30000        if (triggerChangeEvent) {
30001          $$$1(this._element).toggleClass(ClassName.ACTIVE);
30002        }
30003      };
30004
30005      _proto.dispose = function dispose() {
30006        $$$1.removeData(this._element, DATA_KEY);
30007        this._element = null;
30008      }; // Static
30009
30010
30011      Button._jQueryInterface = function _jQueryInterface(config) {
30012        return this.each(function () {
30013          var data = $$$1(this).data(DATA_KEY);
30014
30015          if (!data) {
30016            data = new Button(this);
30017            $$$1(this).data(DATA_KEY, data);
30018          }
30019
30020          if (config === 'toggle') {
30021            data[config]();
30022          }
30023        });
30024      };
30025
30026      _createClass(Button, null, [{
30027        key: "VERSION",
30028        get: function get() {
30029          return VERSION;
30030        }
30031      }]);
30032
30033      return Button;
30034    }();
30035    /**
30036     * ------------------------------------------------------------------------
30037     * Data Api implementation
30038     * ------------------------------------------------------------------------
30039     */
30040
30041
30042    $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
30043      event.preventDefault();
30044      var button = event.target;
30045
30046      if (!$$$1(button).hasClass(ClassName.BUTTON)) {
30047        button = $$$1(button).closest(Selector.BUTTON);
30048      }
30049
30050      Button._jQueryInterface.call($$$1(button), 'toggle');
30051    }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
30052      var button = $$$1(event.target).closest(Selector.BUTTON)[0];
30053      $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
30054    });
30055    /**
30056     * ------------------------------------------------------------------------
30057     * jQuery
30058     * ------------------------------------------------------------------------
30059     */
30060
30061    $$$1.fn[NAME] = Button._jQueryInterface;
30062    $$$1.fn[NAME].Constructor = Button;
30063
30064    $$$1.fn[NAME].noConflict = function () {
30065      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
30066      return Button._jQueryInterface;
30067    };
30068
30069    return Button;
30070  }($);
30071
30072  /**
30073   * --------------------------------------------------------------------------
30074   * Bootstrap (v4.1.3): carousel.js
30075   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
30076   * --------------------------------------------------------------------------
30077   */
30078
30079  var Carousel = function ($$$1) {
30080    /**
30081     * ------------------------------------------------------------------------
30082     * Constants
30083     * ------------------------------------------------------------------------
30084     */
30085    var NAME = 'carousel';
30086    var VERSION = '4.1.3';
30087    var DATA_KEY = 'bs.carousel';
30088    var EVENT_KEY = "." + DATA_KEY;
30089    var DATA_API_KEY = '.data-api';
30090    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
30091    var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
30092
30093    var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
30094
30095    var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
30096
30097    var Default = {
30098      interval: 5000,
30099      keyboard: true,
30100      slide: false,
30101      pause: 'hover',
30102      wrap: true
30103    };
30104    var DefaultType = {
30105      interval: '(number|boolean)',
30106      keyboard: 'boolean',
30107      slide: '(boolean|string)',
30108      pause: '(string|boolean)',
30109      wrap: 'boolean'
30110    };
30111    var Direction = {
30112      NEXT: 'next',
30113      PREV: 'prev',
30114      LEFT: 'left',
30115      RIGHT: 'right'
30116    };
30117    var Event = {
30118      SLIDE: "slide" + EVENT_KEY,
30119      SLID: "slid" + EVENT_KEY,
30120      KEYDOWN: "keydown" + EVENT_KEY,
30121      MOUSEENTER: "mouseenter" + EVENT_KEY,
30122      MOUSELEAVE: "mouseleave" + EVENT_KEY,
30123      TOUCHEND: "touchend" + EVENT_KEY,
30124      LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
30125      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
30126    };
30127    var ClassName = {
30128      CAROUSEL: 'carousel',
30129      ACTIVE: 'active',
30130      SLIDE: 'slide',
30131      RIGHT: 'carousel-item-right',
30132      LEFT: 'carousel-item-left',
30133      NEXT: 'carousel-item-next',
30134      PREV: 'carousel-item-prev',
30135      ITEM: 'carousel-item'
30136    };
30137    var Selector = {
30138      ACTIVE: '.active',
30139      ACTIVE_ITEM: '.active.carousel-item',
30140      ITEM: '.carousel-item',
30141      NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
30142      INDICATORS: '.carousel-indicators',
30143      DATA_SLIDE: '[data-slide], [data-slide-to]',
30144      DATA_RIDE: '[data-ride="carousel"]'
30145      /**
30146       * ------------------------------------------------------------------------
30147       * Class Definition
30148       * ------------------------------------------------------------------------
30149       */
30150
30151    };
30152
30153    var Carousel =
30154    /*#__PURE__*/
30155    function () {
30156      function Carousel(element, config) {
30157        this._items = null;
30158        this._interval = null;
30159        this._activeElement = null;
30160        this._isPaused = false;
30161        this._isSliding = false;
30162        this.touchTimeout = null;
30163        this._config = this._getConfig(config);
30164        this._element = $$$1(element)[0];
30165        this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);
30166
30167        this._addEventListeners();
30168      } // Getters
30169
30170
30171      var _proto = Carousel.prototype;
30172
30173      // Public
30174      _proto.next = function next() {
30175        if (!this._isSliding) {
30176          this._slide(Direction.NEXT);
30177        }
30178      };
30179
30180      _proto.nextWhenVisible = function nextWhenVisible() {
30181        // Don't call next when the page isn't visible
30182        // or the carousel or its parent isn't visible
30183        if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') {
30184          this.next();
30185        }
30186      };
30187
30188      _proto.prev = function prev() {
30189        if (!this._isSliding) {
30190          this._slide(Direction.PREV);
30191        }
30192      };
30193
30194      _proto.pause = function pause(event) {
30195        if (!event) {
30196          this._isPaused = true;
30197        }
30198
30199        if (this._element.querySelector(Selector.NEXT_PREV)) {
30200          Util.triggerTransitionEnd(this._element);
30201          this.cycle(true);
30202        }
30203
30204        clearInterval(this._interval);
30205        this._interval = null;
30206      };
30207
30208      _proto.cycle = function cycle(event) {
30209        if (!event) {
30210          this._isPaused = false;
30211        }
30212
30213        if (this._interval) {
30214          clearInterval(this._interval);
30215          this._interval = null;
30216        }
30217
30218        if (this._config.interval && !this._isPaused) {
30219          this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
30220        }
30221      };
30222
30223      _proto.to = function to(index) {
30224        var _this = this;
30225
30226        this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);
30227
30228        var activeIndex = this._getItemIndex(this._activeElement);
30229
30230        if (index > this._items.length - 1 || index < 0) {
30231          return;
30232        }
30233
30234        if (this._isSliding) {
30235          $$$1(this._element).one(Event.SLID, function () {
30236            return _this.to(index);
30237          });
30238          return;
30239        }
30240
30241        if (activeIndex === index) {
30242          this.pause();
30243          this.cycle();
30244          return;
30245        }
30246
30247        var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
30248
30249        this._slide(direction, this._items[index]);
30250      };
30251
30252      _proto.dispose = function dispose() {
30253        $$$1(this._element).off(EVENT_KEY);
30254        $$$1.removeData(this._element, DATA_KEY);
30255        this._items = null;
30256        this._config = null;
30257        this._element = null;
30258        this._interval = null;
30259        this._isPaused = null;
30260        this._isSliding = null;
30261        this._activeElement = null;
30262        this._indicatorsElement = null;
30263      }; // Private
30264
30265
30266      _proto._getConfig = function _getConfig(config) {
30267        config = _objectSpread({}, Default, config);
30268        Util.typeCheckConfig(NAME, config, DefaultType);
30269        return config;
30270      };
30271
30272      _proto._addEventListeners = function _addEventListeners() {
30273        var _this2 = this;
30274
30275        if (this._config.keyboard) {
30276          $$$1(this._element).on(Event.KEYDOWN, function (event) {
30277            return _this2._keydown(event);
30278          });
30279        }
30280
30281        if (this._config.pause === 'hover') {
30282          $$$1(this._element).on(Event.MOUSEENTER, function (event) {
30283            return _this2.pause(event);
30284          }).on(Event.MOUSELEAVE, function (event) {
30285            return _this2.cycle(event);
30286          });
30287
30288          if ('ontouchstart' in document.documentElement) {
30289            // If it's a touch-enabled device, mouseenter/leave are fired as
30290            // part of the mouse compatibility events on first tap - the carousel
30291            // would stop cycling until user tapped out of it;
30292            // here, we listen for touchend, explicitly pause the carousel
30293            // (as if it's the second time we tap on it, mouseenter compat event
30294            // is NOT fired) and after a timeout (to allow for mouse compatibility
30295            // events to fire) we explicitly restart cycling
30296            $$$1(this._element).on(Event.TOUCHEND, function () {
30297              _this2.pause();
30298
30299              if (_this2.touchTimeout) {
30300                clearTimeout(_this2.touchTimeout);
30301              }
30302
30303              _this2.touchTimeout = setTimeout(function (event) {
30304                return _this2.cycle(event);
30305              }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);
30306            });
30307          }
30308        }
30309      };
30310
30311      _proto._keydown = function _keydown(event) {
30312        if (/input|textarea/i.test(event.target.tagName)) {
30313          return;
30314        }
30315
30316        switch (event.which) {
30317          case ARROW_LEFT_KEYCODE:
30318            event.preventDefault();
30319            this.prev();
30320            break;
30321
30322          case ARROW_RIGHT_KEYCODE:
30323            event.preventDefault();
30324            this.next();
30325            break;
30326
30327          default:
30328        }
30329      };
30330
30331      _proto._getItemIndex = function _getItemIndex(element) {
30332        this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];
30333        return this._items.indexOf(element);
30334      };
30335
30336      _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
30337        var isNextDirection = direction === Direction.NEXT;
30338        var isPrevDirection = direction === Direction.PREV;
30339
30340        var activeIndex = this._getItemIndex(activeElement);
30341
30342        var lastItemIndex = this._items.length - 1;
30343        var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
30344
30345        if (isGoingToWrap && !this._config.wrap) {
30346          return activeElement;
30347        }
30348
30349        var delta = direction === Direction.PREV ? -1 : 1;
30350        var itemIndex = (activeIndex + delta) % this._items.length;
30351        return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
30352      };
30353
30354      _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
30355        var targetIndex = this._getItemIndex(relatedTarget);
30356
30357        var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));
30358
30359        var slideEvent = $$$1.Event(Event.SLIDE, {
30360          relatedTarget: relatedTarget,
30361          direction: eventDirectionName,
30362          from: fromIndex,
30363          to: targetIndex
30364        });
30365        $$$1(this._element).trigger(slideEvent);
30366        return slideEvent;
30367      };
30368
30369      _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
30370        if (this._indicatorsElement) {
30371          var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));
30372          $$$1(indicators).removeClass(ClassName.ACTIVE);
30373
30374          var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
30375
30376          if (nextIndicator) {
30377            $$$1(nextIndicator).addClass(ClassName.ACTIVE);
30378          }
30379        }
30380      };
30381
30382      _proto._slide = function _slide(direction, element) {
30383        var _this3 = this;
30384
30385        var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);
30386
30387        var activeElementIndex = this._getItemIndex(activeElement);
30388
30389        var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
30390
30391        var nextElementIndex = this._getItemIndex(nextElement);
30392
30393        var isCycling = Boolean(this._interval);
30394        var directionalClassName;
30395        var orderClassName;
30396        var eventDirectionName;
30397
30398        if (direction === Direction.NEXT) {
30399          directionalClassName = ClassName.LEFT;
30400          orderClassName = ClassName.NEXT;
30401          eventDirectionName = Direction.LEFT;
30402        } else {
30403          directionalClassName = ClassName.RIGHT;
30404          orderClassName = ClassName.PREV;
30405          eventDirectionName = Direction.RIGHT;
30406        }
30407
30408        if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) {
30409          this._isSliding = false;
30410          return;
30411        }
30412
30413        var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
30414
30415        if (slideEvent.isDefaultPrevented()) {
30416          return;
30417        }
30418
30419        if (!activeElement || !nextElement) {
30420          // Some weirdness is happening, so we bail
30421          return;
30422        }
30423
30424        this._isSliding = true;
30425
30426        if (isCycling) {
30427          this.pause();
30428        }
30429
30430        this._setActiveIndicatorElement(nextElement);
30431
30432        var slidEvent = $$$1.Event(Event.SLID, {
30433          relatedTarget: nextElement,
30434          direction: eventDirectionName,
30435          from: activeElementIndex,
30436          to: nextElementIndex
30437        });
30438
30439        if ($$$1(this._element).hasClass(ClassName.SLIDE)) {
30440          $$$1(nextElement).addClass(orderClassName);
30441          Util.reflow(nextElement);
30442          $$$1(activeElement).addClass(directionalClassName);
30443          $$$1(nextElement).addClass(directionalClassName);
30444          var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
30445          $$$1(activeElement).one(Util.TRANSITION_END, function () {
30446            $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
30447            $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
30448            _this3._isSliding = false;
30449            setTimeout(function () {
30450              return $$$1(_this3._element).trigger(slidEvent);
30451            }, 0);
30452          }).emulateTransitionEnd(transitionDuration);
30453        } else {
30454          $$$1(activeElement).removeClass(ClassName.ACTIVE);
30455          $$$1(nextElement).addClass(ClassName.ACTIVE);
30456          this._isSliding = false;
30457          $$$1(this._element).trigger(slidEvent);
30458        }
30459
30460        if (isCycling) {
30461          this.cycle();
30462        }
30463      }; // Static
30464
30465
30466      Carousel._jQueryInterface = function _jQueryInterface(config) {
30467        return this.each(function () {
30468          var data = $$$1(this).data(DATA_KEY);
30469
30470          var _config = _objectSpread({}, Default, $$$1(this).data());
30471
30472          if (typeof config === 'object') {
30473            _config = _objectSpread({}, _config, config);
30474          }
30475
30476          var action = typeof config === 'string' ? config : _config.slide;
30477
30478          if (!data) {
30479            data = new Carousel(this, _config);
30480            $$$1(this).data(DATA_KEY, data);
30481          }
30482
30483          if (typeof config === 'number') {
30484            data.to(config);
30485          } else if (typeof action === 'string') {
30486            if (typeof data[action] === 'undefined') {
30487              throw new TypeError("No method named \"" + action + "\"");
30488            }
30489
30490            data[action]();
30491          } else if (_config.interval) {
30492            data.pause();
30493            data.cycle();
30494          }
30495        });
30496      };
30497
30498      Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
30499        var selector = Util.getSelectorFromElement(this);
30500
30501        if (!selector) {
30502          return;
30503        }
30504
30505        var target = $$$1(selector)[0];
30506
30507        if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) {
30508          return;
30509        }
30510
30511        var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());
30512
30513        var slideIndex = this.getAttribute('data-slide-to');
30514
30515        if (slideIndex) {
30516          config.interval = false;
30517        }
30518
30519        Carousel._jQueryInterface.call($$$1(target), config);
30520
30521        if (slideIndex) {
30522          $$$1(target).data(DATA_KEY).to(slideIndex);
30523        }
30524
30525        event.preventDefault();
30526      };
30527
30528      _createClass(Carousel, null, [{
30529        key: "VERSION",
30530        get: function get() {
30531          return VERSION;
30532        }
30533      }, {
30534        key: "Default",
30535        get: function get() {
30536          return Default;
30537        }
30538      }]);
30539
30540      return Carousel;
30541    }();
30542    /**
30543     * ------------------------------------------------------------------------
30544     * Data Api implementation
30545     * ------------------------------------------------------------------------
30546     */
30547
30548
30549    $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
30550    $$$1(window).on(Event.LOAD_DATA_API, function () {
30551      var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));
30552
30553      for (var i = 0, len = carousels.length; i < len; i++) {
30554        var $carousel = $$$1(carousels[i]);
30555
30556        Carousel._jQueryInterface.call($carousel, $carousel.data());
30557      }
30558    });
30559    /**
30560     * ------------------------------------------------------------------------
30561     * jQuery
30562     * ------------------------------------------------------------------------
30563     */
30564
30565    $$$1.fn[NAME] = Carousel._jQueryInterface;
30566    $$$1.fn[NAME].Constructor = Carousel;
30567
30568    $$$1.fn[NAME].noConflict = function () {
30569      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
30570      return Carousel._jQueryInterface;
30571    };
30572
30573    return Carousel;
30574  }($);
30575
30576  /**
30577   * --------------------------------------------------------------------------
30578   * Bootstrap (v4.1.3): collapse.js
30579   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
30580   * --------------------------------------------------------------------------
30581   */
30582
30583  var Collapse = function ($$$1) {
30584    /**
30585     * ------------------------------------------------------------------------
30586     * Constants
30587     * ------------------------------------------------------------------------
30588     */
30589    var NAME = 'collapse';
30590    var VERSION = '4.1.3';
30591    var DATA_KEY = 'bs.collapse';
30592    var EVENT_KEY = "." + DATA_KEY;
30593    var DATA_API_KEY = '.data-api';
30594    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
30595    var Default = {
30596      toggle: true,
30597      parent: ''
30598    };
30599    var DefaultType = {
30600      toggle: 'boolean',
30601      parent: '(string|element)'
30602    };
30603    var Event = {
30604      SHOW: "show" + EVENT_KEY,
30605      SHOWN: "shown" + EVENT_KEY,
30606      HIDE: "hide" + EVENT_KEY,
30607      HIDDEN: "hidden" + EVENT_KEY,
30608      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
30609    };
30610    var ClassName = {
30611      SHOW: 'show',
30612      COLLAPSE: 'collapse',
30613      COLLAPSING: 'collapsing',
30614      COLLAPSED: 'collapsed'
30615    };
30616    var Dimension = {
30617      WIDTH: 'width',
30618      HEIGHT: 'height'
30619    };
30620    var Selector = {
30621      ACTIVES: '.show, .collapsing',
30622      DATA_TOGGLE: '[data-toggle="collapse"]'
30623      /**
30624       * ------------------------------------------------------------------------
30625       * Class Definition
30626       * ------------------------------------------------------------------------
30627       */
30628
30629    };
30630
30631    var Collapse =
30632    /*#__PURE__*/
30633    function () {
30634      function Collapse(element, config) {
30635        this._isTransitioning = false;
30636        this._element = element;
30637        this._config = this._getConfig(config);
30638        this._triggerArray = $$$1.makeArray(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
30639        var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
30640
30641        for (var i = 0, len = toggleList.length; i < len; i++) {
30642          var elem = toggleList[i];
30643          var selector = Util.getSelectorFromElement(elem);
30644          var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
30645            return foundElem === element;
30646          });
30647
30648          if (selector !== null && filterElement.length > 0) {
30649            this._selector = selector;
30650
30651            this._triggerArray.push(elem);
30652          }
30653        }
30654
30655        this._parent = this._config.parent ? this._getParent() : null;
30656
30657        if (!this._config.parent) {
30658          this._addAriaAndCollapsedClass(this._element, this._triggerArray);
30659        }
30660
30661        if (this._config.toggle) {
30662          this.toggle();
30663        }
30664      } // Getters
30665
30666
30667      var _proto = Collapse.prototype;
30668
30669      // Public
30670      _proto.toggle = function toggle() {
30671        if ($$$1(this._element).hasClass(ClassName.SHOW)) {
30672          this.hide();
30673        } else {
30674          this.show();
30675        }
30676      };
30677
30678      _proto.show = function show() {
30679        var _this = this;
30680
30681        if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) {
30682          return;
30683        }
30684
30685        var actives;
30686        var activesData;
30687
30688        if (this._parent) {
30689          actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {
30690            return elem.getAttribute('data-parent') === _this._config.parent;
30691          });
30692
30693          if (actives.length === 0) {
30694            actives = null;
30695          }
30696        }
30697
30698        if (actives) {
30699          activesData = $$$1(actives).not(this._selector).data(DATA_KEY);
30700
30701          if (activesData && activesData._isTransitioning) {
30702            return;
30703          }
30704        }
30705
30706        var startEvent = $$$1.Event(Event.SHOW);
30707        $$$1(this._element).trigger(startEvent);
30708
30709        if (startEvent.isDefaultPrevented()) {
30710          return;
30711        }
30712
30713        if (actives) {
30714          Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');
30715
30716          if (!activesData) {
30717            $$$1(actives).data(DATA_KEY, null);
30718          }
30719        }
30720
30721        var dimension = this._getDimension();
30722
30723        $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
30724        this._element.style[dimension] = 0;
30725
30726        if (this._triggerArray.length) {
30727          $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
30728        }
30729
30730        this.setTransitioning(true);
30731
30732        var complete = function complete() {
30733          $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
30734          _this._element.style[dimension] = '';
30735
30736          _this.setTransitioning(false);
30737
30738          $$$1(_this._element).trigger(Event.SHOWN);
30739        };
30740
30741        var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
30742        var scrollSize = "scroll" + capitalizedDimension;
30743        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
30744        $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
30745        this._element.style[dimension] = this._element[scrollSize] + "px";
30746      };
30747
30748      _proto.hide = function hide() {
30749        var _this2 = this;
30750
30751        if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) {
30752          return;
30753        }
30754
30755        var startEvent = $$$1.Event(Event.HIDE);
30756        $$$1(this._element).trigger(startEvent);
30757
30758        if (startEvent.isDefaultPrevented()) {
30759          return;
30760        }
30761
30762        var dimension = this._getDimension();
30763
30764        this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
30765        Util.reflow(this._element);
30766        $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
30767        var triggerArrayLength = this._triggerArray.length;
30768
30769        if (triggerArrayLength > 0) {
30770          for (var i = 0; i < triggerArrayLength; i++) {
30771            var trigger = this._triggerArray[i];
30772            var selector = Util.getSelectorFromElement(trigger);
30773
30774            if (selector !== null) {
30775              var $elem = $$$1([].slice.call(document.querySelectorAll(selector)));
30776
30777              if (!$elem.hasClass(ClassName.SHOW)) {
30778                $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
30779              }
30780            }
30781          }
30782        }
30783
30784        this.setTransitioning(true);
30785
30786        var complete = function complete() {
30787          _this2.setTransitioning(false);
30788
30789          $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
30790        };
30791
30792        this._element.style[dimension] = '';
30793        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
30794        $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
30795      };
30796
30797      _proto.setTransitioning = function setTransitioning(isTransitioning) {
30798        this._isTransitioning = isTransitioning;
30799      };
30800
30801      _proto.dispose = function dispose() {
30802        $$$1.removeData(this._element, DATA_KEY);
30803        this._config = null;
30804        this._parent = null;
30805        this._element = null;
30806        this._triggerArray = null;
30807        this._isTransitioning = null;
30808      }; // Private
30809
30810
30811      _proto._getConfig = function _getConfig(config) {
30812        config = _objectSpread({}, Default, config);
30813        config.toggle = Boolean(config.toggle); // Coerce string values
30814
30815        Util.typeCheckConfig(NAME, config, DefaultType);
30816        return config;
30817      };
30818
30819      _proto._getDimension = function _getDimension() {
30820        var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH);
30821        return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
30822      };
30823
30824      _proto._getParent = function _getParent() {
30825        var _this3 = this;
30826
30827        var parent = null;
30828
30829        if (Util.isElement(this._config.parent)) {
30830          parent = this._config.parent; // It's a jQuery object
30831
30832          if (typeof this._config.parent.jquery !== 'undefined') {
30833            parent = this._config.parent[0];
30834          }
30835        } else {
30836          parent = document.querySelector(this._config.parent);
30837        }
30838
30839        var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
30840        var children = [].slice.call(parent.querySelectorAll(selector));
30841        $$$1(children).each(function (i, element) {
30842          _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
30843        });
30844        return parent;
30845      };
30846
30847      _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
30848        if (element) {
30849          var isOpen = $$$1(element).hasClass(ClassName.SHOW);
30850
30851          if (triggerArray.length) {
30852            $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
30853          }
30854        }
30855      }; // Static
30856
30857
30858      Collapse._getTargetFromElement = function _getTargetFromElement(element) {
30859        var selector = Util.getSelectorFromElement(element);
30860        return selector ? document.querySelector(selector) : null;
30861      };
30862
30863      Collapse._jQueryInterface = function _jQueryInterface(config) {
30864        return this.each(function () {
30865          var $this = $$$1(this);
30866          var data = $this.data(DATA_KEY);
30867
30868          var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});
30869
30870          if (!data && _config.toggle && /show|hide/.test(config)) {
30871            _config.toggle = false;
30872          }
30873
30874          if (!data) {
30875            data = new Collapse(this, _config);
30876            $this.data(DATA_KEY, data);
30877          }
30878
30879          if (typeof config === 'string') {
30880            if (typeof data[config] === 'undefined') {
30881              throw new TypeError("No method named \"" + config + "\"");
30882            }
30883
30884            data[config]();
30885          }
30886        });
30887      };
30888
30889      _createClass(Collapse, null, [{
30890        key: "VERSION",
30891        get: function get() {
30892          return VERSION;
30893        }
30894      }, {
30895        key: "Default",
30896        get: function get() {
30897          return Default;
30898        }
30899      }]);
30900
30901      return Collapse;
30902    }();
30903    /**
30904     * ------------------------------------------------------------------------
30905     * Data Api implementation
30906     * ------------------------------------------------------------------------
30907     */
30908
30909
30910    $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
30911      // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
30912      if (event.currentTarget.tagName === 'A') {
30913        event.preventDefault();
30914      }
30915
30916      var $trigger = $$$1(this);
30917      var selector = Util.getSelectorFromElement(this);
30918      var selectors = [].slice.call(document.querySelectorAll(selector));
30919      $$$1(selectors).each(function () {
30920        var $target = $$$1(this);
30921        var data = $target.data(DATA_KEY);
30922        var config = data ? 'toggle' : $trigger.data();
30923
30924        Collapse._jQueryInterface.call($target, config);
30925      });
30926    });
30927    /**
30928     * ------------------------------------------------------------------------
30929     * jQuery
30930     * ------------------------------------------------------------------------
30931     */
30932
30933    $$$1.fn[NAME] = Collapse._jQueryInterface;
30934    $$$1.fn[NAME].Constructor = Collapse;
30935
30936    $$$1.fn[NAME].noConflict = function () {
30937      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
30938      return Collapse._jQueryInterface;
30939    };
30940
30941    return Collapse;
30942  }($);
30943
30944  /**!
30945   * @fileOverview Kickass library to create and place poppers near their reference elements.
30946   * @version 1.14.3
30947   * @license
30948   * Copyright (c) 2016 Federico Zivolo and contributors
30949   *
30950   * Permission is hereby granted, free of charge, to any person obtaining a copy
30951   * of this software and associated documentation files (the "Software"), to deal
30952   * in the Software without restriction, including without limitation the rights
30953   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
30954   * copies of the Software, and to permit persons to whom the Software is
30955   * furnished to do so, subject to the following conditions:
30956   *
30957   * The above copyright notice and this permission notice shall be included in all
30958   * copies or substantial portions of the Software.
30959   *
30960   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30961   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30962   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30963   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30964   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30965   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30966   * SOFTWARE.
30967   */
30968  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
30969
30970  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
30971  var timeoutDuration = 0;
30972  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
30973    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
30974      timeoutDuration = 1;
30975      break;
30976    }
30977  }
30978
30979  function microtaskDebounce(fn) {
30980    var called = false;
30981    return function () {
30982      if (called) {
30983        return;
30984      }
30985      called = true;
30986      window.Promise.resolve().then(function () {
30987        called = false;
30988        fn();
30989      });
30990    };
30991  }
30992
30993  function taskDebounce(fn) {
30994    var scheduled = false;
30995    return function () {
30996      if (!scheduled) {
30997        scheduled = true;
30998        setTimeout(function () {
30999          scheduled = false;
vendor: 15,456 bytes, lines 31000-31482
31000          fn();
31001        }, timeoutDuration);
31002      }
31003    };
31004  }
31005
31006  var supportsMicroTasks = isBrowser && window.Promise;
31007
31008  /**
31009  * Create a debounced version of a method, that's asynchronously deferred
31010  * but called in the minimum time possible.
31011  *
31012  * @method
31013  * @memberof Popper.Utils
31014  * @argument {Function} fn
31015  * @returns {Function}
31016  */
31017  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
31018
31019  /**
31020   * Check if the given variable is a function
31021   * @method
31022   * @memberof Popper.Utils
31023   * @argument {Any} functionToCheck - variable to check
31024   * @returns {Boolean} answer to: is a function?
31025   */
31026  function isFunction(functionToCheck) {
31027    var getType = {};
31028    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
31029  }
31030
31031  /**
31032   * Get CSS computed property of the given element
31033   * @method
31034   * @memberof Popper.Utils
31035   * @argument {Eement} element
31036   * @argument {String} property
31037   */
31038  function getStyleComputedProperty(element, property) {
31039    if (element.nodeType !== 1) {
31040      return [];
31041    }
31042    // NOTE: 1 DOM access here
31043    var css = getComputedStyle(element, null);
31044    return property ? css[property] : css;
31045  }
31046
31047  /**
31048   * Returns the parentNode or the host of the element
31049   * @method
31050   * @memberof Popper.Utils
31051   * @argument {Element} element
31052   * @returns {Element} parent
31053   */
31054  function getParentNode(element) {
31055    if (element.nodeName === 'HTML') {
31056      return element;
31057    }
31058    return element.parentNode || element.host;
31059  }
31060
31061  /**
31062   * Returns the scrolling parent of the given element
31063   * @method
31064   * @memberof Popper.Utils
31065   * @argument {Element} element
31066   * @returns {Element} scroll parent
31067   */
31068  function getScrollParent(element) {
31069    // Return body, `getScroll` will take care to get the correct `scrollTop` from it
31070    if (!element) {
31071      return document.body;
31072    }
31073
31074    switch (element.nodeName) {
31075      case 'HTML':
31076      case 'BODY':
31077        return element.ownerDocument.body;
31078      case '#document':
31079        return element.body;
31080    }
31081
31082    // Firefox want us to check `-x` and `-y` variations as well
31083
31084    var _getStyleComputedProp = getStyleComputedProperty(element),
31085        overflow = _getStyleComputedProp.overflow,
31086        overflowX = _getStyleComputedProp.overflowX,
31087        overflowY = _getStyleComputedProp.overflowY;
31088
31089    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
31090      return element;
31091    }
31092
31093    return getScrollParent(getParentNode(element));
31094  }
31095
31096  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
31097  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
31098
31099  /**
31100   * Determines if the browser is Internet Explorer
31101   * @method
31102   * @memberof Popper.Utils
31103   * @param {Number} version to check
31104   * @returns {Boolean} isIE
31105   */
31106  function isIE(version) {
31107    if (version === 11) {
31108      return isIE11;
31109    }
31110    if (version === 10) {
31111      return isIE10;
31112    }
31113    return isIE11 || isIE10;
31114  }
31115
31116  /**
31117   * Returns the offset parent of the given element
31118   * @method
31119   * @memberof Popper.Utils
31120   * @argument {Element} element
31121   * @returns {Element} offset parent
31122   */
31123  function getOffsetParent(element) {
31124    if (!element) {
31125      return document.documentElement;
31126    }
31127
31128    var noOffsetParent = isIE(10) ? document.body : null;
31129
31130    // NOTE: 1 DOM access here
31131    var offsetParent = element.offsetParent;
31132    // Skip hidden elements which don't have an offsetParent
31133    while (offsetParent === noOffsetParent && element.nextElementSibling) {
31134      offsetParent = (element = element.nextElementSibling).offsetParent;
31135    }
31136
31137    var nodeName = offsetParent && offsetParent.nodeName;
31138
31139    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
31140      return element ? element.ownerDocument.documentElement : document.documentElement;
31141    }
31142
31143    // .offsetParent will return the closest TD or TABLE in case
31144    // no offsetParent is present, I hate this job...
31145    if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
31146      return getOffsetParent(offsetParent);
31147    }
31148
31149    return offsetParent;
31150  }
31151
31152  function isOffsetContainer(element) {
31153    var nodeName = element.nodeName;
31154
31155    if (nodeName === 'BODY') {
31156      return false;
31157    }
31158    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
31159  }
31160
31161  /**
31162   * Finds the root node (document, shadowDOM root) of the given element
31163   * @method
31164   * @memberof Popper.Utils
31165   * @argument {Element} node
31166   * @returns {Element} root node
31167   */
31168  function getRoot(node) {
31169    if (node.parentNode !== null) {
31170      return getRoot(node.parentNode);
31171    }
31172
31173    return node;
31174  }
31175
31176  /**
31177   * Finds the offset parent common to the two provided nodes
31178   * @method
31179   * @memberof Popper.Utils
31180   * @argument {Element} element1
31181   * @argument {Element} element2
31182   * @returns {Element} common offset parent
31183   */
31184  function findCommonOffsetParent(element1, element2) {
31185    // This check is needed to avoid errors in case one of the elements isn't defined for any reason
31186    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
31187      return document.documentElement;
31188    }
31189
31190    // Here we make sure to give as "start" the element that comes first in the DOM
31191    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
31192    var start = order ? element1 : element2;
31193    var end = order ? element2 : element1;
31194
31195    // Get common ancestor container
31196    var range = document.createRange();
31197    range.setStart(start, 0);
31198    range.setEnd(end, 0);
31199    var commonAncestorContainer = range.commonAncestorContainer;
31200
31201    // Both nodes are inside #document
31202
31203    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
31204      if (isOffsetContainer(commonAncestorContainer)) {
31205        return commonAncestorContainer;
31206      }
31207
31208      return getOffsetParent(commonAncestorContainer);
31209    }
31210
31211    // one of the nodes is inside shadowDOM, find which one
31212    var element1root = getRoot(element1);
31213    if (element1root.host) {
31214      return findCommonOffsetParent(element1root.host, element2);
31215    } else {
31216      return findCommonOffsetParent(element1, getRoot(element2).host);
31217    }
31218  }
31219
31220  /**
31221   * Gets the scroll value of the given element in the given side (top and left)
31222   * @method
31223   * @memberof Popper.Utils
31224   * @argument {Element} element
31225   * @argument {String} side `top` or `left`
31226   * @returns {number} amount of scrolled pixels
31227   */
31228  function getScroll(element) {
31229    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
31230
31231    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
31232    var nodeName = element.nodeName;
31233
31234    if (nodeName === 'BODY' || nodeName === 'HTML') {
31235      var html = element.ownerDocument.documentElement;
31236      var scrollingElement = element.ownerDocument.scrollingElement || html;
31237      return scrollingElement[upperSide];
31238    }
31239
31240    return element[upperSide];
31241  }
31242
31243  /*
31244   * Sum or subtract the element scroll values (left and top) from a given rect object
31245   * @method
31246   * @memberof Popper.Utils
31247   * @param {Object} rect - Rect object you want to change
31248   * @param {HTMLElement} element - The element from the function reads the scroll values
31249   * @param {Boolean} subtract - set to true if you want to subtract the scroll values
31250   * @return {Object} rect - The modifier rect object
31251   */
31252  function includeScroll(rect, element) {
31253    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
31254
31255    var scrollTop = getScroll(element, 'top');
31256    var scrollLeft = getScroll(element, 'left');
31257    var modifier = subtract ? -1 : 1;
31258    rect.top += scrollTop * modifier;
31259    rect.bottom += scrollTop * modifier;
31260    rect.left += scrollLeft * modifier;
31261    rect.right += scrollLeft * modifier;
31262    return rect;
31263  }
31264
31265  /*
31266   * Helper to detect borders of a given element
31267   * @method
31268   * @memberof Popper.Utils
31269   * @param {CSSStyleDeclaration} styles
31270   * Result of `getStyleComputedProperty` on the given element
31271   * @param {String} axis - `x` or `y`
31272   * @return {number} borders - The borders size of the given axis
31273   */
31274
31275  function getBordersSize(styles, axis) {
31276    var sideA = axis === 'x' ? 'Left' : 'Top';
31277    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
31278
31279    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
31280  }
31281
31282  function getSize(axis, body, html, computedStyle) {
31283    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
31284  }
31285
31286  function getWindowSizes() {
31287    var body = document.body;
31288    var html = document.documentElement;
31289    var computedStyle = isIE(10) && getComputedStyle(html);
31290
31291    return {
31292      height: getSize('Height', body, html, computedStyle),
31293      width: getSize('Width', body, html, computedStyle)
31294    };
31295  }
31296
31297  var classCallCheck = function (instance, Constructor) {
31298    if (!(instance instanceof Constructor)) {
31299      throw new TypeError("Cannot call a class as a function");
31300    }
31301  };
31302
31303  var createClass = function () {
31304    function defineProperties(target, props) {
31305      for (var i = 0; i < props.length; i++) {
31306        var descriptor = props[i];
31307        descriptor.enumerable = descriptor.enumerable || false;
31308        descriptor.configurable = true;
31309        if ("value" in descriptor) descriptor.writable = true;
31310        Object.defineProperty(target, descriptor.key, descriptor);
31311      }
31312    }
31313
31314    return function (Constructor, protoProps, staticProps) {
31315      if (protoProps) defineProperties(Constructor.prototype, protoProps);
31316      if (staticProps) defineProperties(Constructor, staticProps);
31317      return Constructor;
31318    };
31319  }();
31320
31321
31322
31323
31324
31325  var defineProperty = function (obj, key, value) {
31326    if (key in obj) {
31327      Object.defineProperty(obj, key, {
31328        value: value,
31329        enumerable: true,
31330        configurable: true,
31331        writable: true
31332      });
31333    } else {
31334      obj[key] = value;
31335    }
31336
31337    return obj;
31338  };
31339
31340  var _extends = Object.assign || function (target) {
31341    for (var i = 1; i < arguments.length; i++) {
31342      var source = arguments[i];
31343
31344      for (var key in source) {
31345        if (Object.prototype.hasOwnProperty.call(source, key)) {
31346          target[key] = source[key];
31347        }
31348      }
31349    }
31350
31351    return target;
31352  };
31353
31354  /**
31355   * Given element offsets, generate an output similar to getBoundingClientRect
31356   * @method
31357   * @memberof Popper.Utils
31358   * @argument {Object} offsets
31359   * @returns {Object} ClientRect like output
31360   */
31361  function getClientRect(offsets) {
31362    return _extends({}, offsets, {
31363      right: offsets.left + offsets.width,
31364      bottom: offsets.top + offsets.height
31365    });
31366  }
31367
31368  /**
31369   * Get bounding client rect of given element
31370   * @method
31371   * @memberof Popper.Utils
31372   * @param {HTMLElement} element
31373   * @return {Object} client rect
31374   */
31375  function getBoundingClientRect(element) {
31376    var rect = {};
31377
31378    // IE10 10 FIX: Please, don't ask, the element isn't
31379    // considered in DOM in some circumstances...
31380    // This isn't reproducible in IE10 compatibility mode of IE11
31381    try {
31382      if (isIE(10)) {
31383        rect = element.getBoundingClientRect();
31384        var scrollTop = getScroll(element, 'top');
31385        var scrollLeft = getScroll(element, 'left');
31386        rect.top += scrollTop;
31387        rect.left += scrollLeft;
31388        rect.bottom += scrollTop;
31389        rect.right += scrollLeft;
31390      } else {
31391        rect = element.getBoundingClientRect();
31392      }
31393    } catch (e) {}
31394
31395    var result = {
31396      left: rect.left,
31397      top: rect.top,
31398      width: rect.right - rect.left,
31399      height: rect.bottom - rect.top
31400    };
31401
31402    // subtract scrollbar size from sizes
31403    var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};
31404    var width = sizes.width || element.clientWidth || result.right - result.left;
31405    var height = sizes.height || element.clientHeight || result.bottom - result.top;
31406
31407    var horizScrollbar = element.offsetWidth - width;
31408    var vertScrollbar = element.offsetHeight - height;
31409
31410    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
31411    // we make this check conditional for performance reasons
31412    if (horizScrollbar || vertScrollbar) {
31413      var styles = getStyleComputedProperty(element);
31414      horizScrollbar -= getBordersSize(styles, 'x');
31415      vertScrollbar -= getBordersSize(styles, 'y');
31416
31417      result.width -= horizScrollbar;
31418      result.height -= vertScrollbar;
31419    }
31420
31421    return getClientRect(result);
31422  }
31423
31424  function getOffsetRectRelativeToArbitraryNode(children, parent) {
31425    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
31426
31427    var isIE10 = isIE(10);
31428    var isHTML = parent.nodeName === 'HTML';
31429    var childrenRect = getBoundingClientRect(children);
31430    var parentRect = getBoundingClientRect(parent);
31431    var scrollParent = getScrollParent(children);
31432
31433    var styles = getStyleComputedProperty(parent);
31434    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
31435    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
31436
31437    // In cases where the parent is fixed, we must ignore negative scroll in offset calc
31438    if (fixedPosition && parent.nodeName === 'HTML') {
31439      parentRect.top = Math.max(parentRect.top, 0);
31440      parentRect.left = Math.max(parentRect.left, 0);
31441    }
31442    var offsets = getClientRect({
31443      top: childrenRect.top - parentRect.top - borderTopWidth,
31444      left: childrenRect.left - parentRect.left - borderLeftWidth,
31445      width: childrenRect.width,
31446      height: childrenRect.height
31447    });
31448    offsets.marginTop = 0;
31449    offsets.marginLeft = 0;
31450
31451    // Subtract margins of documentElement in case it's being used as parent
31452    // we do this only on HTML because it's the only element that behaves
31453    // differently when margins are applied to it. The margins are included in
31454    // the box of the documentElement, in the other cases not.
31455    if (!isIE10 && isHTML) {
31456      var marginTop = parseFloat(styles.marginTop, 10);
31457      var marginLeft = parseFloat(styles.marginLeft, 10);
31458
31459      offsets.top -= borderTopWidth - marginTop;
31460      offsets.bottom -= borderTopWidth - marginTop;
31461      offsets.left -= borderLeftWidth - marginLeft;
31462      offsets.right -= borderLeftWidth - marginLeft;
31463
31464      // Attach marginTop and marginLeft because in some circumstances we may need them
31465      offsets.marginTop = marginTop;
31466      offsets.marginLeft = marginLeft;
31467    }
31468
31469    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
31470      offsets = includeScroll(offsets, parent);
31471    }
31472
31473    return offsets;
31474  }
31475
31476  function getViewportOffsetRectRelativeToArtbitraryNode(element) {
31477    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
31478
31479    var html = element.ownerDocument.documentElement;
31480    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
31481    var width = Math.max(html.clientWidth, window.innerWidth || 0);
31482    var height = Math.max(html.clientHeight, window.innerHeight || 0
vendor: 6,240 bytes, lines 31482-31674
31482);
31483
31484    var scrollTop = !excludeScroll ? getScroll(html) : 0;
31485    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
31486
31487    var offset = {
31488      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
31489      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
31490      width: width,
31491      height: height
31492    };
31493
31494    return getClientRect(offset);
31495  }
31496
31497  /**
31498   * Check if the given element is fixed or is inside a fixed parent
31499   * @method
31500   * @memberof Popper.Utils
31501   * @argument {Element} element
31502   * @argument {Element} customContainer
31503   * @returns {Boolean} answer to "isFixed?"
31504   */
31505  function isFixed(element) {
31506    var nodeName = element.nodeName;
31507    if (nodeName === 'BODY' || nodeName === 'HTML') {
31508      return false;
31509    }
31510    if (getStyleComputedProperty(element, 'position') === 'fixed') {
31511      return true;
31512    }
31513    return isFixed(getParentNode(element));
31514  }
31515
31516  /**
31517   * Finds the first parent of an element that has a transformed property defined
31518   * @method
31519   * @memberof Popper.Utils
31520   * @argument {Element} element
31521   * @returns {Element} first transformed parent or documentElement
31522   */
31523
31524  function getFixedPositionOffsetParent(element) {
31525    // This check is needed to avoid errors in case one of the elements isn't defined for any reason
31526    if (!element || !element.parentElement || isIE()) {
31527      return document.documentElement;
31528    }
31529    var el = element.parentElement;
31530    while (el && getStyleComputedProperty(el, 'transform') === 'none') {
31531      el = el.parentElement;
31532    }
31533    return el || document.documentElement;
31534  }
31535
31536  /**
31537   * Computed the boundaries limits and return them
31538   * @method
31539   * @memberof Popper.Utils
31540   * @param {HTMLElement} popper
31541   * @param {HTMLElement} reference
31542   * @param {number} padding
31543   * @param {HTMLElement} boundariesElement - Element used to define the boundaries
31544   * @param {Boolean} fixedPosition - Is in fixed position mode
31545   * @returns {Object} Coordinates of the boundaries
31546   */
31547  function getBoundaries(popper, reference, padding, boundariesElement) {
31548    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
31549
31550    // NOTE: 1 DOM access here
31551
31552    var boundaries = { top: 0, left: 0 };
31553    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
31554
31555    // Handle viewport case
31556    if (boundariesElement === 'viewport') {
31557      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
31558    } else {
31559      // Handle other cases based on DOM element used as boundaries
31560      var boundariesNode = void 0;
31561      if (boundariesElement === 'scrollParent') {
31562        boundariesNode = getScrollParent(getParentNode(reference));
31563        if (boundariesNode.nodeName === 'BODY') {
31564          boundariesNode = popper.ownerDocument.documentElement;
31565        }
31566      } else if (boundariesElement === 'window') {
31567        boundariesNode = popper.ownerDocument.documentElement;
31568      } else {
31569        boundariesNode = boundariesElement;
31570      }
31571
31572      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
31573
31574      // In case of HTML, we need a different computation
31575      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
31576        var _getWindowSizes = getWindowSizes(),
31577            height = _getWindowSizes.height,
31578            width = _getWindowSizes.width;
31579
31580        boundaries.top += offsets.top - offsets.marginTop;
31581        boundaries.bottom = height + offsets.top;
31582        boundaries.left += offsets.left - offsets.marginLeft;
31583        boundaries.right = width + offsets.left;
31584      } else {
31585        // for all the other DOM elements, this one is good
31586        boundaries = offsets;
31587      }
31588    }
31589
31590    // Add paddings
31591    boundaries.left += padding;
31592    boundaries.top += padding;
31593    boundaries.right -= padding;
31594    boundaries.bottom -= padding;
31595
31596    return boundaries;
31597  }
31598
31599  function getArea(_ref) {
31600    var width = _ref.width,
31601        height = _ref.height;
31602
31603    return width * height;
31604  }
31605
31606  /**
31607   * Utility used to transform the `auto` placement to the placement with more
31608   * available space.
31609   * @method
31610   * @memberof Popper.Utils
31611   * @argument {Object} data - The data object generated by update method
31612   * @argument {Object} options - Modifiers configuration and options
31613   * @returns {Object} The data object, properly modified
31614   */
31615  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
31616    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
31617
31618    if (placement.indexOf('auto') === -1) {
31619      return placement;
31620    }
31621
31622    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
31623
31624    var rects = {
31625      top: {
31626        width: boundaries.width,
31627        height: refRect.top - boundaries.top
31628      },
31629      right: {
31630        width: boundaries.right - refRect.right,
31631        height: boundaries.height
31632      },
31633      bottom: {
31634        width: boundaries.width,
31635        height: boundaries.bottom - refRect.bottom
31636      },
31637      left: {
31638        width: refRect.left - boundaries.left,
31639        height: boundaries.height
31640      }
31641    };
31642
31643    var sortedAreas = Object.keys(rects).map(function (key) {
31644      return _extends({
31645        key: key
31646      }, rects[key], {
31647        area: getArea(rects[key])
31648      });
31649    }).sort(function (a, b) {
31650      return b.area - a.area;
31651    });
31652
31653    var filteredAreas = sortedAreas.filter(function (_ref2) {
31654      var width = _ref2.width,
31655          height = _ref2.height;
31656      return width >= popper.clientWidth && height >= popper.clientHeight;
31657    });
31658
31659    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
31660
31661    var variation = placement.split('-')[1];
31662
31663    return computedPlacement + (variation ? '-' + variation : '');
31664  }
31665
31666  /**
31667   * Get offsets to the reference element
31668   * @method
31669   * @memberof Popper.Utils
31670   * @param {Object} state
31671   * @param {Element} popper - the popper element
31672   * @param {Element} reference - the reference element (the popper will be relative to this)
31673   * @param {Element} fixedPosition - is in fixed position mode
31674   * @returns {Object}
vendor: 4,557 bytes, lines 31674-31809
31674 An object containing the offsets which will be applied to the popper
31675   */
31676  function getReferenceOffsets(state, popper, reference) {
31677    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
31678
31679    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
31680    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
31681  }
31682
31683  /**
31684   * Get the outer sizes of the given element (offset size + margins)
31685   * @method
31686   * @memberof Popper.Utils
31687   * @argument {Element} element
31688   * @returns {Object} object containing width and height properties
31689   */
31690  function getOuterSizes(element) {
31691    var styles = getComputedStyle(element);
31692    var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
31693    var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
31694    var result = {
31695      width: element.offsetWidth + y,
31696      height: element.offsetHeight + x
31697    };
31698    return result;
31699  }
31700
31701  /**
31702   * Get the opposite placement of the given one
31703   * @method
31704   * @memberof Popper.Utils
31705   * @argument {String} placement
31706   * @returns {String} flipped placement
31707   */
31708  function getOppositePlacement(placement) {
31709    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
31710    return placement.replace(/left|right|bottom|top/g, function (matched) {
31711      return hash[matched];
31712    });
31713  }
31714
31715  /**
31716   * Get offsets to the popper
31717   * @method
31718   * @memberof Popper.Utils
31719   * @param {Object} position - CSS position the Popper will get applied
31720   * @param {HTMLElement} popper - the popper element
31721   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
31722   * @param {String} placement - one of the valid placement options
31723   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
31724   */
31725  function getPopperOffsets(popper, referenceOffsets, placement) {
31726    placement = placement.split('-')[0];
31727
31728    // Get popper node sizes
31729    var popperRect = getOuterSizes(popper);
31730
31731    // Add position, width and height to our offsets object
31732    var popperOffsets = {
31733      width: popperRect.width,
31734      height: popperRect.height
31735    };
31736
31737    // depending by the popper placement we have to compute its offsets slightly differently
31738    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
31739    var mainSide = isHoriz ? 'top' : 'left';
31740    var secondarySide = isHoriz ? 'left' : 'top';
31741    var measurement = isHoriz ? 'height' : 'width';
31742    var secondaryMeasurement = !isHoriz ? 'height' : 'width';
31743
31744    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
31745    if (placement === secondarySide) {
31746      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
31747    } else {
31748      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
31749    }
31750
31751    return popperOffsets;
31752  }
31753
31754  /**
31755   * Mimics the `find` method of Array
31756   * @method
31757   * @memberof Popper.Utils
31758   * @argument {Array} arr
31759   * @argument prop
31760   * @argument value
31761   * @returns index or -1
31762   */
31763  function find(arr, check) {
31764    // use native find if supported
31765    if (Array.prototype.find) {
31766      return arr.find(check);
31767    }
31768
31769    // use `filter` to obtain the same behavior of `find`
31770    return arr.filter(check)[0];
31771  }
31772
31773  /**
31774   * Return the index of the matching object
31775   * @method
31776   * @memberof Popper.Utils
31777   * @argument {Array} arr
31778   * @argument prop
31779   * @argument value
31780   * @returns index or -1
31781   */
31782  function findIndex(arr, prop, value) {
31783    // use native findIndex if supported
31784    if (Array.prototype.findIndex) {
31785      return arr.findIndex(function (cur) {
31786        return cur[prop] === value;
31787      });
31788    }
31789
31790    // use `find` + `indexOf` if `findIndex` isn't supported
31791    var match = find(arr, function (obj) {
31792      return obj[prop] === value;
31793    });
31794    return arr.indexOf(match);
31795  }
31796
31797  /**
31798   * Loop trough the list of modifiers and run them in order,
31799   * each of them will then edit the data object.
31800   * @method
31801   * @memberof Popper.Utils
31802   * @param {dataObject} data
31803   * @param {Array} modifiers
31804   * @param {String} ends - Optional modifier name used as stopper
31805   * @returns {dataObject}
31806   */
31807  function runModifiers(modifiers, data, ends) {
31808    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
31809
vendor: 7,019 bytes, lines 31810-32026
31810    modifiersToRun.forEach(function (modifier) {
31811      if (modifier['function']) {
31812        // eslint-disable-line dot-notation
31813        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
31814      }
31815      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
31816      if (modifier.enabled && isFunction(fn)) {
31817        // Add properties to offsets to make them a complete clientRect object
31818        // we do this before each modifier to make sure the previous one doesn't
31819        // mess with these values
31820        data.offsets.popper = getClientRect(data.offsets.popper);
31821        data.offsets.reference = getClientRect(data.offsets.reference);
31822
31823        data = fn(data, modifier);
31824      }
31825    });
31826
31827    return data;
31828  }
31829
31830  /**
31831   * Updates the position of the popper, computing the new offsets and applying
31832   * the new style.<br />
31833   * Prefer `scheduleUpdate` over `update` because of performance reasons.
31834   * @method
31835   * @memberof Popper
31836   */
31837  function update() {
31838    // if popper is destroyed, don't perform any further update
31839    if (this.state.isDestroyed) {
31840      return;
31841    }
31842
31843    var data = {
31844      instance: this,
31845      styles: {},
31846      arrowStyles: {},
31847      attributes: {},
31848      flipped: false,
31849      offsets: {}
31850    };
31851
31852    // compute reference element offsets
31853    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
31854
31855    // compute auto placement, store placement inside the data object,
31856    // modifiers will be able to edit `placement` if needed
31857    // and refer to originalPlacement to know the original value
31858    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
31859
31860    // store the computed placement inside `originalPlacement`
31861    data.originalPlacement = data.placement;
31862
31863    data.positionFixed = this.options.positionFixed;
31864
31865    // compute the popper offsets
31866    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
31867
31868    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
31869
31870    // run the modifiers
31871    data = runModifiers(this.modifiers, data);
31872
31873    // the first `update` will call `onCreate` callback
31874    // the other ones will call `onUpdate` callback
31875    if (!this.state.isCreated) {
31876      this.state.isCreated = true;
31877      this.options.onCreate(data);
31878    } else {
31879      this.options.onUpdate(data);
31880    }
31881  }
31882
31883  /**
31884   * Helper used to know if the given modifier is enabled.
31885   * @method
31886   * @memberof Popper.Utils
31887   * @returns {Boolean}
31888   */
31889  function isModifierEnabled(modifiers, modifierName) {
31890    return modifiers.some(function (_ref) {
31891      var name = _ref.name,
31892          enabled = _ref.enabled;
31893      return enabled && name === modifierName;
31894    });
31895  }
31896
31897  /**
31898   * Get the prefixed supported property name
31899   * @method
31900   * @memberof Popper.Utils
31901   * @argument {String} property (camelCase)
31902   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
31903   */
31904  function getSupportedPropertyName(property) {
31905    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
31906    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
31907
31908    for (var i = 0; i < prefixes.length; i++) {
31909      var prefix = prefixes[i];
31910      var toCheck = prefix ? '' + prefix + upperProp : property;
31911      if (typeof document.body.style[toCheck] !== 'undefined') {
31912        return toCheck;
31913      }
31914    }
31915    return null;
31916  }
31917
31918  /**
31919   * Destroy the popper
31920   * @method
31921   * @memberof Popper
31922   */
31923  function destroy() {
31924    this.state.isDestroyed = true;
31925
31926    // touch DOM only if `applyStyle` modifier is enabled
31927    if (isModifierEnabled(this.modifiers, 'applyStyle')) {
31928      this.popper.removeAttribute('x-placement');
31929      this.popper.style.position = '';
31930      this.popper.style.top = '';
31931      this.popper.style.left = '';
31932      this.popper.style.right = '';
31933      this.popper.style.bottom = '';
31934      this.popper.style.willChange = '';
31935      this.popper.style[getSupportedPropertyName('transform')] = '';
31936    }
31937
31938    this.disableEventListeners();
31939
31940    // remove the popper if user explicity asked for the deletion on destroy
31941    // do not use `remove` because IE11 doesn't support it
31942    if (this.options.removeOnDestroy) {
31943      this.popper.parentNode.removeChild(this.popper);
31944    }
31945    return this;
31946  }
31947
31948  /**
31949   * Get the window associated with the element
31950   * @argument {Element} element
31951   * @returns {Window}
31952   */
31953  function getWindow(element) {
31954    var ownerDocument = element.ownerDocument;
31955    return ownerDocument ? ownerDocument.defaultView : window;
31956  }
31957
31958  function attachToScrollParents(scrollParent, event, callback, scrollParents) {
31959    var isBody = scrollParent.nodeName === 'BODY';
31960    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
31961    target.addEventListener(event, callback, { passive: true });
31962
31963    if (!isBody) {
31964      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
31965    }
31966    scrollParents.push(target);
31967  }
31968
31969  /**
31970   * Setup needed event listeners used to update the popper position
31971   * @method
31972   * @memberof Popper.Utils
31973   * @private
31974   */
31975  function setupEventListeners(reference, options, state, updateBound) {
31976    // Resize event listener on window
31977    state.updateBound = updateBound;
31978    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
31979
31980    // Scroll event listener on scroll parents
31981    var scrollElement = getScrollParent(reference);
31982    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
31983    state.scrollElement = scrollElement;
31984    state.eventsEnabled = true;
31985
31986    return state;
31987  }
31988
31989  /**
31990   * It will add resize/scroll events and start recalculating
31991   * position of the popper element when they are triggered.
31992   * @method
31993   * @memberof Popper
31994   */
31995  function enableEventListeners() {
31996    if (!this.state.eventsEnabled) {
31997      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
31998    }
31999  }
32000
32001  /**
32002   * Remove event listeners used to update the popper position
32003   * @method
32004   * @memberof Popper.Utils
32005   * @private
32006   */
32007  function removeEventListeners(reference, state) {
32008    // Remove resize event listener on window
32009    getWindow(reference).removeEventListener('resize', state.updateBound);
32010
32011    // Remove scroll event listener on scroll parents
32012    state.scrollParents.forEach(function (target) {
32013      target.removeEventListener('scroll', state.updateBound);
32014    });
32015
32016    // Reset state
32017    state.updateBound = null;
32018    state.scrollParents = [];
32019    state.scrollElement = null;
32020    state.eventsEnabled = false;
32021    return state;
32022  }
32023
32024  /**
32025   * It will remove resize/scroll events and won't recalculate popper position
32026   * when they are triggered. It also won't trigger onUpdate
vendor: 4,379 bytes, lines 32026-32145
32026 callback anymore,
32027   * unless you call `update` method manually.
32028   * @method
32029   * @memberof Popper
32030   */
32031  function disableEventListeners() {
32032    if (this.state.eventsEnabled) {
32033      cancelAnimationFrame(this.scheduleUpdate);
32034      this.state = removeEventListeners(this.reference, this.state);
32035    }
32036  }
32037
32038  /**
32039   * Tells if a given input is a number
32040   * @method
32041   * @memberof Popper.Utils
32042   * @param {*} input to check
32043   * @return {Boolean}
32044   */
32045  function isNumeric(n) {
32046    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
32047  }
32048
32049  /**
32050   * Set the style to the given popper
32051   * @method
32052   * @memberof Popper.Utils
32053   * @argument {Element} element - Element to apply the style to
32054   * @argument {Object} styles
32055   * Object with a list of properties and values which will be applied to the element
32056   */
32057  function setStyles(element, styles) {
32058    Object.keys(styles).forEach(function (prop) {
32059      var unit = '';
32060      // add unit if the value is numeric and is one of the following
32061      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
32062        unit = 'px';
32063      }
32064      element.style[prop] = styles[prop] + unit;
32065    });
32066  }
32067
32068  /**
32069   * Set the attributes to the given popper
32070   * @method
32071   * @memberof Popper.Utils
32072   * @argument {Element} element - Element to apply the attributes to
32073   * @argument {Object} styles
32074   * Object with a list of properties and values which will be applied to the element
32075   */
32076  function setAttributes(element, attributes) {
32077    Object.keys(attributes).forEach(function (prop) {
32078      var value = attributes[prop];
32079      if (value !== false) {
32080        element.setAttribute(prop, attributes[prop]);
32081      } else {
32082        element.removeAttribute(prop);
32083      }
32084    });
32085  }
32086
32087  /**
32088   * @function
32089   * @memberof Modifiers
32090   * @argument {Object} data - The data object generated by `update` method
32091   * @argument {Object} data.styles - List of style properties - values to apply to popper element
32092   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
32093   * @argument {Object} options - Modifiers configuration and options
32094   * @returns {Object} The same data object
32095   */
32096  function applyStyle(data) {
32097    // any property present in `data.styles` will be applied to the popper,
32098    // in this way we can make the 3rd party modifiers add custom styles to it
32099    // Be aware, modifiers could override the properties defined in the previous
32100    // lines of this modifier!
32101    setStyles(data.instance.popper, data.styles);
32102
32103    // any property present in `data.attributes` will be applied to the popper,
32104    // they will be set as HTML attributes of the element
32105    setAttributes(data.instance.popper, data.attributes);
32106
32107    // if arrowElement is defined and arrowStyles has some properties
32108    if (data.arrowElement && Object.keys(data.arrowStyles).length) {
32109      setStyles(data.arrowElement, data.arrowStyles);
32110    }
32111
32112    return data;
32113  }
32114
32115  /**
32116   * Set the x-placement attribute before everything else because it could be used
32117   * to add margins to the popper margins needs to be calculated to get the
32118   * correct popper offsets.
32119   * @method
32120   * @memberof Popper.modifiers
32121   * @param {HTMLElement} reference - The reference element used to position the popper
32122   * @param {HTMLElement} popper - The HTML element used as popper
32123   * @param {Object} options - Popper.js options
32124   */
32125  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
32126    // compute reference element offsets
32127    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
32128
32129    // compute auto placement, store placement inside the data object,
32130    // modifiers will be able to edit `placement` if needed
32131    // and refer to originalPlacement to know the original value
32132    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
32133
32134    popper.setAttribute('x-placement', placement);
32135
32136    // Apply `position` to popper before anything else because
32137    // without the position applied we can't guarantee correct computations
32138    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
32139
32140    return options;
32141  }
32142
32143  /**
32144   * @function
32145   * @memberof 
32145Modifiers
32146   * @argument {Object} data - The data object generated by `update` method
32147   * @argument {Object} options - Modifiers configuration and options
32148   * @returns {Object} The data object, properly modified
32149   */
32150  function computeStyle(data, options) {
32151    var x = options.x,
32152        y = options.y;
32153    var popper = data.offsets.popper;
32154
32155    // Remove this legacy support in Popper.js v2
32156
32157    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
32158      return modifier.name === 'applyStyle';
32159    }).gpuAcceleration;
32160    if (legacyGpuAccelerationOption !== undefined) {
32161      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
32162    }
32163    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
32164
32165    var offsetParent = getOffsetParent(data.instance.popper);
32166    var offsetParentRect = getBoundingClientRect(offsetParent);
32167
32168    // Styles
32169    var styles = {
32170      position: popper.position
32171    };
32172
32173    // Avoid blurry text by using full pixel integers.
32174    // For pixel-perfect positioning, top/bottom prefers rounded
32175    // values, while left/right prefers floored values.
32176    var offsets = {
32177      left: Math.floor(popper.left),
32178      top: Math.round(popper.top),
32179      bottom: Math.round(popper.bottom),
32180      right: Math.floor(popper.right)
32181    };
32182
32183    var sideA = x === 'bottom' ? 'top' : 'bottom';
32184    var sideB = y === 'right' ? 'left' : 'right';
32185
32186    // if gpuAcceleration is set to `true` and transform is supported,
32187    //  we use `translate3d` to apply the position to the popper we
32188    // automatically use the supported prefixed version if needed
32189    var prefixedProperty = getSupportedPropertyName('transform');
32190
32191    // now, let's make a step back and look at this code closely (wtf?)
32192    // If the content of the popper grows once it's been positioned, it
32193    // may happen that the popper gets misplaced because of the new content
32194    // overflowing its reference element
32195    // To avoid this problem, we provide two options (x and y), which allow
32196    // the consumer to define the offset origin.
32197    // If we position a popper on top of a reference element, we can set
32198    // `x` to `top` to make the popper grow towards its top instead of
32199    // its bottom.
32200    var left = void 0,
32201        top = void 0;
32202    if (sideA === 'bottom') {
32203      top = -offsetParentRect.height + offsets.bottom;
32204    } else {
32205      top = offsets.top;
32206    }
32207    if (sideB === 'right') {
32208      left = -offsetParentRect.width + offsets.right;
32209    } else {
32210      left = offsets.left;
32211    }
32212    if (gpuAcceleration && prefixedProperty) {
32213      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
32214      styles[sideA] = 0;
32215      styles[sideB] = 0;
32216      styles.willChange = 'transform';
32217    } else {
32218      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
32219      var invertTop = sideA === 'bottom' ? -1 : 1;
32220      var invertLeft = sideB === 'right' ? -1 : 1;
32221      styles[sideA] = top * invertTop;
32222      styles[sideB] = left * invertLeft;
32223      styles.willChange = sideA + ', ' + sideB;
32224    }
32225
32226    // Attributes
32227    var attributes = {
32228      'x-placement': data.placement
32229    };
32230
32231    // Update `data` attributes, styles and arrowStyles
32232    data.attributes = _extends({}, attributes, data.attributes);
32233    data.styles = _extends({}, styles, data.styles);
32234    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
32235
32236    return data;
32237  }
32238
32239  /**
32240   * Helper used to know if the given modifier depends from another one.<br />
32241   * It checks if the needed modifier is listed and enabled.
32242   * @method
32243   * @memberof Popper.Utils
32244   * @param {Array} modifiers - list of modifiers
32245   * @param {String} requestingName - name of requesting modifier
32246   * @param {String} requestedName - name of requested modifier
32247   * @returns {Boolean}
32248   */
32249  function isModifierRequired(modifiers, requestingName, requestedName) {
32250    var requesting = find(modifiers, function (_ref) {
32251      var name = _ref.name;
32252      return name === requestingName;
32253    });
32254
32255    var isRequired = !!requesting && modifiers.some(function (modifier) {
vendor: 4,324 bytes, lines 32256-32375
32256      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
32257    });
32258
32259    if (!isRequired) {
32260      var _requesting = '`' + requestingName + '`';
32261      var requested = '`' + requestedName + '`';
32262      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
32263    }
32264    return isRequired;
32265  }
32266
32267  /**
32268   * @function
32269   * @memberof Modifiers
32270   * @argument {Object} data - The data object generated by update method
32271   * @argument {Object} options - Modifiers configuration and options
32272   * @returns {Object} The data object, properly modified
32273   */
32274  function arrow(data, options) {
32275    var _data$offsets$arrow;
32276
32277    // arrow depends on keepTogether in order to work
32278    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
32279      return data;
32280    }
32281
32282    var arrowElement = options.element;
32283
32284    // if arrowElement is a string, suppose it's a CSS selector
32285    if (typeof arrowElement === 'string') {
32286      arrowElement = data.instance.popper.querySelector(arrowElement);
32287
32288      // if arrowElement is not found, don't run the modifier
32289      if (!arrowElement) {
32290        return data;
32291      }
32292    } else {
32293      // if the arrowElement isn't a query selector we must check that the
32294      // provided DOM node is child of its popper node
32295      if (!data.instance.popper.contains(arrowElement)) {
32296        console.warn('WARNING: `arrow.element` must be child of its popper element!');
32297        return data;
32298      }
32299    }
32300
32301    var placement = data.placement.split('-')[0];
32302    var _data$offsets = data.offsets,
32303        popper = _data$offsets.popper,
32304        reference = _data$offsets.reference;
32305
32306    var isVertical = ['left', 'right'].indexOf(placement) !== -1;
32307
32308    var len = isVertical ? 'height' : 'width';
32309    var sideCapitalized = isVertical ? 'Top' : 'Left';
32310    var side = sideCapitalized.toLowerCase();
32311    var altSide = isVertical ? 'left' : 'top';
32312    var opSide = isVertical ? 'bottom' : 'right';
32313    var arrowElementSize = getOuterSizes(arrowElement)[len];
32314
32315    //
32316    // extends keepTogether behavior making sure the popper and its
32317    // reference have enough pixels in conjuction
32318    //
32319
32320    // top/left side
32321    if (reference[opSide] - arrowElementSize < popper[side]) {
32322      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
32323    }
32324    // bottom/right side
32325    if (reference[side] + arrowElementSize > popper[opSide]) {
32326      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
32327    }
32328    data.offsets.popper = getClientRect(data.offsets.popper);
32329
32330    // compute center of the popper
32331    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
32332
32333    // Compute the sideValue using the updated popper offsets
32334    // take popper margin in account because we don't have this info available
32335    var css = getStyleComputedProperty(data.instance.popper);
32336    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
32337    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
32338    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
32339
32340    // prevent arrowElement from being placed not contiguously to its popper
32341    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
32342
32343    data.arrowElement = arrowElement;
32344    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
32345
32346    return data;
32347  }
32348
32349  /**
32350   * Get the opposite placement variation of the given one
32351   * @method
32352   * @memberof Popper.Utils
32353   * @argument {String} placement variation
32354   * @returns {String} flipped placement variation
32355   */
32356  function getOppositeVariation(variation) {
32357    if (variation === 'end') {
32358      return 'start';
32359    } else if (variation === 'start') {
32360      return 'end';
32361    }
32362    return variation;
32363  }
32364
32365  /**
32366   * List of accepted placements to use as values of the `placement` option.<br />
32367   * Valid placements are:
32368   * - `auto`
32369   * - `top`
32370   * - `right`
32371   * - `bottom`
32372   * - `left`
32373   *
32374   * Each placement can have a variation from this list:
32375   * - `-start`
32376   * - `-end`
32377   *
32378   * Variations are interpreted easily if you think of them as the left to right
32379   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
32380   * is right.<br />
32381   * Vertically (`left` and `right`), `start` is top and `end` is bottom.
32382   *
32383   * Some valid examples are:
32384   * - `top-end` (on top of reference, right aligned)
32385   * - `right-start` (on right of reference, top aligned)
32386   * - `bottom` (on bottom, centered)
32387   * - `auto-right` (on the side with more space available, alignment depends by placement)
32388   *
32389   * @static
32390   * @type {Array}
32391   * @enum {String}
32392   * @readonly
32393   * @method placements
32394   * @memberof Popper
32395   */
32396  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
32397
32398  // Get rid of `auto` `auto-start` and `auto-end`
32399  var validPlacements = placements.slice(3);
32400
32401  /**
32402   * Given an initial placement, returns all the subsequent placements
32403   * clockwise (or counter-clockwise).
32404   *
32405   * @method
32406   * @memberof Popper.Utils
32407   * @argument {String} placement - A valid placement (it accepts variations)
32408   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
32409   * @returns {Array} placements including their variations
32410   */
32411  function clockwise(placement) {
32412    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
32413
32414    var index = validPlacements.indexOf(placement);
32415    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
32416    return counter ? arr.reverse() : arr;
32417  }
32418
32419  var BEHAVIORS = {
32420    FLIP: 'flip',
32421    CLOCKWISE: 'clockwise',
32422    COUNTERCLOCKWISE: 'counterclockwise'
32423  };
32424
32425  /**
32426   * @function
32427   * @memberof Modifiers
32428   * @argument {Object} data - The data object generated by update method
32429   * @argument {Object} options - Modifiers configuration and options
32430   * @returns {Object} The data object, properly modified
32431   */
32432  function flip(data, options) {
32433    // if `inner` modifier is enabled, we can't use the `flip` modifier
32434    if (isModifierEnabled(data.instance.modifiers, 'inner')) {
32435      return data;
32436    }
32437
32438    if (data.flipped && data.placement === data.originalPlacement) {
32439      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
32440      return data;
32441    }
32442
32443    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
32444
32445    var placement = data.placement.split('-')[0];
32446    var placementOpposite = getOppositePlacement(placement);
32447    var variation = data.placement.split('-')[1] || '';
32448
32449    var flipOrder = [];
32450
32451    switch (options.behavior) {
32452      case BEHAVIORS.FLIP:
32453        flipOrder = [placement, placementOpposite];
32454        break;
32455      case BEHAVIORS.CLOCKWISE:
32456        flipOrder = clockwise(placement);
32457        break;
32458      case BEHAVIORS.COUNTERCLOCKWISE:
32459        flipOrder = clockwise(placement, true);
32460        break;
32461      default:
32462        flipOrder = options.behavior;
32463    }
32464
32465    flipOrder.forEach(function (step, index) {
32466      if (placement !== step || flipOrder.length === index + 1) {
32467        return data;
32468      }
32469
32470      placement = data.placement.split('-')[0];
32471      placementOpposite = getOppositePlacement(placement);
32472
32473      var popperOffsets = data.offsets.popper;
32474      var refOffsets = data.offsets.reference;
32475
32476      // using floor because the reference offsets may contain decimals we are not going to consider here
32477      var floor = Math.floor;
32478      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
32479
32480      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
32481      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
32482      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
32483      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
32484
32485      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
32486
32487      // flip the variation if required
32488      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
32489      var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom)
vendor: 15,391 bytes, lines 32489-32929
32489;
32490
32491      if (overlapsRef || overflowsBoundaries || flippedVariation) {
32492        // this boolean to detect any flip loop
32493        data.flipped = true;
32494
32495        if (overlapsRef || overflowsBoundaries) {
32496          placement = flipOrder[index + 1];
32497        }
32498
32499        if (flippedVariation) {
32500          variation = getOppositeVariation(variation);
32501        }
32502
32503        data.placement = placement + (variation ? '-' + variation : '');
32504
32505        // this object contains `position`, we want to preserve it along with
32506        // any additional property we may add in the future
32507        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
32508
32509        data = runModifiers(data.instance.modifiers, data, 'flip');
32510      }
32511    });
32512    return data;
32513  }
32514
32515  /**
32516   * @function
32517   * @memberof Modifiers
32518   * @argument {Object} data - The data object generated by update method
32519   * @argument {Object} options - Modifiers configuration and options
32520   * @returns {Object} The data object, properly modified
32521   */
32522  function keepTogether(data) {
32523    var _data$offsets = data.offsets,
32524        popper = _data$offsets.popper,
32525        reference = _data$offsets.reference;
32526
32527    var placement = data.placement.split('-')[0];
32528    var floor = Math.floor;
32529    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
32530    var side = isVertical ? 'right' : 'bottom';
32531    var opSide = isVertical ? 'left' : 'top';
32532    var measurement = isVertical ? 'width' : 'height';
32533
32534    if (popper[side] < floor(reference[opSide])) {
32535      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
32536    }
32537    if (popper[opSide] > floor(reference[side])) {
32538      data.offsets.popper[opSide] = floor(reference[side]);
32539    }
32540
32541    return data;
32542  }
32543
32544  /**
32545   * Converts a string containing value + unit into a px value number
32546   * @function
32547   * @memberof {modifiers~offset}
32548   * @private
32549   * @argument {String} str - Value + unit string
32550   * @argument {String} measurement - `height` or `width`
32551   * @argument {Object} popperOffsets
32552   * @argument {Object} referenceOffsets
32553   * @returns {Number|String}
32554   * Value in pixels, or original string if no values were extracted
32555   */
32556  function toValue(str, measurement, popperOffsets, referenceOffsets) {
32557    // separate value from unit
32558    var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
32559    var value = +split[1];
32560    var unit = split[2];
32561
32562    // If it's not a number it's an operator, I guess
32563    if (!value) {
32564      return str;
32565    }
32566
32567    if (unit.indexOf('%') === 0) {
32568      var element = void 0;
32569      switch (unit) {
32570        case '%p':
32571          element = popperOffsets;
32572          break;
32573        case '%':
32574        case '%r':
32575        default:
32576          element = referenceOffsets;
32577      }
32578
32579      var rect = getClientRect(element);
32580      return rect[measurement] / 100 * value;
32581    } else if (unit === 'vh' || unit === 'vw') {
32582      // if is a vh or vw, we calculate the size based on the viewport
32583      var size = void 0;
32584      if (unit === 'vh') {
32585        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
32586      } else {
32587        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
32588      }
32589      return size / 100 * value;
32590    } else {
32591      // if is an explicit pixel unit, we get rid of the unit and keep the value
32592      // if is an implicit unit, it's px, and we return just the value
32593      return value;
32594    }
32595  }
32596
32597  /**
32598   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
32599   * @function
32600   * @memberof {modifiers~offset}
32601   * @private
32602   * @argument {String} offset
32603   * @argument {Object} popperOffsets
32604   * @argument {Object} referenceOffsets
32605   * @argument {String} basePlacement
32606   * @returns {Array} a two cells array with x and y offsets in numbers
32607   */
32608  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
32609    var offsets = [0, 0];
32610
32611    // Use height if placement is left or right and index is 0 otherwise use width
32612    // in this way the first offset will use an axis and the second one
32613    // will use the other one
32614    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
32615
32616    // Split the offset string to obtain a list of values and operands
32617    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
32618    var fragments = offset.split(/(\+|\-)/).map(function (frag) {
32619      return frag.trim();
32620    });
32621
32622    // Detect if the offset string contains a pair of values or a single one
32623    // they could be separated by comma or space
32624    var divider = fragments.indexOf(find(fragments, function (frag) {
32625      return frag.search(/,|\s/) !== -1;
32626    }));
32627
32628    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
32629      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
32630    }
32631
32632    // If divider is found, we divide the list of values and operands to divide
32633    // them by ofset X and Y.
32634    var splitRegex = /\s*,\s*|\s+/;
32635    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
32636
32637    // Convert the values with units to absolute pixels to allow our computations
32638    ops = ops.map(function (op, index) {
32639      // Most of the units rely on the orientation of the popper
32640      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
32641      var mergeWithPrevious = false;
32642      return op
32643      // This aggregates any `+` or `-` sign that aren't considered operators
32644      // e.g.: 10 + +5 => [10, +, +5]
32645      .reduce(function (a, b) {
32646        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
32647          a[a.length - 1] = b;
32648          mergeWithPrevious = true;
32649          return a;
32650        } else if (mergeWithPrevious) {
32651          a[a.length - 1] += b;
32652          mergeWithPrevious = false;
32653          return a;
32654        } else {
32655          return a.concat(b);
32656        }
32657      }, [])
32658      // Here we convert the string values into number values (in px)
32659      .map(function (str) {
32660        return toValue(str, measurement, popperOffsets, referenceOffsets);
32661      });
32662    });
32663
32664    // Loop trough the offsets arrays and execute the operations
32665    ops.forEach(function (op, index) {
32666      op.forEach(function (frag, index2) {
32667        if (isNumeric(frag)) {
32668          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
32669        }
32670      });
32671    });
32672    return offsets;
32673  }
32674
32675  /**
32676   * @function
32677   * @memberof Modifiers
32678   * @argument {Object} data - The data object generated by update method
32679   * @argument {Object} options - Modifiers configuration and options
32680   * @argument {Number|String} options.offset=0
32681   * The offset value as described in the modifier description
32682   * @returns {Object} The data object, properly modified
32683   */
32684  function offset(data, _ref) {
32685    var offset = _ref.offset;
32686    var placement = data.placement,
32687        _data$offsets = data.offsets,
32688        popper = _data$offsets.popper,
32689        reference = _data$offsets.reference;
32690
32691    var basePlacement = placement.split('-')[0];
32692
32693    var offsets = void 0;
32694    if (isNumeric(+offset)) {
32695      offsets = [+offset, 0];
32696    } else {
32697      offsets = parseOffset(offset, popper, reference, basePlacement);
32698    }
32699
32700    if (basePlacement === 'left') {
32701      popper.top += offsets[0];
32702      popper.left -= offsets[1];
32703    } else if (basePlacement === 'right') {
32704      popper.top += offsets[0];
32705      popper.left += offsets[1];
32706    } else if (basePlacement === 'top') {
32707      popper.left += offsets[0];
32708      popper.top -= offsets[1];
32709    } else if (basePlacement === 'bottom') {
32710      popper.left += offsets[0];
32711      popper.top += offsets[1];
32712    }
32713
32714    data.popper = popper;
32715    return data;
32716  }
32717
32718  /**
32719   * @function
32720   * @memberof Modifiers
32721   * @argument {Object} data - The data object generated by `update` method
32722   * @argument {Object} options - Modifiers configuration and options
32723   * @returns {Object} The data object, properly modified
32724   */
32725  function preventOverflow(data, options) {
32726    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
32727
32728    // If offsetParent is the reference element, we really want to
32729    // go one step up and use the next offsetParent as reference to
32730    // avoid to make this modifier completely useless and look like broken
32731    if (data.instance.reference === boundariesElement) {
32732      boundariesElement = getOffsetParent(boundariesElement);
32733    }
32734
32735    // NOTE: DOM access here
32736    // resets the popper's position so that the document size can be calculated excluding
32737    // the size of the popper element itself
32738    var transformProp = getSupportedPropertyName('transform');
32739    var popperStyles = data.instance.popper.style; // assignment to help minification
32740    var top = popperStyles.top,
32741        left = popperStyles.left,
32742        transform = popperStyles[transformProp];
32743
32744    popperStyles.top = '';
32745    popperStyles.left = '';
32746    popperStyles[transformProp] = '';
32747
32748    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
32749
32750    // NOTE: DOM access here
32751    // restores the original style properties after the offsets have been computed
32752    popperStyles.top = top;
32753    popperStyles.left = left;
32754    popperStyles[transformProp] = transform;
32755
32756    options.boundaries = boundaries;
32757
32758    var order = options.priority;
32759    var popper = data.offsets.popper;
32760
32761    var check = {
32762      primary: function primary(placement) {
32763        var value = popper[placement];
32764        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
32765          value = Math.max(popper[placement], boundaries[placement]);
32766        }
32767        return defineProperty({}, placement, value);
32768      },
32769      secondary: function secondary(placement) {
32770        var mainSide = placement === 'right' ? 'left' : 'top';
32771        var value = popper[mainSide];
32772        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
32773          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
32774        }
32775        return defineProperty({}, mainSide, value);
32776      }
32777    };
32778
32779    order.forEach(function (placement) {
32780      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
32781      popper = _extends({}, popper, check[side](placement));
32782    });
32783
32784    data.offsets.popper = popper;
32785
32786    return data;
32787  }
32788
32789  /**
32790   * @function
32791   * @memberof Modifiers
32792   * @argument {Object} data - The data object generated by `update` method
32793   * @argument {Object} options - Modifiers configuration and options
32794   * @returns {Object} The data object, properly modified
32795   */
32796  function shift(data) {
32797    var placement = data.placement;
32798    var basePlacement = placement.split('-')[0];
32799    var shiftvariation = placement.split('-')[1];
32800
32801    // if shift shiftvariation is specified, run the modifier
32802    if (shiftvariation) {
32803      var _data$offsets = data.offsets,
32804          reference = _data$offsets.reference,
32805          popper = _data$offsets.popper;
32806
32807      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
32808      var side = isVertical ? 'left' : 'top';
32809      var measurement = isVertical ? 'width' : 'height';
32810
32811      var shiftOffsets = {
32812        start: defineProperty({}, side, reference[side]),
32813        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
32814      };
32815
32816      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
32817    }
32818
32819    return data;
32820  }
32821
32822  /**
32823   * @function
32824   * @memberof Modifiers
32825   * @argument {Object} data - The data object generated by update method
32826   * @argument {Object} options - Modifiers configuration and options
32827   * @returns {Object} The data object, properly modified
32828   */
32829  function hide(data) {
32830    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
32831      return data;
32832    }
32833
32834    var refRect = data.offsets.reference;
32835    var bound = find(data.instance.modifiers, function (modifier) {
32836      return modifier.name === 'preventOverflow';
32837    }).boundaries;
32838
32839    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
32840      // Avoid unnecessary DOM access if visibility hasn't changed
32841      if (data.hide === true) {
32842        return data;
32843      }
32844
32845      data.hide = true;
32846      data.attributes['x-out-of-boundaries'] = '';
32847    } else {
32848      // Avoid unnecessary DOM access if visibility hasn't changed
32849      if (data.hide === false) {
32850        return data;
32851      }
32852
32853      data.hide = false;
32854      data.attributes['x-out-of-boundaries'] = false;
32855    }
32856
32857    return data;
32858  }
32859
32860  /**
32861   * @function
32862   * @memberof Modifiers
32863   * @argument {Object} data - The data object generated by `update` method
32864   * @argument {Object} options - Modifiers configuration and options
32865   * @returns {Object} The data object, properly modified
32866   */
32867  function inner(data) {
32868    var placement = data.placement;
32869    var basePlacement = placement.split('-')[0];
32870    var _data$offsets = data.offsets,
32871        popper = _data$offsets.popper,
32872        reference = _data$offsets.reference;
32873
32874    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
32875
32876    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
32877
32878    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
32879
32880    data.placement = getOppositePlacement(placement);
32881    data.offsets.popper = getClientRect(popper);
32882
32883    return data;
32884  }
32885
32886  /**
32887   * Modifier function, each modifier can have a function of this type assigned
32888   * to its `fn` property.<br />
32889   * These functions will be called on each update, this means that you must
32890   * make sure they are performant enough to avoid performance bottlenecks.
32891   *
32892   * @function ModifierFn
32893   * @argument {dataObject} data - The data object generated by `update` method
32894   * @argument {Object} options - Modifiers configuration and options
32895   * @returns {dataObject} The data object, properly modified
32896   */
32897
32898  /**
32899   * Modifiers are plugins used to alter the behavior of your poppers.<br />
32900   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
32901   * needed by the library.
32902   *
32903   * Usually you don't want to override the `order`, `fn` and `onLoad` props.
32904   * All the other properties are configurations that could be tweaked.
32905   * @namespace modifiers
32906   */
32907  var modifiers = {
32908    /**
32909     * Modifier used to shift the popper on the start or end of its reference
32910     * element.<br />
32911     * It will read the variation of the `placement` property.<br />
32912     * It can be one either `-end` or `-start`.
32913     * @memberof modifiers
32914     * @inner
32915     */
32916    shift: {
32917      /** @prop {number} order=100 - Index used to define the order of execution */
32918      order: 100,
32919      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
32920      enabled: true,
32921      /** @prop {ModifierFn} */
32922      fn: shift
32923    },
32924
32925    /**
32926     * The `offset` modifier can shift your popper on both its axis.
32927     *
32928     * It accepts the following units:
32929     * - `px` or unit
32929less, interpreted as pixels
32930     * - `%` or `%r`, percentage relative to the length of the reference element
32931     * - `%p`, percentage relative to the length of the popper element
32932     * - `vw`, CSS viewport width unit
32933     * - `vh`, CSS viewport height unit
32934     *
32935     * For length is intended the main axis relative to the placement of the popper.<br />
32936     * This means that if the placement is `top` or `bottom`, the length will be the
32937     * `width`. In case of `left` or `right`, it will be the height.
32938     *
32939     * You can provide a single value (as `Number` or `String`), or a pair of values
32940     * as `String` divided by a comma or one (or more) white spaces.<br />
32941     * The latter is a deprecated method because it leads to confusion and will be
32942     * removed in v2.<br />
32943     * Additionally, it accepts additions and subtractions between different units.
32944     * Note that multiplications and divisions aren't supported.
32945     *
32946     * Valid examples are:
32947     * ```
32948     * 10
32949     * '10%'
32950     * '10, 10'
32951     * '10%, 10'
32952     * '10 + 10%'
32953     * '10 - 5vh + 3%'
32954     * '-10px + 5vh, 5px - 6%'
32955     * ```
32956     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
32957     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
32958     * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)
32959     *
32960     * @memberof modifiers
32961     * @inner
32962     */
32963    offset: {
32964      /** @prop {number} order=200 - Index used to define the order of execution */
32965      order: 200,
32966      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
32967      enabled: true,
32968      /** @prop {ModifierFn} */
32969      fn: offset,
32970      /** @prop {Number|String} offset=0
32971       * The offset value as described in the modifier description
32972       */
32973      offset: 0
32974    },
32975
32976    /**
32977     * Modifier used to prevent the popper from being positioned outside the boundary.
32978     *
32979     * An scenario exists where the reference itself is not within the boundaries.<br />
32980     * We can say it has "escaped the boundaries" — or just "escaped".<br />
32981     * In this case we need to decide whether the popper should either:
32982     *
32983     * - detach from the reference and remain "trapped" in the boundaries, or
32984     * - if it should ignore the boundary and "escape with its reference"
32985     *
32986     * When `escapeWithReference` is set to`true` and reference is completely
32987     * outside its boundaries, the popper will overflow (or completely leave)
32988     * the boundaries in order to remain attached to the edge of the reference.
32989     *
32990     * @memberof modifiers
32991     * @inner
32992     */
32993    preventOverflow: {
32994      /** @prop {number} order=300 - Index used to define the order of execution */
32995      order: 300,
32996      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
32997      enabled: true,
32998      /** @prop {ModifierFn} */
32999      fn: preventOverflow,
33000      /**
33001       * @prop {Array} [priority=['left','right','top','bottom']]
33002       * Popper will try to prevent overflow following these priorities by default,
33003       * then, it could overflow on the left and on top of the `boundariesElement`
33004       */
33005      priority: ['left', 'right', 'top', 'bottom'],
33006      /**
33007       * @prop {number} padding=5
33008       * Amount of pixel used to define a minimum distance between the boundaries
33009       * and the popper this makes sure the popper has always a little padding
33010       * between the edges of its container
33011       */
33012      padding: 5,
33013      /**
33014       * @prop {String|HTMLElement} boundariesElement='scrollParent'
33015       * Boundaries used by the modifier, can be `scrollParent`, `window`,
33016       * `viewport` or any DOM element.
33017       */
33018      boundariesElement: 'scrollParent'
33019    },
33020
33021    /**
33022     * Modifier used to make sure the reference and its popper stay near eachothers
33023     * without leaving any gap between the two. Expecially useful when the arrow is
33024     * enabled and you want to assure it to point to its reference element.
33025     * It cares only about the first axis, you can still have poppers with margin
33026     * between the popper and its reference element.
33027     * @memberof modifiers
33028     * @inner
33029     */
33030    keepTogether: {
33031      /** @prop {number} order=400 - Index used to define the order of execution */
33032      order: 400,
33033      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
33034      enabled: true,
33035      /** @prop {ModifierFn} */
33036      fn: keepTogether
33037    },
33038
33039    /**
33040     * This modifier is used to move the `arrowElement` of the popper to make
33041     * sure it is positioned between the reference element and its popper element.
33042     * It will read the outer size of the `arrowElement` node to detect how many
33043     * pixels of conjuction are needed.
33044     *
33045     * It has no effect if no `arrowElement` is provided.
33046     * @memberof modifiers
33047     * @inner
33048     */
33049    arrow: {
33050      /** @prop {number} order=500 - Index used to define the order of execution */
33051      order: 500,
33052      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
33053      enabled: true,
33054      /** @prop {ModifierFn} */
33055      fn: arrow,
33056      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
33057      element: '[x-arrow]'
33058    },
33059
33060    /**
33061     * Modifier used to flip the popper's placement when it starts to overlap its
33062     * reference element.
33063     *
33064     * Requires the `preventOverflow` modifier before it in order to work.
33065     *
33066     * **NOTE:** this modifier will interrupt the current update cycle and will
33067     * restart it if it detects the need to flip the placement.
33068     * @memberof modifiers
33069     * @inner
33070     */
33071    flip: {
33072      /** @prop {number} order=600 - Index used to define the order of execution */
33073      order: 600,
33074      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
33075      enabled: true,
33076      /** @prop {ModifierFn} */
33077      fn: flip,
33078      /**
33079       * @prop {String|Array} behavior='flip'
33080       * The behavior used to change the popper's placement. It can be one of
33081       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
33082       * placements (with optional variations).
33083       */
33084      behavior: 'flip',
33085      /**
33086       * @prop {number} padding=5
33087       * The popper will flip if it hits the edges of the `boundariesElement`
33088       */
33089      padding: 5,
33090      /**
33091       * @prop {String|HTMLElement} boundariesElement='viewport'
33092       * The element which will define the boundaries of the popper position,
33093       * the popper will never be placed outside of the defined boundaries
33094       * (except if keepTogether is enabled)
33095       */
33096      boundariesElement: 'viewport'
33097    },
33098
33099    /**
33100     * Modifier used to make the popper flow toward the inner of the reference element.
33101     * By default, when this modifier is disabled, the popper will be placed outside
33102     * the reference element.
33103     * @memberof modifiers
33104     * @inner
33105     */
33106    inner: {
33107      /** @prop {number} order=700 - Index used to define the order of execution */
33108      order: 700,
33109      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
33110      enabled: false,
33111      /** @prop {ModifierFn} */
33112      fn: inner
33113    },
33114
33115    /**
33116     * Modifier used to hide the popper when its reference element is outside of the
33117     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
33118     * be used to hide with a CSS selector the popper when its reference is
33119     * out of boundaries.
33120     *
33121     * Requires the `preventOverflow` modifier before it in order to work.
33122     * @memberof modifiers
33123     * @inner
33124     */
33125    hide: {
33126      /** @prop {number} order=800 - Index used to define the order of execution */
33127      order: 800,
33128      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
33129      enabled: true,
33130      /** @prop {ModifierFn} */
33131      fn: hide
33132    },
33133
33134    /**
33135     * Computes the style that will be applied to the popper element to gets
33136     * properly positioned.
33137     *
33138     * Note that this modifier will not touch the DOM, it just prepares the styles
33139     * so that `applyStyle` modifier can apply it. This separation is useful
33140     * in case you need to replace `applyStyle` with a custom implementation.
33141     *
33142     * This modifier has `850` as `order` value to maintain backward compatibility
33143     * with previous versions of Popper.js. Expect the modifiers ordering method
33144     * to change in future major versions of the library.
33145     *
33146     * @memberof modifiers
33147     * @inner
33148     */
33149    computeStyle: {
33150      /** @prop {number} order=850 - Index used to define the order of execution */
33151      order: 850,
33152      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
33153      enabled: true,
33154      /** @prop {ModifierFn} */
33155      fn: computeStyle,
33156      /**
33157       * @prop {Boolean} gpuAcceleration=true
33158       * If true, it uses the CSS 3d transformation to position the popper.
33159       * Otherwise, it will use the `top` and `left` properties.
33160       */
33161      gpuAcceleration: true,
33162      /**
33163       * @prop {string} [x='bottom']
33164       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
33165       * Change this if your popper should grow in a direction different from `bottom`
33166       */
33167      x: 'bottom',
33168      /**
33169       * @prop {string} [x='left']
33170       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
33171       * Change this if your popper should grow in a direction different from `right`
33172       */
33173      y: 'right'
33174    },
33175
33176    /**
33177     * Applies the computed styles to the popper element.
33178     *
33179     * All the DOM manipulations are limited to this modifier. This is useful in case
33180     * you want to integrate Popper.js inside a framework or view library and you
33181     * want to delegate all the DOM manipulations to it.
33182     *
33183     * Note that if you disable this modifier, you must make sure the popper element
33184     * has its position set to `absolute` before Popper.js can do its work!
33185     *
33186     * Just disable this modifier and define you own to achieve the desired effect.
33187     *
33188     * @memberof modifiers
33189     * @inner
33190     */
33191    applyStyle: {
33192      /** @prop {number} order=900 - Index used to define the order of execution */
33193      order: 900,
33194      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
33195      enabled: true,
33196      /** @prop {ModifierFn} */
vendor: 5,047 bytes, lines 33197-33335
33197      fn: applyStyle,
33198      /** @prop {Function} */
33199      onLoad: applyStyleOnLoad,
33200      /**
33201       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
33202       * @prop {Boolean} gpuAcceleration=true
33203       * If true, it uses the CSS 3d transformation to position the popper.
33204       * Otherwise, it will use the `top` and `left` properties.
33205       */
33206      gpuAcceleration: undefined
33207    }
33208  };
33209
33210  /**
33211   * The `dataObject` is an object containing all the informations used by Popper.js
33212   * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
33213   * @name dataObject
33214   * @property {Object} data.instance The Popper.js instance
33215   * @property {String} data.placement Placement applied to popper
33216   * @property {String} data.originalPlacement Placement originally defined on init
33217   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
33218   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.
33219   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
33220   * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)
33221   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)
33222   * @property {Object} data.boundaries Offsets of the popper boundaries
33223   * @property {Object} data.offsets The measurements of popper, reference and arrow elements.
33224   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
33225   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
33226   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
33227   */
33228
33229  /**
33230   * Default options provided to Popper.js constructor.<br />
33231   * These can be overriden using the `options` argument of Popper.js.<br />
33232   * To override an option, simply pass as 3rd argument an object with the same
33233   * structure of this object, example:
33234   * ```
33235   * new Popper(ref, pop, {
33236   *   modifiers: {
33237   *     preventOverflow: { enabled: false }
33238   *   }
33239   * })
33240   * ```
33241   * @type {Object}
33242   * @static
33243   * @memberof Popper
33244   */
33245  var Defaults = {
33246    /**
33247     * Popper's placement
33248     * @prop {Popper.placements} placement='bottom'
33249     */
33250    placement: 'bottom',
33251
33252    /**
33253     * Set this to true if you want popper to position it self in 'fixed' mode
33254     * @prop {Boolean} positionFixed=false
33255     */
33256    positionFixed: false,
33257
33258    /**
33259     * Whether events (resize, scroll) are initially enabled
33260     * @prop {Boolean} eventsEnabled=true
33261     */
33262    eventsEnabled: true,
33263
33264    /**
33265     * Set to true if you want to automatically remove the popper when
33266     * you call the `destroy` method.
33267     * @prop {Boolean} removeOnDestroy=false
33268     */
33269    removeOnDestroy: false,
33270
33271    /**
33272     * Callback called when the popper is created.<br />
33273     * By default, is set to no-op.<br />
33274     * Access Popper.js instance with `data.instance`.
33275     * @prop {onCreate}
33276     */
33277    onCreate: function onCreate() {},
33278
33279    /**
33280     * Callback called when the popper is updated, this callback is not called
33281     * on the initialization/creation of the popper, but only on subsequent
33282     * updates.<br />
33283     * By default, is set to no-op.<br />
33284     * Access Popper.js instance with `data.instance`.
33285     * @prop {onUpdate}
33286     */
33287    onUpdate: function onUpdate() {},
33288
33289    /**
33290     * List of modifiers used to modify the offsets before they are applied to the popper.
33291     * They provide most of the functionalities of Popper.js
33292     * @prop {modifiers}
33293     */
33294    modifiers: modifiers
33295  };
33296
33297  /**
33298   * @callback onCreate
33299   * @param {dataObject} data
33300   */
33301
33302  /**
33303   * @callback onUpdate
33304   * @param {dataObject} data
33305   */
33306
33307  // Utils
33308  // Methods
33309  var Popper = function () {
33310    /**
33311     * Create a new Popper.js instance
33312     * @class Popper
33313     * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
33314     * @param {HTMLElement} popper - The HTML element used as popper.
33315     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
33316     * @return {Object} instance - The generated Popper.js instance
33317     */
33318    function Popper(reference, popper) {
33319      var _this = this;
33320
33321      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
33322      classCallCheck(this, Popper);
33323
33324      this.scheduleUpdate = function () {
33325        return requestAnimationFrame(_this.update);
33326      };
33327
33328      // make update() debounced, so that it only runs at most once-per-tick
33329      this.update = debounce(this.update.bind(this));
33330
33331      // with {} we create a new object with the options inside it
33332      this.options = _extends({}, Popper.Defaults, options);
33333
33334      // init state
33335      this.state = {
vendor: 7,957 bytes, lines 33336-33568
33336        isDestroyed: false,
33337        isCreated: false,
33338        scrollParents: []
33339      };
33340
33341      // get reference and popper elements (allow jQuery wrappers)
33342      this.reference = reference && reference.jquery ? reference[0] : reference;
33343      this.popper = popper && popper.jquery ? popper[0] : popper;
33344
33345      // Deep merge modifiers options
33346      this.options.modifiers = {};
33347      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
33348        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
33349      });
33350
33351      // Refactoring modifiers' list (Object => Array)
33352      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
33353        return _extends({
33354          name: name
33355        }, _this.options.modifiers[name]);
33356      })
33357      // sort the modifiers by order
33358      .sort(function (a, b) {
33359        return a.order - b.order;
33360      });
33361
33362      // modifiers have the ability to execute arbitrary code when Popper.js get inited
33363      // such code is executed in the same order of its modifier
33364      // they could add new properties to their options configuration
33365      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
33366      this.modifiers.forEach(function (modifierOptions) {
33367        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
33368          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
33369        }
33370      });
33371
33372      // fire the first update to position the popper in the right place
33373      this.update();
33374
33375      var eventsEnabled = this.options.eventsEnabled;
33376      if (eventsEnabled) {
33377        // setup event listeners, they will take care of update the position in specific situations
33378        this.enableEventListeners();
33379      }
33380
33381      this.state.eventsEnabled = eventsEnabled;
33382    }
33383
33384    // We can't use class properties because they don't get listed in the
33385    // class prototype and break stuff like Sinon stubs
33386
33387
33388    createClass(Popper, [{
33389      key: 'update',
33390      value: function update$$1() {
33391        return update.call(this);
33392      }
33393    }, {
33394      key: 'destroy',
33395      value: function destroy$$1() {
33396        return destroy.call(this);
33397      }
33398    }, {
33399      key: 'enableEventListeners',
33400      value: function enableEventListeners$$1() {
33401        return enableEventListeners.call(this);
33402      }
33403    }, {
33404      key: 'disableEventListeners',
33405      value: function disableEventListeners$$1() {
33406        return disableEventListeners.call(this);
33407      }
33408
33409      /**
33410       * Schedule an update, it will run on the next UI update available
33411       * @method scheduleUpdate
33412       * @memberof Popper
33413       */
33414
33415
33416      /**
33417       * Collection of utilities useful when writing custom modifiers.
33418       * Starting from version 1.7, this method is available only if you
33419       * include `popper-utils.js` before `popper.js`.
33420       *
33421       * **DEPRECATION**: This way to access PopperUtils is deprecated
33422       * and will be removed in v2! Use the PopperUtils module directly instead.
33423       * Due to the high instability of the methods contained in Utils, we can't
33424       * guarantee them to follow semver. Use them at your own risk!
33425       * @static
33426       * @private
33427       * @type {Object}
33428       * @deprecated since version 1.8
33429       * @member Utils
33430       * @memberof Popper
33431       */
33432
33433    }]);
33434    return Popper;
33435  }();
33436
33437  /**
33438   * The `referenceObject` is an object that provides an interface compatible with Popper.js
33439   * and lets you use it as replacement of a real DOM node.<br />
33440   * You can use this method to position a popper relatively to a set of coordinates
33441   * in case you don't have a DOM node to use as reference.
33442   *
33443   * ```
33444   * new Popper(referenceObject, popperNode);
33445   * ```
33446   *
33447   * NB: This feature isn't supported in Internet Explorer 10
33448   * @name referenceObject
33449   * @property {Function} data.getBoundingClientRect
33450   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
33451   * @property {number} data.clientWidth
33452   * An ES6 getter that will return the width of the virtual reference element.
33453   * @property {number} data.clientHeight
33454   * An ES6 getter that will return the height of the virtual reference element.
33455   */
33456
33457
33458  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
33459  Popper.placements = placements;
33460  Popper.Defaults = Defaults;
33461
33462  /**
33463   * --------------------------------------------------------------------------
33464   * Bootstrap (v4.1.3): dropdown.js
33465   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
33466   * --------------------------------------------------------------------------
33467   */
33468
33469  var Dropdown = function ($$$1) {
33470    /**
33471     * ------------------------------------------------------------------------
33472     * Constants
33473     * ------------------------------------------------------------------------
33474     */
33475    var NAME = 'dropdown';
33476    var VERSION = '4.1.3';
33477    var DATA_KEY = 'bs.dropdown';
33478    var EVENT_KEY = "." + DATA_KEY;
33479    var DATA_API_KEY = '.data-api';
33480    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
33481    var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
33482
33483    var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
33484
33485    var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
33486
33487    var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
33488
33489    var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
33490
33491    var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
33492
33493    var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
33494    var Event = {
33495      HIDE: "hide" + EVENT_KEY,
33496      HIDDEN: "hidden" + EVENT_KEY,
33497      SHOW: "show" + EVENT_KEY,
33498      SHOWN: "shown" + EVENT_KEY,
33499      CLICK: "click" + EVENT_KEY,
33500      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
33501      KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
33502      KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
33503    };
33504    var ClassName = {
33505      DISABLED: 'disabled',
33506      SHOW: 'show',
33507      DROPUP: 'dropup',
33508      DROPRIGHT: 'dropright',
33509      DROPLEFT: 'dropleft',
33510      MENURIGHT: 'dropdown-menu-right',
33511      MENULEFT: 'dropdown-menu-left',
33512      POSITION_STATIC: 'position-static'
33513    };
33514    var Selector = {
33515      DATA_TOGGLE: '[data-toggle="dropdown"]',
33516      FORM_CHILD: '.dropdown form',
33517      MENU: '.dropdown-menu',
33518      NAVBAR_NAV: '.navbar-nav',
33519      VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
33520    };
33521    var AttachmentMap = {
33522      TOP: 'top-start',
33523      TOPEND: 'top-end',
33524      BOTTOM: 'bottom-start',
33525      BOTTOMEND: 'bottom-end',
33526      RIGHT: 'right-start',
33527      RIGHTEND: 'right-end',
33528      LEFT: 'left-start',
33529      LEFTEND: 'left-end'
33530    };
33531    var Default = {
33532      offset: 0,
33533      flip: true,
33534      boundary: 'scrollParent',
33535      reference: 'toggle',
33536      display: 'dynamic'
33537    };
33538    var DefaultType = {
33539      offset: '(number|string|function)',
33540      flip: 'boolean',
33541      boundary: '(string|element)',
33542      reference: '(string|element)',
33543      display: 'string'
33544      /**
33545       * ------------------------------------------------------------------------
33546       * Class Definition
33547       * ------------------------------------------------------------------------
33548       */
33549
33550    };
33551
33552    var Dropdown =
33553    /*#__PURE__*/
33554    function () {
33555      function Dropdown(element, config) {
33556        this._element = element;
33557        this._popper = null;
33558        this._config = this._getConfig(config);
33559        this._menu = this._getMenuElement();
33560        this._inNavbar = this._detectNavbar();
33561
33562        this._addEventListeners();
33563      } // Getters
33564
33565
33566      var _proto = Dropdown.prototype;
33567
33568      // Public
33569      _proto.toggle = function toggle() {
33570        if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {
33571          return;
33572        }
33573
33574        var parent = Dropdown._getParentFromElement(this._element);
33575
33576        var isActive = $$$1(this._menu).hasClass(ClassName.SHOW);
33577
33578        Dropdown._clearMenus();
33579
33580        if (isActive) {
33581          return;
33582        }
33583
33584        var relatedTarget = {
33585          relatedTarget: this._element
33586        };
33587        var showEvent = $$$1.Event(Event.SHOW, relatedTarget);
33588        $$$1(parent).trigger(showEvent);
33589
33590        if (showEvent.isDefaultPrevented()) {
33591          return;
33592        } // Disable totally Popper.js for Dropdown in Navbar
33593
33594
33595        if (!this._inNavbar) {
33596          /**
33597           * Check for Popper dependency
33598           * Popper - https://popper.js.org
33599           */
33600          if (typeof Popper === 'undefined') {
33601            throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
33602          }
33603
33604          var referenceElement = this._element;
33605
33606          if (this._config.reference === 'parent') {
33607            referenceElement = parent;
33608          } else if (Util.isElement(this._config.reference)) {
33609            referenceElement = this._config.reference; // Check if it's jQuery element
33610
33611            if (typeof this._config.reference.jquery !== 'undefined') {
33612              referenceElement = this._config.reference[0];
33613            }
33614          } // If boundary is not `scrollParent`, then set position to `static`
33615          // to allow the menu to "escape" the scroll parent's boundaries
33616          // https://github.com/twbs/bootstrap/issues/24251
33617
33618
33619          if (this._config.boundary !== 'scrollParent') {
33620            $$$1(parent).addClass(ClassName.POSITION_STATIC);
33621          }
33622
33623          this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
33624        } // If this is a touch-enabled device we add extra
33625        // empty mouseover listeners to the body's immediate children;
33626        // only needed because of broken event delegation on iOS
33627        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
33628
33629
33630        if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
33631          $$$1(document.body).children().on('mouseover', null, $$$1.noop);
33632        }
33633
33634        this._element.focus();
33635
33636        this._element.setAttribute('aria-expanded', true);
33637
33638        $$$1(this._menu).toggleClass(ClassName.SHOW);
33639        $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget));
33640      };
33641
33642      _proto.dispose = function dispose() {
33643        $$$1.removeData(this._element, DATA_KEY);
33644        $$$1(this._element).off(EVENT_KEY);
33645        this._element = null;
33646        this._menu = null;
33647
33648        if (this._popper !== null) {
33649          this._popper.destroy();
33650
33651          this._popper = null;
33652        }
33653      };
33654
33655      _proto.update = function update() {
33656        this._inNavbar = this._detectNavbar();
33657
33658        if (this._popper !== null) {
33659          this._popper.scheduleUpdate();
33660        }
33661      }; // Private
33662
33663
33664      _proto._addEventListeners = function _addEventListeners() {
33665        var _this = this;
33666
33667        $$$1(this._element).on(Event.CLICK, function (event) {
33668          event.preventDefault();
33669          event.stopPropagation();
33670
33671          _this.toggle();
33672        });
33673      };
33674
33675      _proto._getConfig = function _getConfig(config) {
33676        config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);
33677        Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
33678        return config;
33679      };
33680
33681      _proto._getMenuElement = function _getMenuElement() {
33682        if (!this._menu) {
33683          var parent = Dropdown._getParentFromElement(this._element);
33684
33685          if (parent) {
33686            this._menu = parent.querySelector(Selector.MENU);
33687          }
33688        }
33689
33690        return this._menu;
33691      };
33692
33693      _proto._getPlacement = function _getPlacement() {
33694        var $parentDropdown = $$$1(this._element.parentNode);
33695        var placement = AttachmentMap.BOTTOM; // Handle dropup
33696
33697        if ($parentDropdown.hasClass(ClassName.DROPUP)) {
33698          placement = AttachmentMap.TOP;
33699
33700          if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
33701            placement = AttachmentMap.TOPEND;
33702          }
33703        } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
33704          placement = AttachmentMap.RIGHT;
33705        } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
33706          placement = AttachmentMap.LEFT;
33707        } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
33708          placement = AttachmentMap.BOTTOMEND;
33709        }
33710
33711        return placement;
33712      };
33713
33714      _proto._detectNavbar = function _detectNavbar() {
33715        return $$$1(this._element).closest('.navbar').length > 0;
33716      };
33717
33718      _proto._getPopperConfig = function _getPopperConfig() {
33719        var _this2 = this;
33720
33721        var offsetConf = {};
33722
33723        if (typeof this._config.offset === 'function') {
33724          offsetConf.fn = function (data) {
33725            data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
33726            return data;
33727          };
33728        } else {
33729          offsetConf.offset = this._config.offset;
33730        }
33731
33732        var popperConfig = {
33733          placement: this._getPlacement(),
33734          modifiers: {
33735            offset: offsetConf,
33736            flip: {
33737              enabled: this._config.flip
33738            },
33739            preventOverflow: {
vendor: 8,256 bytes, lines 33740-33996
33740              boundariesElement: this._config.boundary
33741            }
33742          } // Disable Popper.js if we have a static display
33743
33744        };
33745
33746        if (this._config.display === 'static') {
33747          popperConfig.modifiers.applyStyle = {
33748            enabled: false
33749          };
33750        }
33751
33752        return popperConfig;
33753      }; // Static
33754
33755
33756      Dropdown._jQueryInterface = function _jQueryInterface(config) {
33757        return this.each(function () {
33758          var data = $$$1(this).data(DATA_KEY);
33759
33760          var _config = typeof config === 'object' ? config : null;
33761
33762          if (!data) {
33763            data = new Dropdown(this, _config);
33764            $$$1(this).data(DATA_KEY, data);
33765          }
33766
33767          if (typeof config === 'string') {
33768            if (typeof data[config] === 'undefined') {
33769              throw new TypeError("No method named \"" + config + "\"");
33770            }
33771
33772            data[config]();
33773          }
33774        });
33775      };
33776
33777      Dropdown._clearMenus = function _clearMenus(event) {
33778        if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
33779          return;
33780        }
33781
33782        var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
33783
33784        for (var i = 0, len = toggles.length; i < len; i++) {
33785          var parent = Dropdown._getParentFromElement(toggles[i]);
33786
33787          var context = $$$1(toggles[i]).data(DATA_KEY);
33788          var relatedTarget = {
33789            relatedTarget: toggles[i]
33790          };
33791
33792          if (event && event.type === 'click') {
33793            relatedTarget.clickEvent = event;
33794          }
33795
33796          if (!context) {
33797            continue;
33798          }
33799
33800          var dropdownMenu = context._menu;
33801
33802          if (!$$$1(parent).hasClass(ClassName.SHOW)) {
33803            continue;
33804          }
33805
33806          if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) {
33807            continue;
33808          }
33809
33810          var hideEvent = $$$1.Event(Event.HIDE, relatedTarget);
33811          $$$1(parent).trigger(hideEvent);
33812
33813          if (hideEvent.isDefaultPrevented()) {
33814            continue;
33815          } // If this is a touch-enabled device we remove the extra
33816          // empty mouseover listeners we added for iOS support
33817
33818
33819          if ('ontouchstart' in document.documentElement) {
33820            $$$1(document.body).children().off('mouseover', null, $$$1.noop);
33821          }
33822
33823          toggles[i].setAttribute('aria-expanded', 'false');
33824          $$$1(dropdownMenu).removeClass(ClassName.SHOW);
33825          $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget));
33826        }
33827      };
33828
33829      Dropdown._getParentFromElement = function _getParentFromElement(element) {
33830        var parent;
33831        var selector = Util.getSelectorFromElement(element);
33832
33833        if (selector) {
33834          parent = document.querySelector(selector);
33835        }
33836
33837        return parent || element.parentNode;
33838      }; // eslint-disable-next-line complexity
33839
33840
33841      Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
33842        // If not input/textarea:
33843        //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
33844        // If input/textarea:
33845        //  - If space key => not a dropdown command
33846        //  - If key is other than escape
33847        //    - If key is not up or down => not a dropdown command
33848        //    - If trigger inside the menu => not a dropdown command
33849        if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
33850          return;
33851        }
33852
33853        event.preventDefault();
33854        event.stopPropagation();
33855
33856        if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) {
33857          return;
33858        }
33859
33860        var parent = Dropdown._getParentFromElement(this);
33861
33862        var isActive = $$$1(parent).hasClass(ClassName.SHOW);
33863
33864        if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
33865          if (event.which === ESCAPE_KEYCODE) {
33866            var toggle = parent.querySelector(Selector.DATA_TOGGLE);
33867            $$$1(toggle).trigger('focus');
33868          }
33869
33870          $$$1(this).trigger('click');
33871          return;
33872        }
33873
33874        var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));
33875
33876        if (items.length === 0) {
33877          return;
33878        }
33879
33880        var index = items.indexOf(event.target);
33881
33882        if (event.which === ARROW_UP_KEYCODE && index > 0) {
33883          // Up
33884          index--;
33885        }
33886
33887        if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
33888          // Down
33889          index++;
33890        }
33891
33892        if (index < 0) {
33893          index = 0;
33894        }
33895
33896        items[index].focus();
33897      };
33898
33899      _createClass(Dropdown, null, [{
33900        key: "VERSION",
33901        get: function get() {
33902          return VERSION;
33903        }
33904      }, {
33905        key: "Default",
33906        get: function get() {
33907          return Default;
33908        }
33909      }, {
33910        key: "DefaultType",
33911        get: function get() {
33912          return DefaultType;
33913        }
33914      }]);
33915
33916      return Dropdown;
33917    }();
33918    /**
33919     * ------------------------------------------------------------------------
33920     * Data Api implementation
33921     * ------------------------------------------------------------------------
33922     */
33923
33924
33925    $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
33926      event.preventDefault();
33927      event.stopPropagation();
33928
33929      Dropdown._jQueryInterface.call($$$1(this), 'toggle');
33930    }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
33931      e.stopPropagation();
33932    });
33933    /**
33934     * ------------------------------------------------------------------------
33935     * jQuery
33936     * ------------------------------------------------------------------------
33937     */
33938
33939    $$$1.fn[NAME] = Dropdown._jQueryInterface;
33940    $$$1.fn[NAME].Constructor = Dropdown;
33941
33942    $$$1.fn[NAME].noConflict = function () {
33943      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
33944      return Dropdown._jQueryInterface;
33945    };
33946
33947    return Dropdown;
33948  }($, Popper);
33949
33950  /**
33951   * --------------------------------------------------------------------------
33952   * Bootstrap (v4.1.3): modal.js
33953   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
33954   * --------------------------------------------------------------------------
33955   */
33956
33957  var Modal = function ($$$1) {
33958    /**
33959     * ------------------------------------------------------------------------
33960     * Constants
33961     * ------------------------------------------------------------------------
33962     */
33963    var NAME = 'modal';
33964    var VERSION = '4.1.3';
33965    var DATA_KEY = 'bs.modal';
33966    var EVENT_KEY = "." + DATA_KEY;
33967    var DATA_API_KEY = '.data-api';
33968    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
33969    var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
33970
33971    var Default = {
33972      backdrop: true,
33973      keyboard: true,
33974      focus: true,
33975      show: true
33976    };
33977    var DefaultType = {
33978      backdrop: '(boolean|string)',
33979      keyboard: 'boolean',
33980      focus: 'boolean',
33981      show: 'boolean'
33982    };
33983    var Event = {
33984      HIDE: "hide" + EVENT_KEY,
33985      HIDDEN: "hidden" + EVENT_KEY,
33986      SHOW: "show" + EVENT_KEY,
33987      SHOWN: "shown" + EVENT_KEY,
33988      FOCUSIN: "focusin" + EVENT_KEY,
33989      RESIZE: "resize" + EVENT_KEY,
33990      CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
33991      KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY,
33992      MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY,
33993      MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY,
33994      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
33995    };
33996    var ClassName = {
33997      SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
33998      BACKDROP: 'modal-backdrop',
33999      OPEN: 'modal-open',
34000      FADE: 'fade',
34001      SHOW: 'show'
34002    };
34003    var Selector = {
34004      DIALOG: '.modal-dialog',
34005      DATA_TOGGLE: '[data-toggle="modal"]',
34006      DATA_DISMISS: '[data-dismiss="modal"]',
34007      FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
34008      STICKY_CONTENT: '.sticky-top'
34009      /**
34010       * ------------------------------------------------------------------------
34011       * Class Definition
34012       * ------------------------------------------------------------------------
34013       */
34014
34015    };
34016
34017    var Modal =
34018    /*#__PURE__*/
34019    function () {
34020      function Modal(element, config) {
34021        this._config = this._getConfig(config);
34022        this._element = element;
34023        this._dialog = element.querySelector(Selector.DIALOG);
34024        this._backdrop = null;
34025        this._isShown = false;
34026        this._isBodyOverflowing = false;
34027        this._ignoreBackdropClick = false;
34028        this._scrollbarWidth = 0;
34029      } // Getters
34030
34031
34032      var _proto = Modal.prototype;
34033
34034      // Public
34035      _proto.toggle = function toggle(relatedTarget) {
34036        return this._isShown ? this.hide() : this.show(relatedTarget);
34037      };
34038
34039      _proto.show = function show(relatedTarget) {
34040        var _this = this;
34041
34042        if (this._isTransitioning || this._isShown) {
34043          return;
34044        }
34045
34046        if ($$$1(this._element).hasClass(ClassName.FADE)) {
34047          this._isTransitioning = true;
34048        }
34049
34050        var showEvent = $$$1.Event(Event.SHOW, {
34051          relatedTarget: relatedTarget
34052        });
34053        $$$1(this._element).trigger(showEvent);
34054
34055        if (this._isShown || showEvent.isDefaultPrevented()) {
34056          return;
34057        }
34058
34059        this._isShown = true;
34060
34061        this._checkScrollbar();
34062
34063        this._setScrollbar();
34064
34065        this._adjustDialog();
34066
34067        $$$1(document.body).addClass(ClassName.OPEN);
34068
34069        this._setEscapeEvent();
34070
34071        this._setResizeEvent();
34072
34073        $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
34074          return _this.hide(event);
34075        });
34076        $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
34077          $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
34078            if ($$$1(event.target).is(_this._element)) {
34079              _this._ignoreBackdropClick = true;
34080            }
34081          });
34082        });
34083
34084        this._showBackdrop(function () {
34085          return _this._showElement(relatedTarget);
34086        });
34087      };
34088
34089      _proto.hide = function hide(event) {
34090        var _this2 = this;
34091
34092        if (event) {
34093          event.preventDefault();
34094        }
34095
34096        if (this._isTransitioning || !this._isShown) {
34097          return;
34098        }
34099
34100        var hideEvent = $$$1.Event(Event.HIDE);
34101        $$$1(this._element).trigger(hideEvent);
34102
34103        if (!this._isShown || hideEvent.isDefaultPrevented()) {
34104          return;
34105        }
34106
34107        this._isShown = false;
34108        var transition = $$$1(this._element).hasClass(ClassName.FADE);
34109
34110        if (transition) {
34111          this._isTransitioning = true;
34112        }
34113
34114        this._setEscapeEvent();
34115
34116        this._setResizeEvent();
34117
34118        $$$1(document).off(Event.FOCUSIN);
34119        $$$1(this._element).removeClass(ClassName.SHOW);
34120        $$$1(this._element).off(Event.CLICK_DISMISS);
34121        $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);
34122
34123        if (transition) {
34124          var transitionDuration = Util.getTransitionDurationFromElement(this._element);
34125          $$$1(this._element).one(Util.TRANSITION_END, function (event) {
34126            return _this2._hideModal(event);
34127          }).emulateTransitionEnd(transitionDuration);
34128        } else {
34129          this._hideModal();
34130        }
34131      };
34132
34133      _proto.dispose = function dispose() {
34134        $$$1.removeData(this._element, DATA_KEY);
34135        $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY);
34136        this._config = null;
34137        this._element = null;
34138        this._dialog = null;
34139        this._backdrop = null;
34140        this._isShown = null;
34141        this._isBodyOverflowing = null;
34142        this._ignoreBackdropClick = null;
34143        this._scrollbarWidth = null;
34144      };
34145
34146      _proto.handleUpdate = function handleUpdate() {
34147        this._adjustDialog();
34148      }; // Private
34149
34150
34151      _proto._getConfig = function _getConfig(config) {
34152        config = _objectSpread({}, Default, config);
34153        Util.typeCheckConfig(NAME, config, DefaultType);
34154        return config;
34155      };
34156
34157      _proto._showElement = function _showElement(relatedTarget) {
34158        var _this3 = this;
34159
34160        var transition = $$$1(this._element).hasClass(ClassName.FADE);
34161
34162        if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
34163          // Don't move modal's DOM position
34164          document.body.appendChild(this._element);
34165        }
34166
34167        this._element.style.display = 'block';
34168
34169        this._element.removeAttribute('aria-hidden');
34170
34171        this._element.scrollTop = 0;
34172
34173        if (transition) {
34174          Util.reflow(this._element);
34175        }
34176
34177        $$$1(this._element).addClass(ClassName.SHOW);
34178
34179        if (this._config.focus) {
34180          this._enforceFocus();
34181        }
34182
34183        var shownEvent = $$$1.Event(Event.SHOWN, {
34184          relatedTarget: relatedTarget
34185        });
34186
34187        var transitionComplete = function transitionComplete() {
34188          if (_this3._config.focus) {
34189            _this3._element.focus();
34190          }
34191
34192          _this3._isTransitioning = false;
34193          $$$1(_this3._element).trigger(shownEvent);
34194        };
34195
34196        if (transition) {
34197          var transitionDuration = Util.getTransitionDurationFromElement(this._element);
34198          $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
34199        } else {
34200          transitionComplete();
34201        }
34202      };
34203
34204      _proto._enforceFocus = function _enforceFocus() {
34205        var _this4 = this;
34206
34207        $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop
34208        .on(Event.FOCUSIN, function (event) {
34209          if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {
34210            _this4._element.focus();
34211          }
34212        });
34213      };
34214
34215      _proto._setEscapeEvent = function _setEscapeEvent() {
34216        var _this5 = this;
34217
34218        if (this._isShown && this._config.keyboard) {
34219          $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
34220            if (event.which === ESCAPE_KEYCODE) {
34221              event.preventDefault();
34222
34223              _this5.hide();
34224            }
34225          });
34226        } else if (!this._isShown) {
34227          $$$1(this._element).off(Event.KEYDOWN_DISMISS);
34228        }
34229      };
34230
34231      _proto._setResizeEvent = function _setResizeEvent() {
34232        var _this6 = this;
34233
34234        if (this._isShown) {
34235          $$$1(window).on(Event.RESIZE, function (event) {
34236            return _this6.handleUpdate(event);
34237          });
34238        } else {
34239          $$$1(window).off(Event.RESIZE);
34240        }
34241      };
34242
34243      _proto._hideModal = function _hideModal() {
34244        var _this7 = this;
34245
34246        this._element.style.display = 'none';
34247
34248        this._element.setAttribute('aria-hidden', true);
34249
34250        this._isTransitioning = false;
34251
34252        this._showBackdrop(function () {
34253          $$$1(document.body).removeClass(ClassName.OPEN);
34254
34255          _this7._resetAdjustments();
34256
34257          _this7._resetScrollbar();
34258
34259          $$$1(_this7._element).trigger(Event.HIDDEN);
34260        });
34261      };
34262
34263      _proto._removeBackdrop = function _removeBackdrop() {
34264        if (this._backdrop) {
34265          $$$1(this._backdrop).remove();
34266          this._backdrop = null;
34267        }
34268      };
34269
34270      _proto._showBackdrop = function _showBackdrop(callback) {
34271        var _this8 = this;
34272
34273        var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
34274
34275        if (this._isShown && this._config.backdrop) {
34276          this._backdrop = document.createElement('div');
34277          this._backdrop.className = ClassName.BACKDROP;
34278
34279          if (animate) {
34280            this._backdrop.classList.add(animate);
34281          }
34282
34283          $$$1(this._backdrop).appendTo(document.body);
34284          $$$1(this._element).on(Event.CLICK_DISMISS, function (event) {
34285            if (_this8._ignoreBackdropClick) {
34286              _this8._ignoreBackdropClick = false;
34287              return;
34288            }
34289
34290            if (event.target !== event.currentTarget) {
34291              return;
34292            }
34293
34294            if (_this8._config.backdrop === 'static') {
34295              _this8._element.focus();
34296            } else {
34297              _this8.hide();
34298            }
34299          });
34300
34301          if (animate) {
34302            Util.reflow(this._backdrop);
34303          }
34304
34305          $$$1(this._backdrop).addClass(ClassName.SHOW);
34306
34307          if (!callback) {
34308            return;
34309          }
34310
34311          if (!animate) {
34312            callback();
34313            return;
34314          }
34315
34316          var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
34317          $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
34318        } else if (!this._isShown && this._backdrop) {
34319          $$$1(this._backdrop).removeClass(ClassName.SHOW);
34320
34321          var callbackRemove = function callbackRemove() {
34322            _this8._removeBackdrop();
34323
34324            if (callback) {
34325              callback();
34326            }
34327          };
34328
34329          if ($$$1(this._element).hasClass(ClassName.FADE)) {
34330            var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
34331
34332            $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
34333          } else {
34334            callbackRemove();
34335          }
34336        } else if (callback) {
34337          callback();
34338        }
34339      }; // ----------------------------------------------------------------------
34340      // the following methods are used to handle overflowing modals
34341      // todo (fat): these should probably be refactored out of modal.js
34342      // ----------------------------------------------------------------------
34343
34344
34345      _proto._adjustDialog = function _adjustDialog() {
34346        var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
34347
34348        if (!this._isBodyOverflowing && isModalOverflowing) {
34349          this._element.style.paddingLeft = this._scrollbarWidth + "px";
34350        }
34351
34352        if (this._isBodyOverflowing && !isModalOverflowing) {
34353          this._element.style.paddingRight = this._scrollbarWidth + "px";
34354        }
34355      };
34356
34357      _proto._resetAdjustments = function _resetAdjustments() {
34358        this._element.style.paddingLeft = '';
34359        this._element.style.paddingRight = '';
34360      };
34361
34362      _proto._checkScrollbar = function _checkScrollbar() {
34363        var rect = document.body.getBoundingClientRect();
34364        this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
34365        this._scrollbarWidth = this._getScrollbarWidth();
34366      };
34367
34368      _proto._setScrollbar = function _setScrollbar() {
34369        var _this9 = this;
34370
34371        if (this._isBodyOverflowing) {
34372          // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
34373          //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
34374          var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
34375          var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding
34376
34377          $$$1(fixedContent).each(function (index, element) {
34378            var actualPadding = element.style.paddingRight;
34379            var calculatedPadding = $$$1(element).css('padding-right');
34380            $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
34381          }); // Adjust sticky content margin
34382
34383          $$$1(stickyContent).each(function (index, element) {
34384            var actualMargin = element.style.marginRight;
34385            var calculatedMargin = $$$1(element).css('margin-right');
34386            $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
34387          }); // Adjust body padding
34388
34389          var actualPadding = document.body.style.paddingRight;
34390          var calculatedPadding = $$$1(document.body).css('padding-right');
34391          $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
34392        }
34393      };
34394
34395      _proto._resetScrollbar = function _resetScrollbar() {
34396        // Restore fixed content padding
34397        var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
34398        $$$1(fixedContent).each(function (index, element) {
34399          var padding = $$$1(element).data('padding-right');
34400          $$$1(element).removeData('padding-right');
34401          element.style.paddingRight = padding ? padding : '';
34402        }); // Restore sticky content
34403
34404        var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT));
34405        $$$1(elements).each(function (index, element) {
34406          var margin = $$$1(element).data('margin-right');
34407
34408          if (typeof margin !== 'undefined') {
34409            $$$1(element).css('margin-right', margin).removeData('margin-right');
34410          }
34411        }); // Restore body padding
34412
34413        var padding = $$$1(document.body).data('padding-right');
34414        $$$1(document.body).removeData('padding-right');
34415        document.body.style.paddingRight = padding ? padding : '';
34416      };
34417
34418      _proto._getScrollbarWidth = function _getScrollbarWidth() {
34419        // thx d.walsh
34420        var scrollDiv = document.createElement('div');
34421        scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
34422        document.body.appendChild(scrollDiv);
34423        var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
34424        document.body.removeChild(scrollDiv);
34425        return scrollbarWidth;
34426      }; // Static
34427
34428
34429      Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
34430        return this.each(function () {
34431          var data = $$$1(this).data(DATA_KEY);
34432
34433          var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {});
34434
34435          if (!data) {
34436            data = new Modal(this, _config);
34437            $$$1(this).data(DATA_KEY, data);
34438          }
34439
34440          if (typeof config === 'string') {
34441            if (typeof data[config] === 'undefined') {
34442              throw new TypeError("No method named \"" + config + "\"");
34443            }
34444
34445            data[config](relatedTarget);
34446          } else if (_config.show) {
34447            data.show(relatedTarget);
34448          }
34449        });
34450      };
34451
34452      _createClass(Modal, null, [{
34453        key: "VERSION",
34454        get: function get() {
34455          return VERSION;
34456        }
34457      }, {
34458        key: "Default",
34459        get: function get() {
34460          return Default;
34461        }
34462      }]);
34463
34464      return Modal;
34465    }();
34466    /**
34467     * ------------------------------------------------------------------------
34468     * Data Api implementation
34469     * ------------------------------------------------------------------------
34470     */
34471
34472
34473    $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
34474      var _this10 = this;
34475
34476      var target;
34477      var selector = Util.getSelectorFromElement(this);
34478
34479      if (selector) {
34480        target = document.querySelector(selector);
34481      }
34482
34483      var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());
34484
34485      if (this.tagName === 'A' || this.tagName === 'AREA') {
34486        event.preventDefault();
34487      }
34488
34489      var $target = $$$1(target).one(Event.SHOW, function (showEvent) {
34490        if (showEvent.isDefaultPrevented()) {
34491          // Only register focus restorer if modal will actually get shown
34492          return;
34493        }
34494
34495        $target.one(Event.HIDDEN, function () {
34496          if ($$$1(_this10).is(':visible')) {
34497            _this10.focus();
34498          }
34499        });
34500      });
34501
34502      Modal._jQueryInterface.call($$$1(target), config, this);
34503    });
34504    /**
34505     * ------------------------------------------------------------------------
34506     * jQuery
34507     * ------------------------------------------------------------------------
34508     */
34509
34510    $$$1.fn[NAME] = Modal._jQueryInterface;
34511    $$$1.fn[NAME].Constructor = Modal;
34512
34513    $$$1.fn[NAME].noConflict = function () {
34514      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
34515      return Modal._jQueryInterface;
34516    };
34517
34518    return Modal;
34519  }($);
34520
34521  /**
34522   * --------------------------------------------------------------------------
34523   * Bootstrap (v4.1.3): tooltip.js
34524   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
34525   * --------------------------------------------------------------------------
34526   */
34527
34528  var Tooltip = function ($$$1) {
34529    /**
34530     * ------------------------------------------------------------------------
34531     * Constants
34532     * ------------------------------------------------------------------------
34533     */
34534    var NAME = 'tooltip';
34535    var VERSION = '4.1.3';
34536    var DATA_KEY = 'bs.tooltip';
34537    var EVENT_KEY = "." + DATA_KEY;
34538    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
34539    var CLASS_PREFIX = 'bs-tooltip';
34540    var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
34541    var DefaultType = {
34542      animation: 'boolean',
34543      template: 'string',
34544      title: '(string|element|function)',
34545      trigger: 'string',
34546      delay: '(number|object)',
34547      html: 'boolean',
34548      selector: '(string|boolean)',
34549      placement: '(string|function)',
34550      offset: '(number|string)',
34551      container: '(string|element|boolean)',
34552      fallbackPlacement: '(string|array)',
34553      boundary: '(string|element)'
34554    };
34555    var AttachmentMap = {
34556      AUTO: 'auto',
34557      TOP: 'top',
34558      RIGHT: 'right',
34559      BOTTOM: 'bottom',
34560      LEFT: 'left'
34561    };
34562    var Default = {
34563      animation: true,
34564      template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
34565      trigger: 'hover focus',
34566      title: '',
34567      delay: 0,
34568      html: false,
34569      selector: false,
34570      placement: 'top',
34571      offset: 0,
34572      container: false,
34573      fallbackPlacement: 'flip',
34574      boundary: 'scrollParent'
34575    };
34576    var HoverState = {
34577      SHOW: 'show',
34578      OUT: 'out'
34579    };
34580    var Event = {
34581      HIDE: "hide" + EVENT_KEY,
34582      HIDDEN: "hidden" + EVENT_KEY,
34583      SHOW: "show" + EVENT_KEY,
34584      SHOWN: "shown" + EVENT_KEY,
34585      INSERTED: "inserted" + EVENT_KEY,
34586      CLICK: "click" + EVENT_KEY,
34587      FOCUSIN: "focusin" + EVENT_KEY,
34588      FOCUSOUT: "focusout" + EVENT_KEY,
34589      MOUSEENTER: "mouseenter" + EVENT_KEY,
34590      MOUSELEAVE: "mouseleave" + EVENT_KEY
34591    };
34592    var ClassName = {
34593      FADE: 'fade',
34594      SHOW: 'show'
34595    };
34596    var Selector = {
34597      TOOLTIP: '.tooltip',
34598      TOOLTIP_INNER: '.tooltip-inner',
34599      ARROW: '.arrow'
34600    };
34601    var Trigger = {
34602      HOVER: 'hover',
34603      FOCUS: 'focus',
34604      CLICK: 'click',
34605      MANUAL: 'manual'
34606      /**
34607       * ------------------------------------------------------------------------
34608       * Class Definition
34609       * ------------------------------------------------------------------------
34610       */
34611
34612    };
34613
34614    var Tooltip =
34615    /*#__PURE__*/
34616    function () {
34617      function Tooltip(element, config) {
34618        /**
34619         * Check for Popper dependency
34620         * Popper - https://popper.js.org
34621         */
34622        if (typeof Popper === 'undefined') {
34623          throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');
34624        } // private
34625
34626
34627        this._isEnabled = true;
34628        this._timeout = 0;
34629        this._hoverState = '';
34630        this._activeTrigger = {};
34631        this._popper = null; // Protected
34632
34633        this.element = element;
34634        this.config = this._getConfig(config);
34635        this.tip = null;
34636
34637        this._setListeners();
34638      } // Getters
34639
34640
34641      var _proto = Tooltip.prototype;
34642
34643      // Public
34644      _proto.enable = function enable() {
34645        this._isEnabled = true;
34646      };
34647
34648      _proto.disable = function disable() {
34649        this._isEnabled = false;
34650      };
34651
34652      _proto.toggleEnabled = function toggleEnabled() {
34653        this._isEnabled = !this._isEnabled;
34654      };
34655
34656      _proto.toggle = function toggle(event) {
34657        if (!this._isEnabled) {
34658          return;
34659        }
34660
34661        if (event) {
34662          var dataKey = this.constructor.DATA_KEY;
34663          var context = $$$1(event.currentTarget).data(dataKey);
34664
34665          if (!context) {
34666            context = new this.constructor(event.currentTarget, this._getDelegateConfig());
34667            $$$1(event.currentTarget).data(dataKey, context);
34668          }
34669
34670          context._activeTrigger.click = !context._activeTrigger.click;
34671
34672          if (context._isWithActiveTrigger()) {
34673            context._enter(null, context);
34674          } else {
34675            context._leave(null, context);
34676          }
34677        } else {
34678          if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {
34679            this._leave(null, this);
34680
34681            return;
34682          }
34683
34684          this._enter(null, this);
34685        }
34686      };
34687
34688      _proto.dispose = function dispose() {
34689        clearTimeout(this._timeout);
34690        $$$1.removeData(this.element, this.constructor.DATA_KEY);
34691        $$$1(this.element).off(this.constructor.EVENT_KEY);
34692        $$$1(this.element).closest('.modal').off('hide.bs.modal');
34693
34694        if (this.tip) {
34695          $$$1(this.tip).remove();
34696        }
34697
34698        this._isEnabled = null;
34699        this._timeout = null;
34700        this._hoverState = null;
34701        this._activeTrigger = null;
34702
34703        if (this._popper !== null) {
34704          this._popper.destroy();
34705        }
34706
34707        this._popper = null;
34708        this.element = null;
34709        this.config = null;
34710        this.tip = null;
34711      };
34712
34713      _proto.show = function show() {
34714        var _this = this;
34715
34716        if ($$$1(this.element).css('display') === 'none') {
34717          throw new Error('Please use show on visible elements');
34718        }
34719
34720        var showEvent = $$$1.Event(this.constructor.Event.SHOW);
34721
34722        if (this.isWithContent() && this._isEnabled) {
34723          $$$1(this.element).trigger(showEvent);
34724          var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element);
34725
34726          if (showEvent.isDefaultPrevented() || !isInTheDom) {
34727            return;
34728          }
34729
34730          var tip = this.getTipElement();
34731          var tipId = Util.getUID(this.constructor.NAME);
34732          tip.setAttribute('id', tipId);
34733          this.element.setAttribute('aria-describedby', tipId);
34734          this.setContent();
34735
34736          if (this.config.animation) {
34737            $$$1(tip).addClass(ClassName.FADE);
34738          }
34739
34740          var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
34741
34742          var attachment = this._getAttachment(placement);
34743
34744          this.addAttachmentClass(attachment);
34745          var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container);
34746          $$$1(tip).data(this.constructor.DATA_KEY, this);
34747
34748          if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) {
34749            $$$1(tip).appendTo(container);
34750          }
34751
34752          $$$1(this.element).trigger(this.constructor.Event.INSERTED);
34753          this._popper = new Popper(this.element, tip, {
34754            placement: attachment,
34755            modifiers: {
34756              offset: {
34757                offset: this.config.offset
34758              },
34759              flip: {
34760                behavior: this.config.fallbackPlacement
34761              },
34762              arrow: {
34763                element: Selector.ARROW
34764              },
34765              preventOverflow: {
34766                boundariesElement: this.config.boundary
34767              }
34768            },
34769            onCreate: function onCreate(data) {
34770              if (data.originalPlacement !== data.placement) {
34771                _this._handlePopperPlacementChange(data);
34772              }
34773            },
34774            onUpdate: function onUpdate(data) {
34775              _this._handlePopperPlacementChange(data);
34776            }
34777          });
34778          $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
34779          // empty mouseover listeners to the body's immediate children;
34780          // only needed because of broken event delegation on iOS
34781          // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
34782
34783          if ('ontouchstart' in document.documentElement) {
34784            $$$1(document.body).children().on('mouseover', null, $$$1.noop);
34785          }
34786
34787          var complete = function complete() {
34788            if (_this.config.animation) {
34789              _this._fixTransition();
34790            }
34791
34792            var prevHoverState = _this._hoverState;
34793            _this._hoverState = null;
34794            $$$1(_this.element).trigger(_this.constructor.Event.SHOWN);
34795
34796            if (prevHoverState === HoverState.OUT) {
34797              _this._leave(null, _this);
34798            }
34799          };
34800
34801          if ($$$1(this.tip).hasClass(ClassName.FADE)) {
34802            var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
34803            $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
34804          } else {
34805            complete();
34806          }
34807        }
34808      };
34809
34810      _proto.hide = function hide(callback) {
34811        var _this2 = this;
34812
34813        var tip = this.getTipElement();
34814        var hideEvent = $$$1.Event(this.constructor.Event.HIDE);
34815
34816        var complete = function complete() {
34817          if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
34818            tip.parentNode.removeChild(tip);
34819          }
34820
34821          _this2._cleanTipClass();
34822
34823          _this2.element.removeAttribute('aria-describedby');
34824
34825          $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
34826
34827          if (_this2._popper !== null) {
34828            _this2._popper.destroy();
34829          }
34830
34831          if (callback) {
34832            callback();
34833          }
34834        };
34835
34836        $$$1(this.element).trigger(hideEvent);
34837
34838        if (hideEvent.isDefaultPrevented()) {
34839          return;
34840        }
34841
34842        $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
34843        // empty mouseover listeners we added for iOS support
34844
34845        if ('ontouchstart' in document.documentElement) {
34846          $$$1(document.body).children().off('mouseover', null, $$$1.noop);
34847        }
34848
34849        this._activeTrigger[Trigger.CLICK] = false;
34850        this._activeTrigger[Trigger.FOCUS] = false;
34851        this._activeTrigger[Trigger.HOVER] = false;
34852
34853        if ($$$1(this.tip).hasClass(ClassName.FADE)) {
34854          var transitionDuration = Util.getTransitionDurationFromElement(tip);
34855          $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
34856        } else {
34857          complete();
34858        }
34859
34860        this._hoverState = '';
34861      };
34862
34863      _proto.update = function update() {
34864        if (this._popper !== null) {
34865          this._popper.scheduleUpdate();
34866        }
34867      }; // Protected
34868
34869
34870      _proto.isWithContent = function isWithContent() {
34871        return Boolean(this.getTitle());
34872      };
34873
34874      _proto.addAttachmentClass = function addAttachmentClass(attachment) {
34875        $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
34876      };
34877
34878      _proto.getTipElement = function getTipElement() {
34879        this.tip = this.tip || $$$1(this.config.template)[0];
34880        return this.tip;
34881      };
34882
34883      _proto.setContent = function setContent() {
34884        var tip = this.getTipElement();
34885        this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());
34886        $$$1(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW);
34887      };
34888
34889      _proto.setElementContent = function setElementContent($element, content) {
34890        var html = this.config.html;
34891
34892        if (typeof content === 'object' && (content.nodeType || content.jquery)) {
34893          // Content is a DOM node or a jQuery
34894          if (html) {
34895            if (!$$$1(content).parent().is($element)) {
34896              $element.empty().append(content);
34897            }
34898          } else {
34899            $element.text($$$1(content).text());
34900          }
34901        } else {
34902          $element[html ? 'html' : 'text'](content);
34903        }
34904      };
34905
34906      _proto.getTitle = function getTitle() {
34907        var title = this.element.getAttribute('data-original-title');
34908
34909        if (!title) {
34910          title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
34911        }
34912
34913        return title;
34914      }; // Private
34915
34916
34917      _proto._getAttachment = function _getAttachment(placement) {
34918        return AttachmentMap[placement.toUpperCase()];
34919      };
34920
34921      _proto._setListeners = function _setListeners() {
34922        var _this3 = this;
34923
34924        var triggers = this.config.trigger.split(' ');
34925        triggers.forEach(function (trigger) {
34926          if (trigger === 'click') {
34927            $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
34928              return _this3.toggle(event);
34929            });
34930          } else if (trigger !== Trigger.MANUAL) {
34931            var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
34932            var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
34933            $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {
34934              return _this3._enter(event);
34935            }).on(eventOut, _this3.config.selector, function (event) {
34936              return _this3._leave(event);
34937            });
34938          }
34939
34940          $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () {
34941            return _this3.hide();
34942          });
34943        });
34944
34945        if (this.config.selector) {
34946          this.config = _objectSpread({}, this.config, {
34947            trigger: 'manual',
34948            selector: ''
34949          });
34950        } else {
34951          this._fixTitle();
34952        }
34953      };
34954
34955      _proto._fixTitle = function _fixTitle() {
34956        var titleType = typeof this.element.getAttribute('data-original-title');
34957
34958        if (this.element.getAttribute('title') || titleType !== 'string') {
34959          this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
34960          this.element.setAttribute('title', '');
34961        }
34962      };
34963
34964      _proto._enter = function _enter(event, context) {
34965        var dataKey = this.constructor.DATA_KEY;
34966        context = context || $$$1(event.currentTarget).data(dataKey);
34967
34968        if (!context) {
34969          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
34970          $$$1(event.currentTarget).data(dataKey, context);
34971        }
34972
34973        if (event) {
34974          context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
34975        }
34976
34977        if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
34978          context._hoverState = HoverState.SHOW;
34979          return;
34980        }
34981
34982        clearTimeout(context._timeout);
34983        context._hoverState = HoverState.SHOW;
34984
34985        if (!context.config.delay || !context.config.delay.show) {
34986          context.show();
34987          return;
34988        }
34989
34990        context._timeout = setTimeout(function () {
34991          if (context._hoverState === HoverState.SHOW) {
34992            context.show();
34993          }
34994        }, context.config.delay.show);
34995      };
34996
34997      _proto._leave = function _leave(event, context) {
34998        var dataKey = this.constructor.DATA_KEY;
34999        context = context || $$$1(event.currentTarget).data(dataKey);
35000
35001        if (!context) {
35002          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
35003          $$$1(event.currentTarget).data(dataKey, context);
35004        }
35005
35006        if (event) {
35007          context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
vendor: 5,417 bytes, lines 35008-35208
35008        }
35009
35010        if (context._isWithActiveTrigger()) {
35011          return;
35012        }
35013
35014        clearTimeout(context._timeout);
35015        context._hoverState = HoverState.OUT;
35016
35017        if (!context.config.delay || !context.config.delay.hide) {
35018          context.hide();
35019          return;
35020        }
35021
35022        context._timeout = setTimeout(function () {
35023          if (context._hoverState === HoverState.OUT) {
35024            context.hide();
35025          }
35026        }, context.config.delay.hide);
35027      };
35028
35029      _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
35030        for (var trigger in this._activeTrigger) {
35031          if (this._activeTrigger[trigger]) {
35032            return true;
35033          }
35034        }
35035
35036        return false;
35037      };
35038
35039      _proto._getConfig = function _getConfig(config) {
35040        config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {});
35041
35042        if (typeof config.delay === 'number') {
35043          config.delay = {
35044            show: config.delay,
35045            hide: config.delay
35046          };
35047        }
35048
35049        if (typeof config.title === 'number') {
35050          config.title = config.title.toString();
35051        }
35052
35053        if (typeof config.content === 'number') {
35054          config.content = config.content.toString();
35055        }
35056
35057        Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
35058        return config;
35059      };
35060
35061      _proto._getDelegateConfig = function _getDelegateConfig() {
35062        var config = {};
35063
35064        if (this.config) {
35065          for (var key in this.config) {
35066            if (this.constructor.Default[key] !== this.config[key]) {
35067              config[key] = this.config[key];
35068            }
35069          }
35070        }
35071
35072        return config;
35073      };
35074
35075      _proto._cleanTipClass = function _cleanTipClass() {
35076        var $tip = $$$1(this.getTipElement());
35077        var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
35078
35079        if (tabClass !== null && tabClass.length) {
35080          $tip.removeClass(tabClass.join(''));
35081        }
35082      };
35083
35084      _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
35085        var popperInstance = popperData.instance;
35086        this.tip = popperInstance.popper;
35087
35088        this._cleanTipClass();
35089
35090        this.addAttachmentClass(this._getAttachment(popperData.placement));
35091      };
35092
35093      _proto._fixTransition = function _fixTransition() {
35094        var tip = this.getTipElement();
35095        var initConfigAnimation = this.config.animation;
35096
35097        if (tip.getAttribute('x-placement') !== null) {
35098          return;
35099        }
35100
35101        $$$1(tip).removeClass(ClassName.FADE);
35102        this.config.animation = false;
35103        this.hide();
35104        this.show();
35105        this.config.animation = initConfigAnimation;
35106      }; // Static
35107
35108
35109      Tooltip._jQueryInterface = function _jQueryInterface(config) {
35110        return this.each(function () {
35111          var data = $$$1(this).data(DATA_KEY);
35112
35113          var _config = typeof config === 'object' && config;
35114
35115          if (!data && /dispose|hide/.test(config)) {
35116            return;
35117          }
35118
35119          if (!data) {
35120            data = new Tooltip(this, _config);
35121            $$$1(this).data(DATA_KEY, data);
35122          }
35123
35124          if (typeof config === 'string') {
35125            if (typeof data[config] === 'undefined') {
35126              throw new TypeError("No method named \"" + config + "\"");
35127            }
35128
35129            data[config]();
35130          }
35131        });
35132      };
35133
35134      _createClass(Tooltip, null, [{
35135        key: "VERSION",
35136        get: function get() {
35137          return VERSION;
35138        }
35139      }, {
35140        key: "Default",
35141        get: function get() {
35142          return Default;
35143        }
35144      }, {
35145        key: "NAME",
35146        get: function get() {
35147          return NAME;
35148        }
35149      }, {
35150        key: "DATA_KEY",
35151        get: function get() {
35152          return DATA_KEY;
35153        }
35154      }, {
35155        key: "Event",
35156        get: function get() {
35157          return Event;
35158        }
35159      }, {
35160        key: "EVENT_KEY",
35161        get: function get() {
35162          return EVENT_KEY;
35163        }
35164      }, {
35165        key: "DefaultType",
35166        get: function get() {
35167          return DefaultType;
35168        }
35169      }]);
35170
35171      return Tooltip;
35172    }();
35173    /**
35174     * ------------------------------------------------------------------------
35175     * jQuery
35176     * ------------------------------------------------------------------------
35177     */
35178
35179
35180    $$$1.fn[NAME] = Tooltip._jQueryInterface;
35181    $$$1.fn[NAME].Constructor = Tooltip;
35182
35183    $$$1.fn[NAME].noConflict = function () {
35184      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
35185      return Tooltip._jQueryInterface;
35186    };
35187
35188    return Tooltip;
35189  }($, Popper);
35190
35191  /**
35192   * --------------------------------------------------------------------------
35193   * Bootstrap (v4.1.3): popover.js
35194   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
35195   * --------------------------------------------------------------------------
35196   */
35197
35198  var Popover = function ($$$1) {
35199    /**
35200     * ------------------------------------------------------------------------
35201     * Constants
35202     * ------------------------------------------------------------------------
35203     */
35204    var NAME = 'popover';
35205    var VERSION = '4.1.3';
35206    var DATA_KEY = 'bs.popover';
35207    var EVENT_KEY = "." + DATA_KEY;
35208    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
35209    var CLASS_PREFIX = 'bs-popover';
35210    var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
35211
35212    var Default = _objectSpread({}, Tooltip.Default, {
35213      placement: 'right',
35214      trigger: 'click',
35215      content: '',
35216      template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
35217    });
35218
35219    var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
35220      content: '(string|element|function)'
35221    });
35222
35223    var ClassName = {
35224      FADE: 'fade',
35225      SHOW: 'show'
35226    };
35227    var Selector = {
35228      TITLE: '.popover-header',
35229      CONTENT: '.popover-body'
35230    };
35231    var Event = {
35232      HIDE: "hide" + EVENT_KEY,
35233      HIDDEN: "hidden" + EVENT_KEY,
35234      SHOW: "show" + EVENT_KEY,
35235      SHOWN: "shown" + EVENT_KEY,
35236      INSERTED: "inserted" + EVENT_KEY,
35237      CLICK: "click" + EVENT_KEY,
35238      FOCUSIN: "focusin" + EVENT_KEY,
35239      FOCUSOUT: "focusout" + EVENT_KEY,
35240      MOUSEENTER: "mouseenter" + EVENT_KEY,
35241      MOUSELEAVE: "mouseleave" + EVENT_KEY
35242      /**
35243       * ------------------------------------------------------------------------
35244       * Class Definition
35245       * ------------------------------------------------------------------------
35246       */
35247
35248    };
35249
35250    var Popover =
35251    /*#__PURE__*/
35252    function (_Tooltip) {
35253      _inheritsLoose(Popover, _Tooltip);
35254
35255      function Popover() {
35256        return _Tooltip.apply(this, arguments) || this;
35257      }
35258
35259      var _proto = Popover.prototype;
35260
35261      // Overrides
35262      _proto.isWithContent = function isWithContent() {
35263        return this.getTitle() || this._getContent();
35264      };
35265
35266      _proto.addAttachmentClass = function addAttachmentClass(attachment) {
35267        $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
35268      };
35269
35270      _proto.getTipElement = function getTipElement() {
35271        this.tip = this.tip || $$$1(this.config.template)[0];
35272        return this.tip;
35273      };
35274
35275      _proto.setContent = function setContent() {
35276        var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events
35277
35278        this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
35279
35280        var content = this._getContent();
35281
35282        if (typeof content === 'function') {
35283          content = content.call(this.element);
35284        }
35285
35286        this.setElementContent($tip.find(Selector.CONTENT), content);
35287        $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
35288      }; // Private
35289
35290
35291      _proto._getContent = function _getContent() {
35292        return this.element.getAttribute('data-content') || this.config.content;
35293      };
35294
35295      _proto._cleanTipClass = function _cleanTipClass() {
35296        var $tip = $$$1(this.getTipElement());
35297        var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
35298
35299        if (tabClass !== null && tabClass.length > 0) {
35300          $tip.removeClass(tabClass.join(''));
35301        }
35302      }; // Static
35303
35304
35305      Popover._jQueryInterface = function _jQueryInterface(config) {
35306        return this.each(function () {
35307          var data = $$$1(this).data(DATA_KEY);
35308
35309          var _config = typeof config === 'object' ? config : null;
35310
35311          if (!data && /destroy|hide/.test(config)) {
35312            return;
35313          }
35314
35315          if (!data) {
35316            data = new Popover(this, _config);
35317            $$$1(this).data(DATA_KEY, data);
35318          }
35319
35320          if (typeof config === 'string') {
35321            if (typeof data[config] === 'undefined') {
35322              throw new TypeError("No method named \"" + config + "\"");
35323            }
35324
35325            data[config]();
35326          }
35327        });
35328      };
35329
35330      _createClass(Popover, null, [{
35331        key: "VERSION",
35332        // Getters
35333        get: function get() {
35334          return VERSION;
35335        }
35336      }, {
35337        key: "Default",
35338        get: function get() {
35339          return Default;
35340        }
35341      }, {
35342        key: "NAME",
35343        get: function get() {
35344          return NAME;
35345        }
35346      }, {
35347        key: "DATA_KEY",
35348        get: function get() {
35349          return DATA_KEY;
35350        }
35351      }, {
35352        key: "Event",
35353        get: function get() {
35354          return Event;
35355        }
35356      }, {
35357        key: "EVENT_KEY",
35358        get: function get() {
35359          return EVENT_KEY;
35360        }
35361      }, {
35362        key: "DefaultType",
35363        get: function get() {
35364          return DefaultType;
35365        }
35366      }]);
35367
35368      return Popover;
35369    }(Tooltip);
35370    /**
35371     * ------------------------------------------------------------------------
35372     * jQuery
35373     * ------------------------------------------------------------------------
35374     */
35375
35376
35377    $$$1.fn[NAME] = Popover._jQueryInterface;
35378    $$$1.fn[NAME].Constructor = Popover;
35379
35380    $$$1.fn[NAME].noConflict = function () {
35381      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
35382      return Popover._jQueryInterface;
35383    };
35384
35385    return Popover;
35386  }($);
35387
35388  /**
35389   * --------------------------------------------------------------------------
35390   * Bootstrap (v4.1.3): scrollspy.js
35391   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
35392   * --------------------------------------------------------------------------
35393   */
35394
35395  var ScrollSpy = function ($$$1) {
35396    /**
35397     * ------------------------------------------------------------------------
35398     * Constants
35399     * ------------------------------------------------------------------------
35400     */
35401    var NAME = 'scrollspy';
35402    var VERSION = '4.1.3';
35403    var DATA_KEY = 'bs.scrollspy';
35404    var EVENT_KEY = "." + DATA_KEY;
35405    var DATA_API_KEY = '.data-api';
35406    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
35407    var Default = {
35408      offset: 10,
35409      method: 'auto',
35410      target: ''
35411    };
35412    var DefaultType = {
35413      offset: 'number',
35414      method: 'string',
35415      target: '(string|element)'
35416    };
35417    var Event = {
35418      ACTIVATE: "activate" + EVENT_KEY,
35419      SCROLL: "scroll" + EVENT_KEY,
35420      LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
35421    };
35422    var ClassName = {
35423      DROPDOWN_ITEM: 'dropdown-item',
35424      DROPDOWN_MENU: 'dropdown-menu',
35425      ACTIVE: 'active'
35426    };
35427    var Selector = {
35428      DATA_SPY: '[data-spy="scroll"]',
35429      ACTIVE: '.active',
35430      NAV_LIST_GROUP: '.nav, .list-group',
35431      NAV_LINKS: '.nav-link',
35432      NAV_ITEMS: '.nav-item',
35433      LIST_ITEMS: '.list-group-item',
35434      DROPDOWN: '.dropdown',
35435      DROPDOWN_ITEMS: '.dropdown-item',
35436      DROPDOWN_TOGGLE: '.dropdown-toggle'
35437    };
35438    var OffsetMethod = {
35439      OFFSET: 'offset',
35440      POSITION: 'position'
35441      /**
35442       * ------------------------------------------------------------------------
35443       * Class Definition
35444       * ------------------------------------------------------------------------
35445       */
35446
35447    };
35448
35449    var ScrollSpy =
35450    /*#__PURE__*/
35451    function () {
35452      function ScrollSpy(element, config) {
35453        var _this = this;
35454
35455        this._element = element;
35456        this._scrollElement = element.tagName === 'BODY' ? window : element;
35457        this._config = this._getConfig(config);
35458        this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
35459        this._offsets = [];
35460        this._targets = [];
35461        this._activeTarget = null;
35462        this._scrollHeight = 0;
35463        $$$1(this._scrollElement).on(Event.SCROLL, function (event) {
35464          return _this._process(event);
35465        });
35466        this.refresh();
35467
35468        this._process();
35469      } // Getters
35470
35471
35472      var _proto = ScrollSpy.prototype;
35473
35474      // Public
35475      _proto.refresh = function refresh() {
35476        var _this2 = this;
35477
35478        var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
35479        var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
35480        var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
35481        this._offsets = [];
35482        this._targets = [];
35483        this._scrollHeight = this._getScrollHeight();
35484        var targets = [].slice.call(document.querySelectorAll(this._selector));
35485        targets.map(function (element) {
35486          var target;
35487          var targetSelector = Util.getSelectorFromElement(element);
35488
35489          if (targetSelector) {
35490            target = document.querySelector(targetSelector);
35491          }
35492
35493          if (target) {
35494            var targetBCR = target.getBoundingClientRect();
35495
35496            if (targetBCR.width || targetBCR.height) {
35497              // TODO (fat): remove sketch reliance on jQuery position/offset
35498              return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];
35499            }
35500          }
35501
35502          return null;
35503        }).filter(function (item) {
35504          return item;
35505        }).sort(function (a, b) {
35506          return a[0] - b[0];
35507        }
35507).forEach(function (item) {
35508          _this2._offsets.push(item[0]);
35509
35510          _this2._targets.push(item[1]);
35511        });
35512      };
35513
35514      _proto.dispose = function dispose() {
35515        $$$1.removeData(this._element, DATA_KEY);
35516        $$$1(this._scrollElement).off(EVENT_KEY);
35517        this._element = null;
35518        this._scrollElement = null;
35519        this._config = null;
35520        this._selector = null;
35521        this._offsets = null;
35522        this._targets = null;
35523        this._activeTarget = null;
35524        this._scrollHeight = null;
35525      }; // Private
35526
35527
35528      _proto._getConfig = function _getConfig(config) {
35529        config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});
35530
35531        if (typeof config.target !== 'string') {
35532          var id = $$$1(config.target).attr('id');
35533
35534          if (!id) {
35535            id = Util.getUID(NAME);
35536            $$$1(config.target).attr('id', id);
35537          }
35538
35539          config.target = "#" + id;
35540        }
35541
35542        Util.typeCheckConfig(NAME, config, DefaultType);
35543        return config;
35544      };
35545
35546      _proto._getScrollTop = function _getScrollTop() {
35547        return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
35548      };
35549
35550      _proto._getScrollHeight = function _getScrollHeight() {
35551        return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
35552      };
35553
35554      _proto._getOffsetHeight = function _getOffsetHeight() {
35555        return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
35556      };
35557
35558      _proto._process = function _process() {
35559        var scrollTop = this._getScrollTop() + this._config.offset;
35560
35561        var scrollHeight = this._getScrollHeight();
35562
35563        var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
35564
35565        if (this._scrollHeight !== scrollHeight) {
35566          this.refresh();
35567        }
35568
35569        if (scrollTop >= maxScroll) {
35570          var target = this._targets[this._targets.length - 1];
35571
35572          if (this._activeTarget !== target) {
35573            this._activate(target);
35574          }
35575
35576          return;
35577        }
35578
35579        if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
35580          this._activeTarget = null;
35581
35582          this._clear();
35583
35584          return;
35585        }
35586
35587        var offsetLength = this._offsets.length;
35588
35589        for (var i = offsetLength; i--;) {
35590          var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
35591
35592          if (isActiveTarget) {
35593            this._activate(this._targets[i]);
35594          }
35595        }
35596      };
35597
35598      _proto._activate = function _activate(target) {
35599        this._activeTarget = target;
35600
35601        this._clear();
35602
35603        var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style
35604
35605
35606        queries = queries.map(function (selector) {
35607          return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]");
35608        });
35609        var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(','))));
35610
35611        if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
35612          $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
35613          $link.addClass(ClassName.ACTIVE);
35614        } else {
35615          // Set triggered link as active
35616          $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
35617          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
35618
35619          $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item
35620
35621          $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
35622        }
35623
35624        $$$1(this._scrollElement).trigger(Event.ACTIVATE, {
35625          relatedTarget: target
35626        });
35627      };
35628
35629      _proto._clear = function _clear() {
35630        var nodes = [].slice.call(document.querySelectorAll(this._selector));
35631        $$$1(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
35632      }; // Static
35633
35634
35635      ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
35636        return this.each(function () {
35637          var data = $$$1(this).data(DATA_KEY);
35638
35639          var _config = typeof config === 'object' && config;
35640
35641          if (!data) {
35642            data = new ScrollSpy(this, _config);
35643            $$$1(this).data(DATA_KEY, data);
35644          }
35645
35646          if (typeof config === 'string') {
35647            if (typeof data[config] === 'undefined') {
35648              throw new TypeError("No method named \"" + config + "\"");
35649            }
35650
35651            data[config]();
35652          }
35653        });
35654      };
35655
35656      _createClass(ScrollSpy, null, [{
35657        key: "VERSION",
35658        get: function get() {
35659          return VERSION;
35660        }
35661      }, {
35662        key: "Default",
35663        get: function get() {
35664          return Default;
35665        }
35666      }]);
35667
35668      return ScrollSpy;
35669    }();
35670    /**
35671     * ------------------------------------------------------------------------
35672     * Data Api implementation
35673     * ------------------------------------------------------------------------
35674     */
35675
35676
35677    $$$1(window).on(Event.LOAD_DATA_API, function () {
35678      var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));
35679      var scrollSpysLength = scrollSpys.length;
35680
35681      for (var i = scrollSpysLength; i--;) {
35682        var $spy = $$$1(scrollSpys[i]);
35683
35684        ScrollSpy._jQueryInterface.call($spy, $spy.data());
35685      }
35686    });
35687    /**
35688     * ------------------------------------------------------------------------
35689     * jQuery
35690     * ------------------------------------------------------------------------
35691     */
35692
35693    $$$1.fn[NAME] = ScrollSpy._jQueryInterface;
35694    $$$1.fn[NAME].Constructor = ScrollSpy;
35695
35696    $$$1.fn[NAME].noConflict = function () {
35697      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
35698      return ScrollSpy._jQueryInterface;
35699    };
35700
35701    return ScrollSpy;
35702  }($);
35703
35704  /**
35705   * --------------------------------------------------------------------------
35706   * Bootstrap (v4.1.3): tab.js
35707   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
35708   * --------------------------------------------------------------------------
35709   */
35710
35711  var Tab = function ($$$1) {
35712    /**
35713     * ------------------------------------------------------------------------
35714     * Constants
35715     * ------------------------------------------------------------------------
35716     */
35717    var NAME = 'tab';
35718    var VERSION = '4.1.3';
35719    var DATA_KEY = 'bs.tab';
35720    var EVENT_KEY = "." + DATA_KEY;
35721    var DATA_API_KEY = '.data-api';
35722    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
35723    var Event = {
35724      HIDE: "hide" + EVENT_KEY,
35725      HIDDEN: "hidden" + EVENT_KEY,
35726      SHOW: "show" + EVENT_KEY,
35727      SHOWN: "shown" + EVENT_KEY,
35728      CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
35729    };
35730    var ClassName = {
35731      DROPDOWN_MENU: 'dropdown-menu',
35732      ACTIVE: 'active',
35733      DISABLED: 'disabled',
35734      FADE: 'fade',
35735      SHOW: 'show'
35736    };
35737    var Selector = {
35738      DROPDOWN: '.dropdown',
35739      NAV_LIST_GROUP: '.nav, .list-group',
35740      ACTIVE: '.active',
35741      ACTIVE_UL: '> li > .active',
35742      DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
35743      DROPDOWN_TOGGLE: '.dropdown-toggle',
35744      DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
35745      /**
35746       * ------------------------------------------------------------------------
35747       * Class Definition
35748       * ------------------------------------------------------------------------
35749       */
35750
35751    };
35752
35753    var Tab =
35754    /*#__PURE__*/
35755    function () {
35756      function Tab(element) {
35757        this._element = element;
35758      } // Getters
35759
35760
35761      var _proto = Tab.prototype;
35762
35763      // Public
35764      _proto.show = function show() {
35765        var _this = this;
35766
35767        if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {
35768          return;
35769        }
35770
35771        var target;
35772        var previous;
35773        var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0];
35774        var selector = Util.getSelectorFromElement(this._element);
35775
35776        if (listElement) {
35777          var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
35778          previous = $$$1.makeArray($$$1(listElement).find(itemSelector));
35779          previous = previous[previous.length - 1];
35780        }
35781
35782        var hideEvent = $$$1.Event(Event.HIDE, {
35783          relatedTarget: this._element
35784        });
35785        var showEvent = $$$1.Event(Event.SHOW, {
35786          relatedTarget: previous
35787        });
35788
35789        if (previous) {
35790          $$$1(previous).trigger(hideEvent);
35791        }
35792
35793        $$$1(this._element).trigger(showEvent);
35794
35795        if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
35796          return;
35797        }
35798
35799        if (selector) {
35800          target = document.querySelector(selector);
35801        }
35802
35803        this._activate(this._element, listElement);
35804
35805        var complete = function complete() {
35806          var hiddenEvent = $$$1.Event(Event.HIDDEN, {
35807            relatedTarget: _this._element
35808          });
35809          var shownEvent = $$$1.Event(Event.SHOWN, {
35810            relatedTarget: previous
35811          });
35812          $$$1(previous).trigger(hiddenEvent);
35813          $$$1(_this._element).trigger(shownEvent);
35814        };
35815
35816        if (target) {
35817          this._activate(target, target.parentNode, complete);
35818        } else {
35819          complete();
35820        }
35821      };
35822
35823      _proto.dispose = function dispose() {
35824        $$$1.removeData(this._element, DATA_KEY);
35825        this._element = null;
35826      }; // Private
35827
35828
35829      _proto._activate = function _activate(element, container, callback) {
35830        var _this2 = this;
35831
35832        var activeElements;
35833
35834        if (container.nodeName === 'UL') {
35835          activeElements = $$$1(container).find(Selector.ACTIVE_UL);
35836        } else {
35837          activeElements = $$$1(container).children(Selector.ACTIVE);
35838        }
35839
35840        var active = activeElements[0];
35841        var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);
35842
35843        var complete = function complete() {
35844          return _this2._transitionComplete(element, active, callback);
35845        };
35846
35847        if (active && isTransitioning) {
35848          var transitionDuration = Util.getTransitionDurationFromElement(active);
35849          $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
35850        } else {
35851          complete();
35852        }
35853      };
35854
35855      _proto._transitionComplete = function _transitionComplete(element, active, callback) {
35856        if (active) {
35857          $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
35858          var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
35859
35860          if (dropdownChild) {
35861            $$$1(dropdownChild).removeClass(ClassName.ACTIVE);
35862          }
35863
35864          if (active.getAttribute('role') === 'tab') {
35865            active.setAttribute('aria-selected', false);
35866          }
35867        }
35868
35869        $$$1(element).addClass(ClassName.ACTIVE);
35870
35871        if (element.getAttribute('role') === 'tab') {
35872          element.setAttribute('aria-selected', true);
35873        }
35874
35875        Util.reflow(element);
35876        $$$1(element).addClass(ClassName.SHOW);
35877
35878        if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
35879          var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
35880
35881          if (dropdownElement) {
35882            var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
35883            $$$1(dropdownToggleList).addClass(ClassName.ACTIVE);
35884          }
35885
35886          element.setAttribute('aria-expanded', true);
35887        }
35888
35889        if (callback) {
35890          callback();
35891        }
35892      }; // Static
35893
35894
35895      Tab._jQueryInterface = function _jQueryInterface(config) {
35896        return this.each(function () {
35897          var $this = $$$1(this);
35898          var data = $this.data(DATA_KEY);
35899
35900          if (!data) {
35901            data = new Tab(this);
35902            $this.data(DATA_KEY, data);
35903          }
35904
35905          if (typeof config === 'string') {
35906            if (typeof data[config] === 'undefined') {
35907              throw new TypeError("No method named \"" + config + "\"");
35908            }
35909
35910            data[config]();
35911          }
35912        });
35913      };
35914
35915      _createClass(Tab, null, [{
35916        key: "VERSION",
35917        get: function get() {
35918          return VERSION;
35919        }
35920      }]);
35921
35922      return Tab;
35923    }();
35924    /**
35925     * ------------------------------------------------------------------------
35926     * Data Api implementation
35927     * ------------------------------------------------------------------------
35928     */
35929
35930
35931    $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
35932      event.preventDefault();
35933
35934      Tab._jQueryInterface.call($$$1(this), 'show');
35935    });
35936    /**
35937     * ------------------------------------------------------------------------
35938     * jQuery
35939     * ------------------------------------------------------------------------
35940     */
35941
35942    $$$1.fn[NAME] = Tab._jQueryInterface;
35943    $$$1.fn[NAME].Constructor = Tab;
35944
35945    $$$1.fn[NAME].noConflict = function () {
35946      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
35947      return Tab._jQueryInterface;
35948    };
35949
35950    return Tab;
35951  }($);
35952
35953  /**
35954   * --------------------------------------------------------------------------
35955   * Bootstrap (v4.1.3): index.js
35956   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
35957   * --------------------------------------------------------------------------
35958   */
35959
35960  (function ($$$1) {
35961    if (typeof $$$1 === 'undefined') {
35962      throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
35963    }
35964
35965    var version = $$$1.fn.jquery.split(' ')[0].split('.');
35966    var minMajor = 1;
35967    var ltMajor = 2;
35968    var minMinor = 9;
35969    var minPatch = 1;
35970    var maxMajor = 4;
35971
35972    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
35973      throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
35974    }
35975  })($);
35976
35977  exports.Util = Util;
35978  exports.Alert = Alert;
35979  exports.Button = Button;
35980  exports.Carousel = Carousel;
35981  exports.Collapse = Collapse;
35982  exports.Dropdown = Dropdown;
35983  exports.Modal = Modal;
35984  exports.Popover = Popover;
35985  exports.Scrollspy = ScrollSpy;
35986  exports.Tab = Tab;
35987  exports.Tooltip = Tooltip;
35988
35989  Object.defineProperty(exports, '__esModule', { value: true });
35990
35991})));
35992//# sourceMappingURL=bootstrap.bundle.js.map
35993
35994/*!
35995 * FormValidation (http://formvalidation.io)
35996 * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks
35997 * 
35998 * This is a custom build that does NOT consist of all validators. Only popular validators are included:
35999 * - between
36000 * - callback
36001 * - choice
36002 * - color
36003 * - creditCard
36004 * - date
36005 * - different
36006 * - digits
36007 * - emailAddress
36008 * - file
36009 * - greaterThan
36010 * - identical
36011 * - integer
36012 * - lessThan
36013 * - notEmpty
36014 * - numeric
36015 * - promise
36016 * - regexp
36017 * - remote
36018 * - stringLength
36019 * - uri
36020 *
36021 * Use formValidation(.min).js file if you want to have all validators.
36022 *
36023 * @version     v0.8.1, built on 2016-07-29 1:10:54 AM
36024 * @author      https://twitter.com/formvalidation
36025 * @copyright   (c) 2013 - 2016 Nguyen Huu Phuoc
36026 * @license     http://formvalidation.io/license/
36027 */
36028// Register the namespace
36029window.FormValidation = {
36030    AddOn:     {},  // Add-ons
36031    Framework: {}
vendor: 21,143 bytes, lines 36031-36446
36031,  // Supported frameworks
36032    I18n:      {},  // i18n
36033    Validator: {}   // Available validators
36034};
36035
36036if (typeof jQuery === 'undefined') {
36037    throw new Error('FormValidation requires jQuery');
36038}
36039
36040(function($) {
36041    var version = $.fn.jquery.split(' ')[0].split('.');
36042    if ((+version[0] < 2 && +version[1] < 9) || (+version[0] === 1 && +version[1] === 9 && +version[2] < 1)) {
36043        throw new Error('FormValidation requires jQuery version 1.9.1 or higher');
36044    }
36045}(jQuery));
36046
36047(function($) {
36048    // TODO: Remove backward compatibility
36049    /**
36050     * Constructor
36051     *
36052     * @param {jQuery|String} form The form element or selector
36053     * @param {Object} options The options
36054     * @param {String} [namespace] The optional namespace which is used for data-{namespace}-xxx attributes and internal data.
36055     * Currently, it's used to support backward version
36056     * @constructor
36057     */
36058    FormValidation.Base = function(form, options, namespace) {
36059        this.$form      = $(form);
36060        this.options    = $.extend({}, $.fn.formValidation.DEFAULT_OPTIONS, options);
36061        this._namespace = namespace || 'fv';
36062
36063        this.$invalidFields = $([]);    // Array of invalid fields
36064        this.$submitButton  = null;     // The submit button which is clicked to submit form
36065        this.$hiddenButton  = null;
36066
36067        // Validating status
36068        this.STATUS_NOT_VALIDATED = 'NOT_VALIDATED';
36069        this.STATUS_VALIDATING    = 'VALIDATING';
36070        this.STATUS_INVALID       = 'INVALID';
36071        this.STATUS_VALID         = 'VALID';
36072        this.STATUS_IGNORED       = 'IGNORED';
36073
36074        // Default message
36075        this.DEFAULT_MESSAGE      = $.fn.formValidation.DEFAULT_MESSAGE;
36076
36077        // Determine the event that is fired when user change the field value
36078        // Most modern browsers supports input event except IE 7, 8.
36079        // IE 9 supports input event but the event is still not fired if I press the backspace key.
36080        // Get IE version
36081        // https://gist.github.com/padolsey/527683/#comment-7595
36082        this._ieVersion = (function() {
36083            var v = 3, div = document.createElement('div'), a = div.all || [];
36084            while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]) {}
36085            return v > 4 ? v : document.documentMode;
36086        }());
36087
36088        var el = document.createElement('div');
36089        this._changeEvent = (this._ieVersion === 9 || !('oninput' in el)) ? 'keyup' : 'input';
36090
36091        // The flag to indicate that the form is ready to submit when a remote/callback validator returns
36092        this._submitIfValid = null;
36093
36094        // Field elements
36095        this._cacheFields = {};
36096
36097        this._init();
36098    };
36099
36100    FormValidation.Base.prototype = {
36101        constructor: FormValidation.Base,
36102
36103        /**
36104         * Check if the number of characters of field value exceed the threshold or not
36105         *
36106         * @param {jQuery} $field The field element
36107         * @returns {Boolean}
36108         */
36109        _exceedThreshold: function($field) {
36110            var ns        = this._namespace,
36111                field     = $field.attr('data-' + ns + '-field'),
36112                threshold = this.options.fields[field].threshold || this.options.threshold;
36113            if (!threshold) {
36114                return true;
36115            }
36116            var cannotType = $.inArray($field.attr('type'), ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'reset', 'submit']) !== -1;
36117            return (cannotType || $field.val().length >= threshold);
36118        },
36119
36120        /**
36121         * Init form
36122         */
36123        _init: function() {
36124            var that    = this,
36125                ns      = this._namespace,
36126                options = {
36127                    addOns:         {},
36128                    autoFocus:      this.$form.attr('data-' + ns + '-autofocus'),
36129                    button: {
36130                        selector: this.$form.attr('data-' + ns + '-button-selector') || this.$form.attr('data-' + ns + '-submitbuttons'), // Support backward
36131                        disabled: this.$form.attr('data-' + ns + '-button-disabled')
36132                    },
36133                    control: {
36134                        valid:   this.$form.attr('data-' + ns + '-control-valid'),
36135                        invalid: this.$form.attr('data-' + ns + '-control-invalid')
36136                    },
36137                    err: {
36138                        clazz:     this.$form.attr('data-' + ns + '-err-clazz'),
36139                        container: this.$form.attr('data-' + ns + '-err-container') || this.$form.attr('data-' + ns + '-container'), // Support backward
36140                        parent:    this.$form.attr('data-' + ns + '-err-parent')
36141                    },
36142                    events: {
36143                        formInit:         this.$form.attr('data-' + ns + '-events-form-init'),
36144                        formPreValidate:  this.$form.attr('data-' + ns + '-events-form-prevalidate'),
36145                        formError:        this.$form.attr('data-' + ns + '-events-form-error'),
36146                        formReset:        this.$form.attr('data-' + ns + '-events-form-reset'),
36147                        formSuccess:      this.$form.attr('data-' + ns + '-events-form-success'),
36148                        fieldAdded:       this.$form.attr('data-' + ns + '-events-field-added'),
36149                        fieldRemoved:     this.$form.attr('data-' + ns + '-events-field-removed'),
36150                        fieldInit:        this.$form.attr('data-' + ns + '-events-field-init'),
36151                        fieldError:       this.$form.attr('data-' + ns + '-events-field-error'),
36152                        fieldReset:       this.$form.attr('data-' + ns + '-events-field-reset'),
36153                        fieldSuccess:     this.$form.attr('data-' + ns + '-events-field-success'),
36154                        fieldStatus:      this.$form.attr('data-' + ns + '-events-field-status'),
36155                        localeChanged:    this.$form.attr('data-' + ns + '-events-locale-changed'),
36156                        validatorError:   this.$form.attr('data-' + ns + '-events-validator-error'),
36157                        validatorSuccess: this.$form.attr('data-' + ns + '-events-validator-success'),
36158                        validatorIgnored: this.$form.attr('data-' + ns + '-events-validator-ignored')
36159                    },
36160                    excluded:      this.$form.attr('data-' + ns + '-excluded'),
36161                    icon: {
36162                        valid:      this.$form.attr('data-' + ns + '-icon-valid')      || this.$form.attr('data-' + ns + '-feedbackicons-valid'),      // Support backward
36163                        invalid:    this.$form.attr('data-' + ns + '-icon-invalid')    || this.$form.attr('data-' + ns + '-feedbackicons-invalid'),    // Support backward
36164                        validating: this.$form.attr('data-' + ns + '-icon-validating') || this.$form.attr('data-' + ns + '-feedbackicons-validating'), // Support backward
36165                        feedback:   this.$form.attr('data-' + ns + '-icon-feedback')
36166                    },
36167                    live:          this.$form.attr('data-' + ns + '-live'),
36168                    locale:        this.$form.attr('data-' + ns + '-locale'),
36169                    message:       this.$form.attr('data-' + ns + '-message'),
36170                    onPreValidate: this.$form.attr('data-' + ns + '-onprevalidate'),
36171                    onError:       this.$form.attr('data-' + ns + '-onerror'),
36172                    onReset:       this.$form.attr('data-' + ns + '-onreset'),
36173                    onSuccess:     this.$form.attr('data-' + ns + '-onsuccess'),
36174                    row: {
36175                        selector: this.$form.attr('data-' + ns + '-row-selector') || this.$form.attr('data-' + ns + '-group'), // Support backward
36176                        valid:    this.$form.attr('data-' + ns + '-row-valid'),
36177                        invalid:  this.$form.attr('data-' + ns + '-row-invalid'),
36178                        feedback: this.$form.attr('data-' + ns + '-row-feedback')
36179                    },
36180                    threshold:     this.$form.attr('data-' + ns + '-threshold'),
36181                    trigger:       this.$form.attr('data-' + ns + '-trigger'),
36182                    verbose:       this.$form.attr('data-' + ns + '-verbose'),
36183                    fields:        {}
36184                };
36185
36186            this.$form
36187                // Disable client side validation in HTML 5
36188                .attr('novalidate', 'novalidate')
36189                .addClass(this.options.elementClass)
36190                // Disable the default submission first
36191                .on('submit.' + ns, function(e) {
36192                    e.preventDefault();
36193                    that.validate();
36194                })
36195                .on('click.' + ns, this.options.button.selector, function() {
36196                    that.$submitButton  = $(this);
36197                    // The user just click the submit button
36198                    that._submitIfValid = true;
36199                });
36200
36201            if (this.options.declarative === true || this.options.declarative === 'true') {
36202                // Find all fields which have either "name" or "data-{namespace}-field" attribute
36203                this.$form
36204                    .find('[name], [data-' + ns + '-field]')
36205                    .each(function() {
36206                        var $field = $(this),
36207                            field  = $field.attr('name') || $field.attr('data-' + ns + '-field'),
36208                            opts   = that._parseOptions($field);
36209                        if (opts) {
36210                            $field.attr('data-' + ns + '-field', field);
36211                            options.fields[field] = $.extend({}, opts, options.fields[field]);
36212                        }
36213                    });
36214            }
36215
36216            this.options = $.extend(true, this.options, options);
36217
36218            // Normalize the err.parent option
36219            if ('string' === typeof this.options.err.parent) {
36220                this.options.err.parent = new RegExp(this.options.err.parent);
36221            }
36222
36223            // Support backward
36224            if (this.options.container) {
36225                this.options.err.container = this.options.container;
36226                delete this.options.container;
36227            }
36228            if (this.options.feedbackIcons) {
36229                this.options.icon = $.extend(true, this.options.icon, this.options.feedbackIcons);
36230                delete this.options.feedbackIcons;
36231            }
36232            if (this.options.group) {
36233                this.options.row.selector = this.options.group;
36234                delete this.options.group;
36235            }
36236            if (this.options.submitButtons) {
36237                this.options.button.selector = this.options.submitButtons;
36238                delete this.options.submitButtons;
36239            }
36240
36241            // If the locale is not found, reset it to default one
36242            if (!FormValidation.I18n[this.options.locale]) {
36243                this.options.locale = $.fn.formValidation.DEFAULT_OPTIONS.locale;
36244            }
36245
36246            // Parse the add-on options from HTML attributes
36247            if (this.options.declarative === true || this.options.declarative === 'true') {
36248                this.options = $.extend(true, this.options, { addOns: this._parseAddOnOptions() });
36249            }
36250
36251            // When pressing Enter on any field in the form, the first submit button will do its job.
36252            // The form then will be submitted.
36253            // I create a first hidden submit button
36254            this.$hiddenButton = $('<button/>')
36255                                    .attr('type', 'submit')
36256                                    .prependTo(this.$form)
36257                                    .addClass('fv-hidden-submit')
36258                                    .css({ display: 'none', width: 0, height: 0 });
36259
36260            this.$form
36261                .on('click.' +  this._namespace, '[type="submit"]', function(e) {
36262                    // #746: Check if the button click handler returns false
36263                    if (!e.isDefaultPrevented()) {
36264                        var $target = $(e.target),
36265                            // The button might contain HTML tag
36266                            $button = $target.is('[type="submit"]') ? $target.eq(0) : $target.parent('[type="submit"]').eq(0);
36267
36268                        // Don't perform validation when clicking on the submit button/input which
36269                        // aren't defined by the 'button.selector' option
36270                        if (that.options.button.selector && !$button.is(that.options.button.selector) && !$button.is(that.$hiddenButton)) {
36271                            that.$form.off('submit.' + that._namespace).submit();
36272                            // Fix the issue where 'formnovalidate' causes IE to send two postbacks to server
36273                            return false;
36274                        }
36275                    }
36276                });
36277
36278            for (var field in this.options.fields) {
36279                this._initField(field);
36280            }
36281
36282            // Init the add-ons
36283            for (var addOn in this.options.addOns) {
36284                if ('function' === typeof FormValidation.AddOn[addOn].init) {
36285                    FormValidation.AddOn[addOn].init(this, this.options.addOns[addOn]);
36286                }
36287            }
36288
36289            this.$form.trigger($.Event(this.options.events.formInit), {
36290                bv: this,   // Support backward
36291                fv: this,
36292                options: this.options
36293            });
36294
36295            // Prepare the events
36296            if (this.options.onPreValidate) {
36297                this.$form.on(this.options.events.formPreValidate, function(e) {
36298                    FormValidation.Helper.call(that.options.onPreValidate, [e]);
36299                });
36300            }
36301            if (this.options.onSuccess) {
36302                this.$form.on(this.options.events.formSuccess, function(e) {
36303                    FormValidation.Helper.call(that.options.onSuccess, [e]);
36304                });
36305            }
36306            if (this.options.onError) {
36307                this.$form.on(this.options.events.formError, function(e) {
36308                    FormValidation.Helper.call(that.options.onError, [e]);
36309                });
36310            }
36311            if (this.options.onReset) {
36312                this.$form.on(this.options.events.formReset, function(e) {
36313                    FormValidation.Helper.call(that.options.onReset, [e]);
36314                });
36315            }
36316        },
36317
36318        /**
36319         * Init field
36320         *
36321         * @param {String|jQuery} field The field name or field element
36322         */
36323        _initField: function(field) {
36324            var ns     = this._namespace,
36325                fields = $([]);
36326            switch (typeof field) {
36327                case 'object':
36328                    fields = field;
36329                    field  = field.attr('data-' + ns + '-field');
36330                    break;
36331                case 'string':
36332                    fields = this.getFieldElements(field);
36333                    fields.attr('data-' + ns + '-field', field);
36334                    break;
36335                default:
36336                    break;
36337            }
36338
36339            // We don't need to validate non-existing fields
36340            if (fields.length === 0) {
36341                return;
36342            }
36343
36344            if (this.options.fields[field] === null || this.options.fields[field].validators === null) {
36345                return;
36346            }
36347
36348            var validators = this.options.fields[field].validators,
36349                validatorName,
36350                alias;
36351            for (validatorName in validators) {
36352                alias = validators[validatorName].alias || validatorName;
36353                if (!FormValidation.Validator[alias]) {
36354                    delete this.options.fields[field].validators[validatorName];
36355                }
36356            }
36357            if (this.options.fields[field].enabled === null) {
36358                this.options.fields[field].enabled = true;
36359            }
36360
36361            var that      = this,
36362                total     = fields.length,
36363                type      = fields.attr('type'),
36364                updateAll = (total === 1) || ('radio' === type) || ('checkbox' === type),
36365                trigger   = this._getFieldTrigger(fields.eq(0)),
36366                clazz     = this.options.err.clazz.split(' ').join('.'),
36367                events    = $.map(trigger, function(item) {
36368                    return item + '.update.' + ns;
36369                }).join(' ');
36370
36371            for (var i = 0; i < total; i++) {
36372                var $field    = fields.eq(i),
36373                    row       = this.options.fields[field].row || this.options.row.selector,
36374                    $parent   = $field.closest(row),
36375                    // Allow user to indicate where the error messages are shown
36376                    // Support backward
36377                    container = ('function' === typeof (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container))
36378                                ? (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container).call(this, $field, this)
36379                                : (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container),
36380                    $message  = (container && container !== 'tooltip' && container !== 'popover') ? $(container) : this._getMessageContainer($field, row);
36381
36382                if (container && container !== 'tooltip' && container !== 'popover') {
36383                    $message.addClass(this.options.err.clazz);
36384                }
36385
36386                // Remove all error messages and feedback icons
36387                $message.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]').remove();
36388                $parent.find('i[data-' + ns + '-icon-for="' + field + '"]').remove();
36389
36390                // Whenever the user change the field value, mark it as not validated yet
36391                $field.off(events).on(events, function() {
36392                    that.updateStatus($(this), that.STATUS_NOT_VALIDATED);
36393                });
36394
36395                // Create help block elements for showing the error messages
36396                $field.data(ns + '.messages', $message);
36397                for (validatorName in validators) {
36398                    $field.data(ns + '.result.' + validatorName, this.STATUS_NOT_VALIDATED);
36399
36400                    if (!updateAll || i === total - 1) {
36401                        $('<small/>')
36402                            .css('display', 'none')
36403                            .addClass(this.options.err.clazz)
36404                            .attr('data-' + ns + '-validator', validatorName)
36405                            .attr('data-' + ns + '-for', field)
36406                            .attr('data-' + ns + '-result', this.STATUS_NOT_VALIDATED)
36407                            .html(this._getMessage(field, validatorName))
36408                            .appendTo($message);
36409                    }
36410
36411                    // Init the validator
36412                    alias = validators[validatorName].alias || validatorName;
36413                    if ('function' === typeof FormValidation.Validator[alias].init) {
36414                        FormValidation.Validator[alias].init(this, $field, this.options.fields[field].validators[validatorName], validatorName);
36415                    }
36416                }
36417
36418                // Prepare the feedback icons
36419                if (this.options.fields[field].icon !== false && this.options.fields[field].icon !== 'false'
36420                    && this.options.icon
36421                    && this.options.icon.valid && this.options.icon.invalid && this.options.icon.validating
36422                    && (!updateAll || i === total - 1))
36423                {
36424                    // $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid).addClass(this.options.row.feedback);
36425                    // Keep error messages which are populated from back-end
36426                    $parent.addClass(this.options.row.feedback);
36427                    var $icon = $('<i/>')
36428                                    .css('display', 'none')
36429                                    .addClass(this.options.icon.feedback)
36430                                    .attr('data-' + ns + '-icon-for', field)
36431                                    .insertAfter($field);
36432
36433                    // Store the icon as a data of field element
36434                    (!updateAll ? $field : fields).data(ns + '.icon', $icon);
36435
36436                    if ('tooltip' === container || 'popover' === container) {
36437                        (!updateAll ? $field : fields)
36438                            .on(this.options.events.fieldError, function() {
36439                                $parent.addClass('fv-has-tooltip');
36440                            })
36441                            .on(this.options.events.fieldSuccess, function() {
36442                                $parent.removeClass('fv-has-tooltip');
36443                            });
36444
36445                        $field
36446                            // Show tooltip/popover message when field gets focu
36446s
36447                            .off('focus.container.' + ns)
36448                            .on('focus.container.' + ns, function() {
36449                                that._showTooltip($(this), container);
36450                            })
36451                            // and hide them when losing focus
36452                            .off('blur.container.' + ns)
36453                            .on('blur.container.' + ns, function() {
36454                                that._hideTooltip($(this), container);
36455                            });
36456                    }
36457
36458                    if ('string' === typeof this.options.fields[field].icon && this.options.fields[field].icon !== 'true') {
36459                        $icon.appendTo($(this.options.fields[field].icon));
36460                    } else {
36461                        this._fixIcon($field, $icon);
36462                    }
36463                }
36464            }
36465
36466            // Sort the validators by priority
36467            var sortedByPriority = [];
36468            for (validatorName in validators) {
36469                alias = validators[validatorName].alias || validatorName;
36470
36471                // Determine the priority
36472                validators[validatorName].priority = parseInt(validators[validatorName].priority
36473                                                            || FormValidation.Validator[alias].priority
36474                                                            || 1, 10);
36475                sortedByPriority.push({
36476                    validator: validatorName,
36477                    priority: validators[validatorName].priority
36478                });
36479            }
36480            sortedByPriority = sortedByPriority.sort(function(a, b) {
36481                return a.priority - b.priority;
36482            });
36483
36484            // Prepare the events
36485            fields
36486                .data(ns + '.validators', sortedByPriority)
36487                .on(this.options.events.fieldSuccess, function(e, data) {
36488                    var onSuccess = that.getOptions(data.field, null, 'onSuccess');
36489                    if (onSuccess) {
36490                        FormValidation.Helper.call(onSuccess, [e, data]);
36491                    }
36492                })
36493                .on(this.options.events.fieldError, function(e, data) {
36494                    var onError = that.getOptions(data.field, null, 'onError');
36495                    if (onError) {
36496                        FormValidation.Helper.call(onError, [e, data]);
36497                    }
36498                })
36499                .on(this.options.events.fieldReset, function(e, data) {
36500                    var onReset = that.getOptions(data.field, null, 'onReset');
36501                    if (onReset) {
36502                        FormValidation.Helper.call(onReset, [e, data]);
36503                    }
36504                })
36505                .on(this.options.events.fieldStatus, function(e, data) {
36506                    var onStatus = that.getOptions(data.field, null, 'onStatus');
36507                    if (onStatus) {
36508                        FormValidation.Helper.call(onStatus, [e, data]);
36509                    }
36510                })
36511                .on(this.options.events.validatorError, function(e, data) {
36512                    var onError = that.getOptions(data.field, data.validator, 'onError');
36513                    if (onError) {
36514                        FormValidation.Helper.call(onError, [e, data]);
36515                    }
36516                })
36517                .on(this.options.events.validatorIgnored, function(e, data) {
36518                    var onIgnored = that.getOptions(data.field, data.validator, 'onIgnored');
36519                    if (onIgnored) {
36520                        FormValidation.Helper.call(onIgnored, [e, data]);
36521                    }
36522                })
36523                .on(this.options.events.validatorSuccess, function(e, data) {
36524                    var onSuccess = that.getOptions(data.field, data.validator, 'onSuccess');
36525                    if (onSuccess) {
36526                        FormValidation.Helper.call(onSuccess, [e, data]);
36527                    }
36528                });
36529
36530            // Set live mode
36531            this.onLiveChange(fields, 'live', function() {
36532                if (that._exceedThreshold($(this))) {
36533                    that.validateField($(this));
36534                }
36535            });
36536
36537            fields.trigger($.Event(this.options.events.fieldInit), {
vendor: 4,652 bytes, lines 36538-36636
36538                bv: this,   // Support backward
36539                fv: this,
36540                field: field,
36541                element: fields
36542            });
36543        },
36544
36545        /**
36546         * Check if the field is excluded.
36547         * Returning true means that the field will not be validated
36548         *
36549         * @param {jQuery} $field The field element
36550         * @returns {Boolean}
36551         */
36552        _isExcluded: function($field) {
36553            var ns           = this._namespace,
36554                excludedAttr = $field.attr('data-' + ns + '-excluded'),
36555                // I still need to check the 'name' attribute while initializing the field
36556                field        = $field.attr('data-' + ns + '-field') || $field.attr('name');
36557
36558            switch (true) {
36559                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'true' || this.options.fields[field].excluded === true)):
36560                case (excludedAttr === 'true'):
36561                case (excludedAttr === ''):
36562                    return true;
36563
36564                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'false' || this.options.fields[field].excluded === false)):
36565                case (excludedAttr === 'false'):
36566                    return false;
36567
36568                case (!!field && this.options.fields && this.options.fields[field] && 'function' === typeof this.options.fields[field].excluded):
36569                    return this.options.fields[field].excluded.call(this, $field, this);
36570
36571                case (!!field && this.options.fields && this.options.fields[field] && 'string' === typeof this.options.fields[field].excluded):
36572                case (excludedAttr):
36573                    return FormValidation.Helper.call(this.options.fields[field].excluded, [$field, this]);
36574
36575                default:
36576                    if (this.options.excluded) {
36577                        // Convert to array first
36578                        if ('string' === typeof this.options.excluded) {
36579                            this.options.excluded = $.map(this.options.excluded.split(','), function(item) {
36580                                // Trim the spaces
36581                                return $.trim(item);
36582                            });
36583                        }
36584
36585                        var length = this.options.excluded.length;
36586                        for (var i = 0; i < length; i++) {
36587                            if (('string' === typeof this.options.excluded[i] && $field.is(this.options.excluded[i]))
36588                                || ('function' === typeof this.options.excluded[i] && this.options.excluded[i].call(this, $field, this) === true))
36589                            {
36590                                return true;
36591                            }
36592                        }
36593                    }
36594                    return false;
36595            }
36596        },
36597
36598        /**
36599         * Get a field changed trigger event
36600         *
36601         * @param {jQuery} $field The field element
36602         * @returns {String[]} The event names triggered on field change
36603         */
36604        _getFieldTrigger: function($field) {
36605            var ns      = this._namespace,
36606                trigger = $field.data(ns + '.trigger');
36607            if (trigger) {
36608                return trigger;
36609            }
36610
36611            // IE10/11 auto fires input event of elements using the placeholder attribute
36612            // https://connect.microsoft.com/IE/feedback/details/856700/
36613            var type  = $field.attr('type'),
36614                name  = $field.attr('data-' + ns + '-field'),
36615                event = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === $field.get(0).tagName)
36616                        ? 'change'
36617                        : (this._ieVersion >= 10 && $field.attr('placeholder') ? 'keyup' : this._changeEvent);
36618            trigger   = ((this.options.fields[name] ? this.options.fields[name].trigger : null) || this.options.trigger || event).split(' ');
36619
36620            // Since the trigger data is used many times, I need to cache it to use later
36621            $field.data(ns + '.trigger', trigger);
36622
36623            return trigger;
36624        },
36625
36626        /**
36627         * Get the error message for given field and validator
36628         *
36629         * @param {String} field The field name
36630         * @param {String} validatorName The validator name
36631         * @returns {String}
36632         */
36633        _getMessage: function(field, validatorName) {
36634            if (!this.options.fields[field] || !this.options.fields[field].validators) {
36635                return '';
36636            }
36637            var validators = this.options.fields[field].validators,
36638                alias      = (validators[validatorName] && validators[validatorName].alias) ? validators[validatorName].alias : validatorName;
36639            if (!FormValidation.Validator[alias]) {
36640                return '';
36641            }
36642
36643            switch (true) {
36644                case !!validators[validatorName].message:
36645                    return validators[validatorName].message;
36646                case !!this.options.fields[field].message:
36647                    return this.options.fields[field].message;
36648                case !!this.options.message:
36649                    return this.options.message;
36650                case (!!FormValidation.I18n[this.options.locale] && !!FormValidation.I18n[this.options.locale][alias] && !!FormValidation.I18n[this.options.locale][alias]['default']):
36651                    return FormValidation.I18n[this.options.locale][alias]['default'];
36652                default:
36653                    return this.DEFAULT_MESSAGE;
36654            }
36655        },
36656
36657        /**
36658         * Get the element to place the error messages
36659         *
36660         * @param {jQuery} $field The field element
36661         * @param {String} row
36662         * @returns {jQuery}
36663         */
36664        _getMessageContainer: function($field, row) {
36665            if (!this.options.err.parent) {
36666                throw new Error('The err.parent option is not defined');
36667            }
36668
36669            var $parent = $field.parent();
36670            if ($parent.is(row)) {
36671                return $parent;
36672            }
36673
36674            var cssClasses = $parent.attr('class');
36675            if (!cssClasses) {
36676                return this._getMessageContainer($parent, row);
36677            }
36678
36679            if (this.options.err.parent.test(cssClasses)) {
36680                return $parent;
36681            }
36682
36683            return this._getMessageContainer($parent, row);
36684        },
36685
36686        /**
36687         * Parse the add-on options from HTML attributes
36688         *
36689         * @returns {Object}
36690         */
36691        _parseAddOnOptions: function() {
36692            var ns     = this._namespace,
36693                names  = this.$form.attr('data-' + ns + '-addons'),
36694                addOns = this.options.addOns || {};
36695
36696            if (names) {
36697                names = names.replace(/\s/g, '').split(',');
36698                for (var i = 0; i < names.length; i++) {
36699                    if (!addOns[names[i]]) {
36700                        addOns[names[i]] = {};
36701                    }
36702                }
36703            }
36704
36705            // Try to parse each add-on options
36706            var addOn, attrMap, attr, option;
36707            for (addOn in addOns) {
36708                if (!FormValidation.AddOn[addOn]) {
36709                    // Add-on is not found
36710                    delete addOns[addOn];
36711                    continue;
36712                }
36713
36714                attrMap = FormValidation.AddOn[addOn].html5Attributes;
36715                if (attrMap) {
36716                    for (attr in attrMap) {
36717                        option = this.$form.attr('data-' + ns + '-addons-' + addOn.toLowerCase() + '-' + attr.toLowerCase());
36718                        if (option) {
36719                            addOns[addOn][attrMap[attr]] = option;
36720                        }
36721                    }
36722                }
36723            }
36724
36725            return addOns;
36726        },
36727
36728        /**
36729         * Parse the validator options from HTML attributes
36730         *
36731         * @param {jQuery} $field The field element
36732         * @returns {Object}
36733         */
36734        _parseOptions: function($field) {
36735            var ns           = this._namespace,
36736                field        = $field.attr('name') || $field.attr('data-' + ns + '-field'),
36737                validators   = {},
36738                aliasAttr    = new RegExp('^data-' + ns + '-([a-z]+)-alias$'),
36739                validatorSet = $.extend({}, FormValidation.Validator),
36740                validator,
36741                v,          // Validator name
36742                attrName,
36743                enabled,
36744                optionName,
36745                optionAttrName,
36746                optionValue,
36747                html5AttrName,
36748                html5AttrMap;
36749
36750            // Determine whether the alias validator is used by checking the data-fv-validator-alias attribute
36751            $.each($field.get(0).attributes, function(i, attribute) {
36752                if (attribute.value && aliasAttr.test(attribute.name)) {
36753                    v = attribute.name.split('-')[2];
36754                    if (validatorSet[attribute.value]) {
36755                        validatorSet[v]       = validatorSet[attribute.value];
36756                        validatorSet[v].alias = attribute.value;
36757                    }
36758                }
36759            });
36760
36761            for (v in validatorSet) {
36762                validator    = validatorSet[v];
36763                attrName     = 'data-' + ns + '-' + v.toLowerCase(),
36764                enabled      = $field.attr(attrName) + '';
36765                html5AttrMap = ('function' === typeof validator.enableByHtml5) ? validator.enableByHtml5($field) : null;
36766
36767                if ((html5AttrMap && enabled !== 'false')
36768                    || (html5AttrMap !== true && ('' === enabled || 'true' === enabled || attrName === enabled.toLowerCase())))
36769                {
36770                    // Try to parse the options via attributes
36771                    validator.html5Attributes = $.extend({}, {
36772                                                    message: 'message',
36773                                                    onerror: 'onError',
36774                                                    onreset: 'onReset',
36775                                                    onsuccess: 'onSuccess',
36776                                                    priority: 'priority',
36777                                                    transformer: 'transformer'
36778                                                }, validator.html5Attributes);
36779                    validators[v] = $.extend({}, html5AttrMap === true ? {} : html5AttrMap, validators[v]);
36780                    if (validator.alias) {
36781                        validators[v].alias = validator.alias;
36782                    }
36783
36784                    for (html5AttrName in validator.html5Attributes) {
36785                        optionName     = validator.html5Attributes[html5AttrName];
36786                        optionAttrName = 'data-' + ns + '-' + v.toLowerCase() + '-' + html5AttrName;
36787                        optionValue    = $field.attr(optionAttrName);
36788                        if (optionValue) {
36789                            if ('true' === optionValue || optionAttrName === optionValue.toLowerCase()) {
36790                                optionValue = true;
36791                            } else if ('false' === optionValue) {
36792                                optionValue = false;
vendor: 2,220 bytes, lines 36793-36823
36793                            }
36794                            validators[v][optionName] = optionValue;
36795                        }
36796                    }
36797                }
36798            }
36799
36800            var opts = {
36801                    autoFocus:   $field.attr('data-' + ns + '-autofocus'),
36802                    err:         $field.attr('data-' + ns + '-err-container') || $field.attr('data-' + ns + '-container'), // Support backward
36803                    enabled:     $field.attr('data-' + ns + '-enabled'),
36804                    excluded:    $field.attr('data-' + ns + '-excluded'),
36805                    icon:        $field.attr('data-' + ns + '-icon') || $field.attr('data-' + ns + '-feedbackicons') || (this.options.fields && this.options.fields[field] ? this.options.fields[field].feedbackIcons : null), // Support backward
36806                    message:     $field.attr('data-' + ns + '-message'),
36807                    onError:     $field.attr('data-' + ns + '-onerror'),
36808                    onReset:     $field.attr('data-' + ns + '-onreset'),
36809                    onStatus:    $field.attr('data-' + ns + '-onstatus'),
36810                    onSuccess:   $field.attr('data-' + ns + '-onsuccess'),
36811                    row:         $field.attr('data-' + ns + '-row') || $field.attr('data-' + ns + '-group') || (this.options.fields && this.options.fields[field] ? this.options.fields[field].group : null), // Support backward
36812                    selector:    $field.attr('data-' + ns + '-selector'),
36813                    threshold:   $field.attr('data-' + ns + '-threshold'),
36814                    transformer: $field.attr('data-' + ns + '-transformer'),
36815                    trigger:     $field.attr('data-' + ns + '-trigger'),
36816                    verbose:     $field.attr('data-' + ns + '-verbose'),
36817                    validators:  validators
36818                },
36819                emptyOptions    = $.isEmptyObject(opts),        // Check if the field options are set using HTML attributes
36820                emptyValidators = $.isEmptyObject(validators);  // Check if the field validators are set using HTML attributes
36821
36822            if (!emptyValidators || (!emptyOptions && this.options.fields && this.options.fields[field])) {
36823                //
vendor: 16,222 bytes, lines 36823-37260
36823opts.validators = validators;
36824                return opts;
36825            } else {
36826                return null;
36827            }
36828        },
36829
36830        /**
36831         * Called when all validations are completed
36832         */
36833        _submit: function() {
36834            var isValid = this.isValid();
36835            if (isValid === null) {
36836                return;
36837            }
36838
36839            var eventType = isValid ? this.options.events.formSuccess : this.options.events.formError,
36840                e         = $.Event(eventType);
36841
36842            this.$form.trigger(e);
36843
36844            // Call default handler
36845            // Check if whether the submit button is clicked
36846            if (this.$submitButton) {
36847                isValid ? this._onSuccess(e) : this._onError(e);
36848            }
36849        },
36850
36851        // ~~~~~~
36852        // Events
36853        // ~~~~~~
36854
36855        /**
36856         * The default handler of error.form.fv event.
36857         * It will be called when there is a invalid field
36858         *
36859         * @param {jQuery.Event} e The jQuery event object
36860         */
36861        _onError: function(e) {
36862            if (e.isDefaultPrevented()) {
36863                return;
36864            }
36865
36866            if ('submitted' === this.options.live) {
36867                // Enable live mode
36868                this.options.live = 'enabled';
36869
36870                var that = this;
36871                for (var field in this.options.fields) {
36872                    (function(f) {
36873                        var fields  = that.getFieldElements(f);
36874                        if (fields.length) {
36875                            that.onLiveChange(fields, 'live', function() {
36876                                if (that._exceedThreshold($(this))) {
36877                                    that.validateField($(this));
36878                                }
36879                            });
36880                        }
36881                    })(field);
36882                }
36883            }
36884
36885            // Determined the first invalid field which will be focused on automatically
36886            var ns = this._namespace;
36887            for (var i = 0; i < this.$invalidFields.length; i++) {
36888                var $field    = this.$invalidFields.eq(i),
36889                    autoFocus = this.isOptionEnabled($field.attr('data-' + ns + '-field'), 'autoFocus');
36890                if (autoFocus) {
36891                    // Focus the field
36892                    $field.focus();
36893                    break;
36894                }
36895            }
36896        },
36897
36898        /**
36899         * Called after validating a field element
36900         *
36901         * @param {jQuery} $field The field element
36902         * @param {String} [validatorName] The validator name
36903         */
36904        _onFieldValidated: function($field, validatorName) {
36905            var ns            = this._namespace,
36906                field         = $field.attr('data-' + ns + '-field'),
36907                validators    = this.options.fields[field].validators,
36908                counter       = {},
36909                numValidators = 0,
36910                data          = {
36911                    bv: this,   // Support backward
36912                    fv: this,
36913                    field: field,
36914                    element: $field,
36915                    validator: validatorName,
36916                    result: $field.data(ns + '.response.' + validatorName)
36917                };
36918
36919            // Trigger an event after given validator completes
36920            if (validatorName) {
36921                switch ($field.data(ns + '.result.' + validatorName)) {
36922                    case this.STATUS_INVALID:
36923                        $field.trigger($.Event(this.options.events.validatorError), data);
36924                        break;
36925                    case this.STATUS_VALID:
36926                        $field.trigger($.Event(this.options.events.validatorSuccess), data);
36927                        break;
36928                    case this.STATUS_IGNORED:
36929                        $field.trigger($.Event(this.options.events.validatorIgnored), data);
36930                        break;
36931                    default:
36932                        break;
36933                }
36934            }
36935
36936            counter[this.STATUS_NOT_VALIDATED] = 0;
36937            counter[this.STATUS_VALIDATING]    = 0;
36938            counter[this.STATUS_INVALID]       = 0;
36939            counter[this.STATUS_VALID]         = 0;
36940            counter[this.STATUS_IGNORED]       = 0;
36941
36942            for (var v in validators) {
36943                if (validators[v].enabled === false) {
36944                    continue;
36945                }
36946
36947                numValidators++;
36948                var result = $field.data(ns + '.result.' + v);
36949                if (result) {
36950                    counter[result]++;
36951                }
36952            }
36953
36954            // The sum of valid fields now also include ignored fields
36955            if (counter[this.STATUS_VALID] + counter[this.STATUS_IGNORED] === numValidators) {
36956                // Remove from the list of invalid fields
36957                this.$invalidFields = this.$invalidFields.not($field);
36958
36959                $field.trigger($.Event(this.options.events.fieldSuccess), data);
36960            }
36961            // If all validators are completed and there is at least one validator which doesn't pass
36962            else if ((counter[this.STATUS_NOT_VALIDATED] === 0 || !this.isOptionEnabled(field, 'verbose')) && counter[this.STATUS_VALIDATING] === 0 && counter[this.STATUS_INVALID] > 0) {
36963                // Add to the list of invalid fields
36964                this.$invalidFields = this.$invalidFields.add($field);
36965
36966                $field.trigger($.Event(this.options.events.fieldError), data);
36967            }
36968        },
36969
36970        /**
36971         * The default handler of success.form.fv event.
36972         * It will be called when all the fields are valid
36973         *
36974         * @param {jQuery.Event} e The jQuery event object
36975         */
36976        _onSuccess: function(e) {
36977            if (e.isDefaultPrevented()) {
36978                return;
36979            }
36980
36981            // Submit the form
36982            this.disableSubmitButtons(true).defaultSubmit();
36983        },
36984
36985        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36986        // Abstract methods
36987        // Need to be implemented by sub-class that supports specific framework
36988        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36989
36990        /**
36991         * Specific framework might need to adjust the icon position
36992         *
36993         * @param {jQuery} $field The field element
36994         * @param {jQuery} $icon The icon element
36995         */
36996        _fixIcon: function($field, $icon) {
36997        },
36998
36999        /**
37000         * Create a tooltip or popover
37001         * It will be shown when focusing on the field
37002         *
37003         * @param {jQuery} $field The field element
37004         * @param {String} message The message
37005         * @param {String} type Can be 'tooltip' or 'popover'
37006         */
37007        _createTooltip: function($field, message, type) {
37008        },
37009
37010        /**
37011         * Destroy the tooltip or popover
37012         *
37013         * @param {jQuery} $field The field element
37014         * @param {String} type Can be 'tooltip' or 'popover'
37015         */
37016        _destroyTooltip: function($field, type) {
37017        },
37018
37019        /**
37020         * Hide a tooltip or popover
37021         *
37022         * @param {jQuery} $field The field element
37023         * @param {String} type Can be 'tooltip' or 'popover'
37024         */
37025        _hideTooltip: function($field, type) {
37026        },
37027
37028        /**
37029         * Show a tooltip or popover
37030         *
37031         * @param {jQuery} $field The field element
37032         * @param {String} type Can be 'tooltip' or 'popover'
37033         */
37034        _showTooltip: function($field, type) {
37035        },
37036
37037        // ~~~~~~~~~~~~~~
37038        // Public methods
37039        // ~~~~~~~~~~~~~~
37040
37041        /**
37042         * Submit the form using default submission.
37043         * It also does not perform any validations when submitting the form
37044         */
37045        defaultSubmit: function() {
37046            var ns = this._namespace;
37047            if (this.$submitButton) {
37048                // Create hidden input to send the submit buttons
37049                $('<input/>')
37050                    .attr({
37051                        'type': 'hidden',
37052                        name: this.$submitButton.attr('name')
37053                    })
37054                    .attr('data-' + ns + '-submit-hidden', '')
37055                    .val(this.$submitButton.val())
37056                    .appendTo(this.$form);
37057            }
37058
37059            // Submit form
37060            this.$form.off('submit.' + ns).submit();
37061        },
37062
37063        /**
37064         * Disable/enable submit buttons
37065         *
37066         * @param {Boolean} disabled Can be true or false
37067         * @returns {FormValidation.Base}
37068         */
37069        disableSubmitButtons: function(disabled) {
37070            if (!disabled) {
37071                this.$form
37072                    .find(this.options.button.selector)
37073                        .removeAttr('disabled')
37074                        .removeClass(this.options.button.disabled);
37075            } else if (this.options.live !== 'disabled') {
37076                // Don't disable if the live validating mode is disabled
37077                this.$form
37078                    .find(this.options.button.selector)
37079                        .attr('disabled', 'disabled')
37080                        .addClass(this.options.button.disabled);
37081            }
37082
37083            return this;
37084        },
37085
37086        /**
37087         * Retrieve the field elements by given name
37088         *
37089         * @param {String} field The field name
37090         * @returns {null|jQuery[]}
37091         */
37092        getFieldElements: function(field) {
37093            if (!this._cacheFields[field]) {
37094                if (this.options.fields[field] && this.options.fields[field].selector) {
37095                    // Look for the field inside the form first
37096                    var f = this.$form.find(this.options.fields[field].selector);
37097                    // If not found, search in entire document
37098                    this._cacheFields[field] = f.length ? f : $(this.options.fields[field].selector);
37099                } else {
37100                    this._cacheFields[field] = this.$form.find('[name="' + field + '"]');
37101                }
37102            }
37103
37104            return this._cacheFields[field];
37105        },
37106
37107        /**
37108         * Get the field value after applying transformer
37109         *
37110         * @param {String|jQuery} field The field name or field element
37111         * @param {String} validatorName The validator name
37112         * @returns {String}
37113         */
37114        getFieldValue: function(field, validatorName) {
37115            var $field, ns = this._namespace;
37116            if ('string' === typeof field) {
37117                $field = this.getFieldElements(field);
37118                if ($field.length === 0) {
37119                    return null;
37120                }
37121            } else {
37122                $field = field;
37123                field  = $field.attr('data-' + ns + '-field');
37124            }
37125
37126            if (!field || !this.options.fields[field]) {
37127                return $field.val();
37128            }
37129
37130            var transformer = (this.options.fields[field].validators && this.options.fields[field].validators[validatorName]
37131                                ? this.options.fields[field].validators[validatorName].transformer : null)
37132                                || this.options.fields[field].transformer;
37133            return transformer ? FormValidation.Helper.call(transformer, [$field, validatorName, this]) : $field.val();
37134        },
37135
37136        /**
37137         * Get the namespace
37138         *
37139         * @returns {String}
37140         */
37141        getNamespace: function() {
37142            return this._namespace;
37143        },
37144
37145        /**
37146         * Get the field options
37147         *
37148         * @param {String|jQuery} [field] The field name or field element. If it is not set, the method returns the form options
37149         * @param {String} [validator] The name of validator. It null, the method returns form options
37150         * @param {String} [option] The option name
37151         * @return {String|Object}
37152         */
37153        getOptions: function(field, validator, option) {
37154            var ns = this._namespace;
37155            if (!field) {
37156                return option ? this.options[option] : this.options;
37157            }
37158            if ('object' === typeof field) {
37159                field = field.attr('data-' + ns + '-field');
37160            }
37161            if (!this.options.fields[field]) {
37162                return null;
37163            }
37164
37165            var options = this.options.fields[field];
37166            if (!validator) {
37167                return option ? options[option] : options;
37168            }
37169            if (!options.validators || !options.validators[validator]) {
37170                return null;
37171            }
37172
37173            return option ? options.validators[validator][option] : options.validators[validator];
37174        },
37175
37176        /**
37177         * Get the validating result of field
37178         *
37179         * @param {String|jQuery} field The field name or field element
37180         * @param {String} validatorName The validator name
37181         * @returns {String} The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID', 'VALID' or 'IGNORED'
37182         */
37183        getStatus: function(field, validatorName) {
37184            var ns = this._namespace;
37185            switch (typeof field) {
37186                case 'object':
37187                    return field.data(ns + '.result.' + validatorName);
37188                case 'string':
37189                /* falls through */
37190                default:
37191                    return this.getFieldElements(field).eq(0).data(ns + '.result.' + validatorName);
37192            }
37193        },
37194
37195        /**
37196         * Check whether or not a field option is enabled
37197         *
37198         * @param {String} field The field name
37199         * @param {String} option The option name, "verbose", "autoFocus", for example
37200         * @returns {Boolean}
37201         */
37202        isOptionEnabled: function(field, option) {
37203            if (this.options.fields[field] && (this.options.fields[field][option] === 'true' || this.options.fields[field][option] === true)) {
37204                return true;
37205            }
37206            if (this.options.fields[field] && (this.options.fields[field][option] === 'false' || this.options.fields[field][option] === false)) {
37207                return false;
37208            }
37209            return this.options[option] === 'true' || this.options[option] === true;
37210        },
37211
37212        /**
37213         * Check the form validity
37214         *
37215         * @returns {Boolean|null} Returns one of three values
37216         * - true, if all fields are valid
37217         * - false, if there is one invalid field
37218         * - null, if there is at least one field which is not validated yet or being validated
37219         */
37220        isValid: function() {
37221            for (var field in this.options.fields) {
37222                var isValidField = this.isValidField(field);
37223                if (isValidField === null) {
37224                    return null;
37225                }
37226                if (isValidField === false) {
37227                    return false;
37228                }
37229            }
37230
37231            return true;
37232        },
37233
37234        /**
37235         * Check if all fields inside a given container are valid.
37236         * It's useful when working with a wizard-like such as tab, collapse
37237         *
37238         * @param {String|jQuery} container The container selector or element
37239         * @returns {Boolean|null} Returns one of three values
37240         * - true, if all fields inside the container are valid
37241         * - false, if there is one invalid field inside the container
37242         * - null, if the container consists of at least one field which is not validated yet or being validated
37243         */
37244        isValidContainer: function(container) {
37245            var that       = this,
37246                ns         = this._namespace,
37247                fields     = [],
37248                $container = ('string' === typeof container) ? $(container) : container;
37249            if ($container.length === 0) {
37250                return true;
37251            }
37252
37253            $container.find('[data-' + ns + '-field]').each(function() {
37254                var $field = $(this);
37255                if (!that._isExcluded($field)) {
37256                    fields.push($field);
37257                }
37258            });
37259
37260            var total = fields.length
vendor: 45,154 bytes, lines 37260-38327
37260,
37261                clazz = this.options.err.clazz.split(' ').join('.');
37262            for (var i = 0; i < total; i++) {
37263                var $f      = fields[i],
37264                    field   = $f.attr('data-' + ns + '-field'),
37265                    $errors = $f.data(ns + '.messages')
37266                                .find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]');
37267
37268                if (this.options.fields && this.options.fields[field]
37269                    && (this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false))
37270                {
37271                    continue;
37272                }
37273
37274                if ($errors.filter('[data-' + ns + '-result="' + this.STATUS_INVALID + '"]').length > 0) {
37275                    return false;
37276                }
37277
37278                // If the field is not validated
37279                if ($errors.filter('[data-' + ns + '-result="' + this.STATUS_NOT_VALIDATED + '"]').length > 0
37280                    || $errors.filter('[data-' + ns + '-result="' + this.STATUS_VALIDATING + '"]').length > 0)
37281                {
37282                    return null;
37283                }
37284            }
37285
37286            return true;
37287        },
37288
37289        /**
37290         * Check if the field is valid or not
37291         *
37292         * @param {String|jQuery} field The field name or field element
37293         * @returns {Boolean|null} Returns one of three values
37294         * - true, if the field passes all validators
37295         * - false, if the field doesn't pass any validator
37296         * - null, if there is at least one validator which isn't validated yet or being validated
37297         */
37298        isValidField: function(field) {
37299            var ns     = this._namespace,
37300                fields = $([]);
37301            switch (typeof field) {
37302                case 'object':
37303                    fields = field;
37304                    field  = field.attr('data-' + ns + '-field');
37305                    break;
37306                case 'string':
37307                    fields = this.getFieldElements(field);
37308                    break;
37309                default:
37310                    break;
37311            }
37312            if (fields.length === 0 || !this.options.fields[field]
37313                || this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false)
37314            {
37315                return true;
37316            }
37317
37318            var type  = fields.attr('type'),
37319                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,
37320                $field, validatorName, status;
37321            for (var i = 0; i < total; i++) {
37322                $field = fields.eq(i);
37323                if (this._isExcluded($field)) {
37324                    continue;
37325                }
37326
37327                for (validatorName in this.options.fields[field].validators) {
37328                    if (this.options.fields[field].validators[validatorName].enabled === false) {
37329                        continue;
37330                    }
37331
37332                    status = $field.data(ns + '.result.' + validatorName);
37333                    if (status === this.STATUS_VALIDATING || status === this.STATUS_NOT_VALIDATED) {
37334                        return null;
37335                    } else if (status === this.STATUS_INVALID) {
37336                        return false;
37337                    }
37338                }
37339            }
37340
37341            return true;
37342        },
37343
37344        /**
37345         * Detach a handler function for a field live change event
37346         *
37347         * @param {jQuery[]} $fields The field elements
37348         * @param {String} namespace The event namespace
37349         * @returns {FormValidation.Base}
37350         */
37351        offLiveChange: function($fields, namespace) {
37352            if ($fields === null || $fields.length === 0) {
37353                return this;
37354            }
37355
37356            var ns      = this._namespace,
37357                trigger = this._getFieldTrigger($fields.eq(0)),
37358                events  = $.map(trigger, function(item) {
37359                    return item + '.' + namespace + '.' + ns;
37360                }).join(' ');
37361
37362            $fields.off(events);
37363            return this;
37364        },
37365
37366        /**
37367         * Attach a handler function for a field live change event
37368         *
37369         * @param {jQuery[]} $fields The field elements
37370         * @param {String} namespace The event namespace
37371         * @param {Function} handler The handler function
37372         * @returns {FormValidation.Base}
37373         */
37374        onLiveChange: function($fields, namespace, handler) {
37375            if ($fields === null || $fields.length === 0) {
37376                return this;
37377            }
37378
37379            var ns      = this._namespace,
37380                trigger = this._getFieldTrigger($fields.eq(0)),
37381                events  = $.map(trigger, function(item) {
37382                    return item + '.' + namespace + '.' + ns;
37383                }).join(' ');
37384
37385            switch (this.options.live) {
37386                case 'submitted':
37387                    break;
37388                case 'disabled':
37389                    $fields.off(events);
37390                    break;
37391                case 'enabled':
37392                /* falls through */
37393                default:
37394                    $fields.off(events).on(events, function(e) {
37395                        handler.apply(this, arguments);
37396                    });
37397                    break;
37398            }
37399
37400            return this;
37401        },
37402
37403        /**
37404         * Update the error message
37405         *
37406         * @param {String|jQuery} field The field name or field element
37407         * @param {String} validator The validator name
37408         * @param {String} message The message
37409         * @returns {FormValidation.Base}
37410         */
37411        updateMessage: function(field, validator, message) {
37412            var ns      = this._namespace,
37413                $fields = $([]);
37414            switch (typeof field) {
37415                case 'object':
37416                    $fields = field;
37417                    field   = field.attr('data-' + ns + '-field');
37418                    break;
37419                case 'string':
37420                    $fields = this.getFieldElements(field);
37421                    break;
37422                default:
37423                    break;
37424            }
37425
37426            var clazz = this.options.err.clazz.split(' ').join('.');
37427            $fields.each(function() {
37428                $(this)
37429                    .data(ns + '.messages')
37430                    .find('.' + clazz + '[data-' + ns + '-validator="' + validator + '"][data-' + ns + '-for="' + field + '"]').html(message);
37431            });
37432
37433            return this;
37434        },
37435
37436        /**
37437         * Update all validating results of field
37438         *
37439         * @param {String|jQuery} field The field name or field element
37440         * @param {String} status The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID', 'VALID' or 'IGNORED'
37441         * @param {String} [validatorName] The validator name. If null, the method updates validity result for all validators
37442         * @returns {FormValidation.Base}
37443         */
37444        updateStatus: function(field, status, validatorName) {
37445            var ns     = this._namespace,
37446                fields = $([]);
37447            switch (typeof field) {
37448                case 'object':
37449                    fields = field;
37450                    field  = field.attr('data-' + ns + '-field');
37451                    break;
37452                case 'string':
37453                    fields = this.getFieldElements(field);
37454                    break;
37455                default:
37456                    break;
37457            }
37458
37459            if (!field || !this.options.fields[field]) {
37460                return this;
37461            }
37462
37463            if (status === this.STATUS_NOT_VALIDATED) {
37464                // Reset the flag
37465                // To prevent the form from doing submit when a deferred validator returns true while typing
37466                this._submitIfValid = false;
37467            }
37468
37469            var that  = this,
37470                type  = fields.attr('type'),
37471                row   = this.options.fields[field].row || this.options.row.selector,
37472                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,
37473                clazz = this.options.err.clazz.split(' ').join('.');
37474
37475            for (var i = 0; i < total; i++) {
37476                var $field       = fields.eq(i);
37477                if (this._isExcluded($field)) {
37478                    continue;
37479                }
37480
37481                var $parent      = $field.closest(row),
37482                    $message     = $field.data(ns + '.messages'),
37483                    $allErrors   = $message.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]'),
37484                    $errors      = validatorName ? $allErrors.filter('[data-' + ns + '-validator="' + validatorName + '"]') : $allErrors,
37485                    $icon        = $field.data(ns + '.icon'),
37486                    // Support backward
37487                    container    = ('function' === typeof (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container))
37488                                    ? (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container).call(this, $field, this)
37489                                    : (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container),
37490                    isValidField = null,
37491                    isValidating,
37492                    isNotValidated;
37493
37494                // Update status
37495                if (validatorName) {
37496                    $field.data(ns + '.result.' + validatorName, status);
37497                } else {
37498                    for (var v in this.options.fields[field].validators) {
37499                        $field.data(ns + '.result.' + v, status);
37500                    }
37501                }
37502
37503                // Show/hide error elements and feedback icons
37504                $errors.attr('data-' + ns + '-result', status);
37505
37506                switch (status) {
37507                    case this.STATUS_VALIDATING:
37508                        isValidField = null;
37509                        this.disableSubmitButtons(true);
37510                        $field.removeClass(this.options.control.valid).removeClass(this.options.control.invalid);
37511                        $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid);
37512                        if ($icon) {
37513                            $icon.removeClass(this.options.icon.valid).removeClass(this.options.icon.invalid).addClass(this.options.icon.validating).show();
37514                        }
37515                        break;
37516
37517                    case this.STATUS_INVALID:
37518                        isValidField = false;
37519                        this.disableSubmitButtons(true);
37520                        $field.removeClass(this.options.control.valid).addClass(this.options.control.invalid);
37521                        $parent.removeClass(this.options.row.valid).addClass(this.options.row.invalid);
37522                        if ($icon) {
37523                            $icon.removeClass(this.options.icon.valid).removeClass(this.options.icon.validating).addClass(this.options.icon.invalid).show();
37524                        }
37525                        break;
37526
37527                    case this.STATUS_IGNORED:       // Treat ignored fields like they are valid with some specialties
37528                    case this.STATUS_VALID:
37529                        isValidating   = ($allErrors.filter('[data-' + ns + '-result="' + this.STATUS_VALIDATING +'"]').length > 0);
37530                        isNotValidated = ($allErrors.filter('[data-' + ns + '-result="' + this.STATUS_NOT_VALIDATED +'"]').length > 0);
37531
37532                        var numIgnored = $allErrors.filter('[data-' + ns + '-result="' + this.STATUS_IGNORED +'"]').length;
37533
37534                        // If the field is valid (passes all validators)
37535                        isValidField   = (isValidating || isNotValidated)     // There are some validators that have not done
37536                                        ? null
37537                                        // All validators are completed
37538                                        : ($allErrors.filter('[data-' + ns + '-result="' + this.STATUS_VALID +'"]').length + numIgnored === $allErrors.length);
37539
37540                        $field.removeClass(this.options.control.valid).removeClass(this.options.control.invalid);
37541
37542                        if (isValidField === true) {
37543                            this.disableSubmitButtons(this.isValid() === false);
37544                            if (status === this.STATUS_VALID) {
37545                                $field.addClass(this.options.control.valid);
37546                            }
37547                        } else if (isValidField === false) {
37548                            this.disableSubmitButtons(true);
37549                            if (status === this.STATUS_VALID) {
37550                                $field.addClass(this.options.control.invalid);
37551                            }
37552                        }
37553
37554                        if ($icon) {
37555                            $icon.removeClass(this.options.icon.invalid).removeClass(this.options.icon.validating).removeClass(this.options.icon.valid);
37556                            if (status === this.STATUS_VALID || numIgnored !== $allErrors.length) {
37557                                $icon.addClass(isValidating
37558                                                ? this.options.icon.validating
37559                                                : (isValidField === null ? '' : (isValidField ? this.options.icon.valid : this.options.icon.invalid)))
37560                                     .show();
37561                            }
37562                        }
37563
37564                        var isValidContainer = this.isValidContainer($parent);
37565                        if (isValidContainer !== null) {
37566                            $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid);
37567                            if (status === this.STATUS_VALID || numIgnored !== $allErrors.length) {
37568                                $parent.addClass(isValidContainer ? this.options.row.valid : this.options.row.invalid);
37569                            }
37570                        }
37571                        break;
37572
37573                    case this.STATUS_NOT_VALIDATED:
37574                    /* falls through */
37575                    default:
37576                        isValidField = null;
37577                        this.disableSubmitButtons(false);
37578                        $field.removeClass(this.options.control.valid).removeClass(this.options.control.invalid);
37579                        $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid);
37580                        if ($icon) {
37581                            $icon.removeClass(this.options.icon.valid).removeClass(this.options.icon.invalid).removeClass(this.options.icon.validating).hide();
37582                        }
37583                        break;
37584                }
37585
37586                if ($icon && ('tooltip' === container || 'popover' === container)) {
37587                    (isValidField === false)
37588                        // Only show the first error message
37589                        ? this._createTooltip($field, $allErrors.filter('[data-' + ns + '-result="' + that.STATUS_INVALID + '"]').eq(0).html(), container)
37590                        : this._destroyTooltip($field, container);
37591                } else {
37592                    (status === this.STATUS_INVALID) ? $errors.show() : $errors.hide();
37593                }
37594
37595                // Trigger an event
37596                $field.trigger($.Event(this.options.events.fieldStatus), {
37597                    bv: this,   // Support backward
37598                    fv: this,
37599                    field: field,
37600                    element: $field,
37601                    status: status,
37602                    validator: validatorName
37603                });
37604                this._onFieldValidated($field, validatorName);
37605            }
37606
37607            return this;
37608        },
37609
37610        /**
37611         * Validate the form
37612         *
37613         * @returns {FormValidation.Base}
37614         */
37615        validate: function() {
37616            if ($.isEmptyObject(this.options.fields)) {
37617                this._submit();
37618                return this;
37619            }
37620            this.$form.trigger($.Event(this.options.events.formPreValidate));
37621
37622            this.disableSubmitButtons(true);
37623            this._submitIfValid = false;
37624            for (var field in this.options.fields) {
37625                this.validateField(field);
37626            }
37627
37628            this._submit();
37629            this._submitIfValid = true;
37630
37631            return this;
37632        },
37633
37634        /**
37635         * Validate given field
37636         *
37637         * @param {String|jQuery} field The field name or field element
37638         * @returns {FormValidation.Base}
37639         */
37640        validateField: function(field) {
37641            var ns     = this._namespace,
37642                fields = $([]);
37643            switch (typeof field) {
37644                case 'object':
37645                    fields = field;
37646                    field  = field.attr('data-' + ns + '-field');
37647                    break;
37648                case 'string':
37649                    fields = this.getFieldElements(field);
37650                    break;
37651                default:
37652                    break;
37653            }
37654
37655            if (fields.length === 0 || !this.options.fields[field]
37656                || this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false)
37657            {
37658                return this;
37659            }
37660
37661            var that       = this,
37662                type       = fields.attr('type'),
37663                total      = (('radio' === type || 'checkbox' === type) && this.options.live !== 'disabled') ? 1 : fields.length,
37664                updateAll  = ('radio' === type || 'checkbox' === type),
37665                validators = this.options.fields[field].validators,
37666                verbose    = this.isOptionEnabled(field, 'verbose'),
37667                validatorName,
37668                alias,
37669                validateResult;
37670
37671            for (var i = 0; i < total; i++) {
37672                var $field = fields.eq(i);
37673                if (this._isExcluded($field)) {
37674                    continue;
37675                }
37676
37677                var stop             = false,
37678                    sortedByPriority = $field.data(ns + '.validators'),
37679                    numValidators    = sortedByPriority.length;
37680
37681                for (var j = 0; j < numValidators; j++) {
37682                    validatorName = sortedByPriority[j].validator;
37683                    if ($field.data(ns + '.dfs.' + validatorName)) {
37684                        $field.data(ns + '.dfs.' + validatorName).reject();
37685                    }
37686                    if (stop) {
37687                        break;
37688                    }
37689
37690                    // Don't validate field if it is already done
37691                    var result = $field.data(ns + '.result.' + validatorName);
37692                    if (result === this.STATUS_VALID || result === this.STATUS_INVALID) {
37693                        this._onFieldValidated($field, validatorName);
37694                        continue;
37695                    } else if (validators[validatorName].enabled === false) {
37696                        // Changed in v0.6.2:
37697                        // When the field validator is disabled, it should be treated as STATUS_IGNORED instead of STATUS_VALID
37698                        // By doing that, the field with only disabled and ignored validators will not have success/error class
37699                        this.updateStatus(updateAll ? field : $field, this.STATUS_IGNORED, validatorName);
37700                        continue;
37701                    }
37702
37703                    $field.data(ns + '.result.' + validatorName, this.STATUS_VALIDATING);
37704
37705                    // Check whether or not the validator is just an alias of another
37706                    alias          = validators[validatorName].alias || validatorName;
37707                    validateResult = FormValidation.Validator[alias].validate(this, $field, validators[validatorName], validatorName);
37708
37709                    // validateResult can be a $.Deferred object ...
37710                    if ('object' === typeof validateResult && validateResult.resolve) {
37711                        this.updateStatus(updateAll ? field : $field, this.STATUS_VALIDATING, validatorName);
37712                        $field.data(ns + '.dfs.' + validatorName, validateResult);
37713
37714                        validateResult.done(function($f, v, response) {
37715                            // v is validator name
37716                            $f.removeData(ns + '.dfs.' + v).data(ns + '.response.' + v, response);
37717                            if (response.message) {
37718                                that.updateMessage($f, v, response.message);
37719                            }
37720
37721                            that.updateStatus(updateAll ? $f.attr('data-' + ns + '-field') : $f,
37722                                              response.valid === true ? that.STATUS_VALID : (response.valid === false ? that.STATUS_INVALID : that.STATUS_IGNORED),
37723                                              v);
37724
37725                            if (response.valid && that._submitIfValid === true) {
37726                                // If a remote validator returns true and the form is ready to submit, then do it
37727                                that._submit();
37728                            } else if (response.valid === false && !verbose) {
37729                                stop = true;
37730                            }
37731                        });
37732                    }
37733                    // ... or object { valid: true/false/null, message: 'dynamic message', otherKey: value, ... }
37734                    else if ('object' === typeof validateResult && validateResult.valid !== undefined) {
37735                        $field.data(ns + '.response.' + validatorName, validateResult);
37736                        if (validateResult.message) {
37737                            this.updateMessage(updateAll ? field : $field, validatorName, validateResult.message);
37738                        }
37739                        this.updateStatus(updateAll ? field : $field,
37740                                          validateResult.valid === true ? this.STATUS_VALID : (validateResult.valid === false ? this.STATUS_INVALID : this.STATUS_IGNORED),
37741                                          validatorName);
37742                        if (validateResult.valid === false && !verbose) {
37743                            break;
37744                        }
37745                    }
37746                    // ... or a boolean value
37747                    else if ('boolean' === typeof validateResult) {
37748                        $field.data(ns + '.response.' + validatorName, validateResult);
37749                        this.updateStatus(updateAll ? field : $field, validateResult ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);
37750                        if (!validateResult && !verbose) {
37751                            break;
37752                        }
37753                    }
37754                    // ... or null
37755                    // to indicate that the field should be ignored for current validator
37756                    else if (null === validateResult) {
37757                        $field.data(ns + '.response.' + validatorName, validateResult);
37758                        this.updateStatus(updateAll ? field : $field, this.STATUS_IGNORED, validatorName);
37759                    }
37760                }
37761            }
37762
37763            return this;
37764        },
37765
37766        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37767        // Useful APIs which aren't used internally
37768        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37769
37770        /**
37771         * Add a new field
37772         *
37773         * @param {String|jQuery} field The field name or field element
37774         * @param {Object} [options] The validator rules
37775         * @returns {FormValidation.Base}
37776         */
37777        addField: function(field, options) {
37778            var ns     = this._namespace,
37779                fields = $([]);
37780            switch (typeof field) {
37781                case 'object':
37782                    fields = field;
37783                    field  = field.attr('data-' + ns + '-field') || field.attr('name');
37784                    break;
37785                case 'string':
37786                    delete this._cacheFields[field];
37787                    fields = this.getFieldElements(field);
37788                    break;
37789                default:
37790                    break;
37791            }
37792
37793            fields.attr('data-' + ns + '-field', field);
37794
37795            var type  = fields.attr('type'),
37796                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
37797
37798            for (var i = 0; i < total; i++) {
37799                var $field = fields.eq(i);
37800
37801                // Try to parse the options from HTML attributes
37802                var opts = this._parseOptions($field);
37803                opts = (opts === null) ? options : $.extend(true, opts, options);
37804
37805                this.options.fields[field] = $.extend(true, this.options.fields[field], opts);
37806
37807                // Update the cache
37808                this._cacheFields[field] = this._cacheFields[field] ? this._cacheFields[field].add($field) : $field;
37809
37810                // Init the element
37811                this._initField(('checkbox' === type || 'radio' === type) ? field : $field);
37812            }
37813
37814            this.disableSubmitButtons(false);
37815            // Trigger an event
37816            this.$form.trigger($.Event(this.options.events.fieldAdded), {
37817                field: field,
37818                element: fields,
37819                options: this.options.fields[field]
37820            });
37821
37822            return this;
37823        },
37824
37825        /**
37826         * Destroy the plugin
37827         * It will remove all error messages, feedback icons and turn off the events
37828         */
37829        destroy: function() {
37830            var ns = this._namespace, i, field, fields, $field, validator, $icon, row, alias;
37831
37832            // Destroy the validators first
37833            for (field in this.options.fields) {
37834                fields = this.getFieldElements(field);
37835                for (i = 0; i < fields.length; i++) {
37836                    $field = fields.eq(i);
37837                    for (validator in this.options.fields[field].validators) {
37838                        if ($field.data(ns + '.dfs.' + validator)) {
37839                            $field.data(ns + '.dfs.' + validator).reject();
37840                        }
37841                        $field.removeData(ns + '.result.' + validator)
37842                              .removeData(ns + '.response.' + validator)
37843                              .removeData(ns + '.dfs.' + validator);
37844
37845                        // Destroy the validator
37846                        alias = this.options.fields[field].validators[validator].alias || validator;
37847                        if ('function' === typeof FormValidation.Validator[alias].destroy) {
37848                            FormValidation.Validator[alias].destroy(this, $field, this.options.fields[field].validators[validator], validator);
37849                        }
37850                    }
37851                }
37852            }
37853
37854            // Remove messages and icons
37855            var clazz = this.options.err.clazz.split(' ').join('.');
37856            for (field in this.options.fields) {
37857                fields = this.getFieldElements(field);
37858                row    = this.options.fields[field].row || this.options.row.selector;
37859                for (i = 0; i < fields.length; i++) {
37860                    $field = fields.eq(i);
37861                    // Remove all error messages
37862                    var $messages = $field.data(ns + '.messages');
37863                    if ($messages) {
37864                        $messages.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]').remove();
37865                    }
37866                    $field
37867                        .removeData(ns + '.messages')
37868                        .removeData(ns + '.validators')
37869                        // Remove feedback classes
37870                        .closest(row)
37871                            .removeClass(this.options.row.valid)
37872                            .removeClass(this.options.row.invalid)
37873                            .removeClass(this.options.row.feedback)
37874                            .end()
37875                        // Turn off events
37876                        .off('.' + ns)
37877                        .removeAttr('data-' + ns + '-field');
37878
37879                    // Remove feedback icons, tooltip/popover container
37880                    // Support backward
37881                    var container = ('function' === typeof (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container))
37882                                    ? (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container).call(this, $field, this)
37883                                    : (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container);
37884                    if ('tooltip' === container || 'popover' === container) {
37885                        this._destroyTooltip($field, container);
37886                    }
37887
37888                    $icon = $field.data(ns + '.icon');
37889                    if ($icon) {
37890                        $icon.remove();
37891                    }
37892                    $field.removeData(ns + '.icon')
37893                          // It's safe to remove trigger data here, because it might be used when destroying the validator
37894                          .removeData(ns + '.trigger');
37895                }
37896            }
37897
37898            // Destroy the add-ons
37899            for (var addOn in this.options.addOns) {
37900                if ('function' === typeof FormValidation.AddOn[addOn].destroy) {
37901                    FormValidation.AddOn[addOn].destroy(this, this.options.addOns[addOn]);
37902                }
37903            }
37904
37905            this.disableSubmitButtons(false);   // Enable submit buttons
37906            this.$hiddenButton.remove();        // Remove the hidden button
37907
37908            this.$form
37909                .removeClass(this.options.elementClass)
37910                .off('.' + ns)
37911                .removeData('bootstrapValidator')   // Support backward
37912                .removeData('formValidation')
37913                // Remove generated hidden elements
37914                .find('[data-' + ns + '-submit-hidden]').remove().end()
37915                .find('[type="submit"]')
37916                    .off('click.' + ns);
37917        },
37918
37919        /**
37920         * Enable/Disable all validators to given field
37921         *
37922         * @param {String} field The field name
37923         * @param {Boolean} enabled Enable/Disable field validators
37924         * @param {String} [validatorName] The validator name. If null, all validators will be enabled/disabled
37925         * @returns {FormValidation.Base}
37926         */
37927        enableFieldValidators: function(field, enabled, validatorName) {
37928            var validators = this.options.fields[field].validators;
37929
37930            // Enable/disable particular validator
37931            if (validatorName
37932                && validators
37933                && validators[validatorName] && validators[validatorName].enabled !== enabled)
37934            {
37935                this.options.fields[field].validators[validatorName].enabled = enabled;
37936                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validatorName);
37937            }
37938            // Enable/disable all validators
37939            else if (!validatorName && this.options.fields[field].enabled !== enabled) {
37940                this.options.fields[field].enabled = enabled;
37941                for (var v in validators) {
37942                    this.enableFieldValidators(field, enabled, v);
37943                }
37944            }
37945
37946            return this;
37947        },
37948
37949        /**
37950         * Some validators have option which its value is dynamic.
37951         * For example, the zipCode validator has the country option which might be changed dynamically by a select element.
37952         *
37953         * @param {jQuery|String} field The field name or element
37954         * @param {String|Function} option The option which can be determined by:
37955         * - a string
37956         * - name of field which defines the value
37957         * - name of function which returns the value
37958         * - a function returns the value
37959         *
37960         * The callback function has the format of
37961         *      callback: function(value, validator, $field) {
37962         *          // value is the value of field
37963         *          // validator is the BootstrapValidator instance
37964         *          // $field is the field element
37965         *      }
37966         *
37967         * @returns {String}
37968         */
37969        getDynamicOption: function(field, option) {
37970            var $field = ('string' === typeof field) ? this.getFieldElements(field) : field,
37971                value  = $field.val();
37972
37973            // Option can be determined by
37974            // ... a function
37975            if ('function' === typeof option) {
37976                return FormValidation.Helper.call(option, [value, this, $field]);
37977            }
37978            // ... value of other field
37979            else if ('string' === typeof option) {
37980                var $f = this.getFieldElements(option);
37981                if ($f.length) {
37982                    return $f.val();
37983                }
37984                // ... return value of callback
37985                else {
37986                    return FormValidation.Helper.call(option, [value, this, $field]) || option;
37987                }
37988            }
37989
37990            return null;
37991        },
37992
37993        /**
37994         * Get the form element
37995         *
37996         * @returns {jQuery}
37997         */
37998        getForm: function() {
37999            return this.$form;
38000        },
38001
38002        /**
38003         * Get the list of invalid fields
38004         *
38005         * @returns {jQuery[]}
38006         */
38007        getInvalidFields: function() {
38008            return this.$invalidFields;
38009        },
38010
38011        /**
38012         * Get the current locale
38013         *
38014         * @return {String}
38015         */
38016        getLocale: function() {
38017            return this.options.locale;
38018        },
38019
38020        /**
38021         * Get the error messages
38022         *
38023         * @param {String|jQuery} [field] The field name or field element
38024         * If the field is not defined, the method returns all error messages of all fields
38025         * @param {String} [validator] The name of validator
38026         * If the validator is not defined, the method returns error messages of all validators
38027         * @returns {String[]}
38028         */
38029        getMessages: function(field, validator) {
38030            var that     = this,
38031                ns       = this._namespace,
38032                messages = [],
38033                $fields  = $([]);
38034
38035            switch (true) {
38036                case (field && 'object' === typeof field):
38037                    $fields = field;
38038                    break;
38039                case (field && 'string' === typeof field):
38040                    var f = this.getFieldElements(field);
38041                    if (f.length > 0) {
38042                        var type = f.attr('type');
38043                        $fields = ('radio' === type || 'checkbox' === type) ? f.eq(0) : f;
38044                    }
38045                    break;
38046                default:
38047                    $fields = this.$invalidFields;
38048                    break;
38049            }
38050
38051            var filter = validator ? '[data-' + ns + '-validator="' + validator + '"]' : '',
38052                clazz  = this.options.err.clazz.split(' ').join('.');
38053            $fields.each(function() {
38054                messages = messages.concat(
38055                    $(this)
38056                        .data(ns + '.messages')
38057                        .find('.' + clazz + '[data-' + ns + '-for="' + $(this).attr('data-' + ns + '-field') + '"][data-' + ns + '-result="' + that.STATUS_INVALID + '"]' + filter)
38058                        .map(function() {
38059                            var v = $(this).attr('data-' + ns + '-validator'),
38060                                f = $(this).attr('data-' + ns + '-for');
38061                            return (that.options.fields[f].validators[v].enabled === false) ? '' : $(this).html();
38062                        })
38063                        .get()
38064                );
38065            });
38066
38067            return messages;
38068        },
38069
38070        /**
38071         * Returns the clicked submit button
38072         *
38073         * @returns {jQuery}
38074         */
38075        getSubmitButton: function() {
38076            return this.$submitButton;
38077        },
38078
38079        /**
38080         * Remove a given field
38081         *
38082         * @param {String|jQuery} field The field name or field element
38083         * @returns {FormValidation.Base}
38084         */
38085        removeField: function(field) {
38086            var ns     = this._namespace,
38087                fields = $([]);
38088            switch (typeof field) {
38089                case 'object':
38090                    fields = field;
38091                    field  = field.attr('data-' + ns + '-field') || field.attr('name');
38092                    fields.attr('data-' + ns + '-field', field);
38093                    break;
38094                case 'string':
38095                    fields = this.getFieldElements(field);
38096                    break;
38097                default:
38098                    break;
38099            }
38100
38101            if (fields.length === 0) {
38102                return this;
38103            }
38104
38105            var type  = fields.attr('type'),
38106                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
38107
38108            for (var i = 0; i < total; i++) {
38109                var $field = fields.eq(i);
38110
38111                // Remove from the list of invalid fields
38112                this.$invalidFields = this.$invalidFields.not($field);
38113
38114                // Update the cache
38115                this._cacheFields[field] = this._cacheFields[field].not($field);
38116            }
38117
38118            if (!this._cacheFields[field] || this._cacheFields[field].length === 0) {
38119                delete this.options.fields[field];
38120            }
38121            if ('checkbox' === type || 'radio' === type) {
38122                this._initField(field);
38123            }
38124
38125            this.disableSubmitButtons(false);
38126            // Trigger an event
38127            this.$form.trigger($.Event(this.options.events.fieldRemoved), {
38128                field: field,
38129                element: fields
38130            });
38131
38132            return this;
38133        },
38134
38135        /**
38136         * Reset given field
38137         *
38138         * @param {String|jQuery} field The field name or field element
38139         * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox)
38140         * @returns {FormValidation.Base}
38141         */
38142        resetField: function(field, resetValue) {
38143            var ns      = this._namespace,
38144                $fields = $([]);
38145            switch (typeof field) {
38146                case 'object':
38147                    $fields = field;
38148                    field   = field.attr('data-' + ns + '-field');
38149                    break;
38150                case 'string':
38151                    $fields = this.getFieldElements(field);
38152                    break;
38153                default:
38154                    break;
38155            }
38156
38157            var i     = 0,
38158                total = $fields.length;
38159            if (this.options.fields[field]) {
38160                for (i = 0; i < total; i++) {
38161                    for (var validator in this.options.fields[field].validators) {
38162                        $fields.eq(i).removeData(ns + '.dfs.' + validator);
38163                    }
38164                }
38165            }
38166
38167            if (resetValue) {
38168                var type = $fields.attr('type');
38169                ('radio' === type || 'checkbox' === type) ? $fields.prop('checked', false).removeAttr('selected') : $fields.val('');
38170            }
38171
38172            // Mark field as not validated yet
38173            this.updateStatus(field, this.STATUS_NOT_VALIDATED);
38174
38175            for (i = 0; i < total; i++) {
38176                $fields.eq(i).trigger($.Event(this.options.events.fieldReset), {
38177                    fv: this,
38178                    field: field,
38179                    element: $fields.eq(i),
38180                    resetValue: resetValue
38181                });
38182            }
38183
38184            return this;
38185        },
38186
38187        /**
38188         * Reset the form
38189         *
38190         * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox)
38191         * @returns {FormValidation.Base}
38192         */
38193        resetForm: function(resetValue) {
38194            for (var field in this.options.fields) {
38195                this.resetField(field, resetValue);
38196            }
38197
38198            this.$invalidFields = $([]);
38199            this.$submitButton  = null;
38200
38201            // Enable submit buttons
38202            this.disableSubmitButtons(false);
38203
38204            this.$form.trigger($.Event(this.options.events.formReset), {
38205                fv: this,
38206                resetValue: resetValue
38207            });
38208
38209            return this;
38210        },
38211
38212        /**
38213         * Revalidate given field
38214         * It's used when you need to revalidate the field which its value is updated by other plugin
38215         *
38216         * @param {String|jQuery} field The field name of field element
38217         * @returns {FormValidation.Base}
38218         */
38219        revalidateField: function(field) {
38220            this.updateStatus(field, this.STATUS_NOT_VALIDATED)
38221                .validateField(field);
38222
38223            return this;
38224        },
38225
38226        /**
38227         * Set the locale
38228         *
38229         * @param {String} locale The locale in format of countrycode_LANGUAGECODE
38230         * @returns {FormValidation.Base}
38231         */
38232        setLocale: function(locale) {
38233            this.options.locale = locale;
38234            this.$form.trigger($.Event(this.options.events.localeChanged), {
38235                locale: locale,
38236                bv: this,   // Support backward
38237                fv: this
38238            });
38239
38240            return this;
38241        },
38242
38243        /**
38244         * Update the option of a specific validator
38245         *
38246         * @param {String|jQuery} field The field name or field element
38247         * @param {String} validator The validator name
38248         * @param {String} option The option name
38249         * @param {String} value The value to set
38250         * @returns {FormValidation.Base}
38251         */
38252        updateOption: function(field, validator, option, value) {
38253            var ns = this._namespace;
38254            if ('object' === typeof field) {
38255                field = field.attr('data-' + ns + '-field');
38256            }
38257            if (this.options.fields[field] && this.options.fields[field].validators[validator]) {
38258                this.options.fields[field].validators[validator][option] = value;
38259                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validator);
38260            }
38261
38262            return this;
38263        },
38264
38265        /**
38266         * Validate given container
38267         * It can be used with isValidContainer() when you want to work with wizard form
38268         *
38269         * @param {String|jQuery} container The container selector or element
38270         * @returns {FormValidation.Base}
38271         */
38272        validateContainer: function(container) {
38273            var that       = this,
38274                ns         = this._namespace,
38275                fields     = [],
38276                $container = ('string' === typeof container) ? $(container) : container;
38277            if ($container.length === 0) {
38278                return this;
38279            }
38280
38281            $container.find('[data-' + ns + '-field]').each(function() {
38282                var $field = $(this);
38283                if (!that._isExcluded($field)) {
38284                    fields.push($field);
38285                }
38286            });
38287
38288            var total = fields.length;
38289            for (var i = 0; i < total; i++) {
38290                this.validateField(fields[i]);
38291            }
38292
38293            return this;
38294        }
38295    };
38296
38297    // Plugin definition
38298    $.fn.formValidation = function(option) {
38299        var params = arguments;
38300        return this.each(function() {
38301            var $this   = $(this),
38302                data    = $this.data('formValidation'),
38303                options = 'object' === typeof option && option;
38304            if (!data) {
38305                var framework = (options.framework || $this.attr('data-fv-framework') || 'bootstrap').toLowerCase(),
38306                    clazz     = framework.substr(0, 1).toUpperCase() + framework.substr(1);
38307
38308                if (typeof FormValidation.Framework[clazz] === 'undefined') {
38309                    throw new Error('The class FormValidation.Framework.' + clazz + ' is not implemented');
38310                }
38311
38312                data = new FormValidation.Framework[clazz](this, options);
38313                $this.addClass('fv-form-' + framework)
38314                     .data('formValidation', data);
38315            }
38316
38317            // Allow to call plugin method
38318            if ('string' === typeof option) {
38319                data[option].apply(data, Array.prototype.slice.call(params, 1));
38320            }
38321        });
38322    };
38323
38324    $.fn.formValidation.Constructor = FormValidation.Base;
38325
38326    // Default message
38327    $.fn.formValidation.DEFAULT_MESSAGE = 'This value is not val
38327id';
38328
38329    // The default options sorted in alphabetical order
38330    $.fn.formValidation.DEFAULT_OPTIONS = {
38331        // The first invalid field will be focused automatically
38332        autoFocus: true,
38333
38334        // Support declarative usage (setting options via HTML 5 attributes)
38335        // Setting to false can improve the performance
38336        declarative: true,
38337
38338        // The form CSS class
38339        elementClass: 'fv-form',
38340
38341        // Use custom event name to avoid window.onerror being invoked by jQuery
38342        // See #630
38343        events: {
38344            // Support backward
38345            formInit: 'init.form.fv',
38346            formPreValidate: 'prevalidate.form.fv',
38347            formError: 'err.form.fv',
38348            formReset: 'rst.form.fv',
38349            formSuccess: 'success.form.fv',
38350            fieldAdded: 'added.field.fv',
38351            fieldRemoved: 'removed.field.fv',
38352            fieldInit: 'init.field.fv',
38353            fieldError: 'err.field.fv',
38354            fieldReset: 'rst.field.fv',
38355            fieldSuccess: 'success.field.fv',
38356            fieldStatus: 'status.field.fv',
38357            localeChanged: 'changed.locale.fv',
38358            validatorError: 'err.validator.fv',
38359            validatorSuccess: 'success.validator.fv',
38360            validatorIgnored: 'ignored.validator.fv'
38361        },
38362
38363        // Indicate fields which won't be validated
38364        // By default, the plugin will not validate the following kind of fields:
38365        // - disabled
38366        // - hidden
38367        // - invisible
38368        //
38369        // The setting consists of jQuery filters. Accept 3 formats:
38370        // - A string. Use a comma to separate filter
38371        // - An array. Each element is a filter
38372        // - An array. Each element can be a callback function
38373        //      function($field, validator) {
38374        //          $field is jQuery object representing the field element
38375        //          validator is the BootstrapValidator instance
38376        //          return true or false;
38377        //      }
38378        //
38379        // The 3 following settings are equivalent:
38380        //
38381        // 1) ':disabled, :hidden, :not(:visible)'
38382        // 2) [':disabled', ':hidden', ':not(:visible)']
38383        // 3) [':disabled', ':hidden', function($field) {
38384        //        return !$field.is(':visible');
38385        //    }]
38386        excluded: [':disabled', ':hidden', ':not(:visible)'],
38387
38388        // Map the field name with validator rules
38389        fields: null,
38390
38391        // Live validating option
38392        // Can be one of 3 values:
38393        // - enabled: The plugin validates fields as soon as they are changed
38394        // - disabled: Disable the live validating. The error messages are only shown after the form is submitted
38395        // - submitted: The live validating is enabled after the form is submitted
38396        live: 'enabled',
38397
38398        // Locale in the format of languagecode_COUNTRYCODE
38399        locale: 'en_US',
38400
38401        // Default invalid message
38402        message: null,
38403
38404        // The field will not be live validated if its length is less than this number of characters
38405        threshold: null,
38406
38407        // Whether to be verbose when validating a field or not.
38408        // Possible values:
38409        // - true:  when a field has multiple validators, all of them will be checked, and respectively - if errors occur in
38410        //          multiple validators, all of them will be displayed to the user
38411        // - false: when a field has multiple validators, validation for this field will be terminated upon the first encountered error.
38412        //          Thus, only the very first error message related to this field will be displayed to the user
38413        verbose: true,
38414
38415        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38416        // These options mostly are overridden by specific framework
38417        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38418
38419        button: {
38420            // The submit buttons selector
38421            // These buttons will be disabled to prevent the valid form from multiple submissions
38422            // Don't perform validation when clicking on the submit button/input which have formnovalidate attribute
38423            selector: '[type="submit"]:not([formnovalidate])
vendor: 7,169 bytes, lines 38423-38632
38423',
38424
38425            // The disabled class
38426            disabled: ''
38427        },
38428
38429        control: {
38430            // The CSS class for valid control
38431            valid: '',
38432
38433            // The CSS class for invalid control
38434            invalid: ''
38435        },
38436
38437        err: {
38438            // The CSS class of each message element
38439            clazz: '',
38440
38441            // The error messages container. It can be:
38442            // - 'tooltip' if you want to use Bootstrap tooltip to show error messages
38443            // - 'popover' if you want to use Bootstrap popover to show error messages
38444            // - a CSS selector indicating the container
38445            // In the first two cases, since the tooltip/popover should be small enough, the plugin only shows only one error message
38446            // You also can define the message container for particular field
38447            container: null,
38448
38449            // Used to determine where the messages are placed
38450            parent: null
38451        },
38452
38453        // Shows ok/error/loading icons based on the field validity.
38454        icon: {
38455            valid: null,
38456            invalid: null,
38457            validating: null,
38458            feedback: ''
38459        },
38460
38461        row: {
38462            // The CSS selector for indicating the element consists of the field
38463            // You should adjust this option if your form group consists of many fields which not all of them need to be validated
38464            selector: null,
38465            valid: '',
38466            invalid: '',
38467            feedback: ''
38468        }
38469    };
38470}(jQuery));
38471;(function($) {
38472    // Helper methods, which can be used in validator class
38473    FormValidation.Helper = {
38474        /**
38475         * Execute a callback function
38476         *
38477         * @param {String|Function} functionName Can be
38478         * - name of global function
38479         * - name of namespace function (such as A.B.C)
38480         * - a function
38481         * @param {Array} args The callback arguments
38482         */
38483        call: function(functionName, args) {
38484            if ('function' === typeof functionName) {
38485                return functionName.apply(this, args);
38486            } else if ('string' === typeof functionName) {
38487                if ('()' === functionName.substring(functionName.length - 2)) {
38488                    functionName = functionName.substring(0, functionName.length - 2);
38489                }
38490                var ns      = functionName.split('.'),
38491                    func    = ns.pop(),
38492                    context = window;
38493                for (var i = 0; i < ns.length; i++) {
38494                    context = context[ns[i]];
38495                }
38496
38497                return (typeof context[func] === 'undefined') ? null : context[func].apply(this, args);
38498            }
38499        },
38500
38501        /**
38502         * Validate a date
38503         *
38504         * @param {Number} year The full year in 4 digits
38505         * @param {Number} month The month number
38506         * @param {Number} day The day number
38507         * @param {Boolean} [notInFuture] If true, the date must not be in the future
38508         * @returns {Boolean}
38509         */
38510        date: function(year, month, day, notInFuture) {
38511            if (isNaN(year) || isNaN(month) || isNaN(day)) {
38512                return false;
38513            }
38514            if (day.length > 2 || month.length > 2 || year.length > 4) {
38515                return false;
38516            }
38517
38518            day   = parseInt(day, 10);
38519            month = parseInt(month, 10);
38520            year  = parseInt(year, 10);
38521
38522            if (year < 1000 || year > 9999 || month <= 0 || month > 12) {
38523                return false;
38524            }
38525            var numDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
38526            // Update the number of days in Feb of leap year
38527            if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {
38528                numDays[1] = 29;
38529            }
38530
38531            // Check the day
38532            if (day <= 0 || day > numDays[month - 1]) {
38533                return false;
38534            }
38535
38536            if (notInFuture === true) {
38537                var currentDate  = new Date(),
38538                    currentYear  = currentDate.getFullYear(),
38539                    currentMonth = currentDate.getMonth(),
38540                    currentDay   = currentDate.getDate();
38541                return (year < currentYear
38542                || (year === currentYear && month - 1 < currentMonth)
38543                || (year === currentYear && month - 1 === currentMonth && day < currentDay));
38544            }
38545
38546            return true;
38547        },
38548
38549        /**
38550         * Format a string
38551         * It's used to format the error message
38552         * format('The field must between %s and %s', [10, 20]) = 'The field must between 10 and 20'
38553         *
38554         * @param {String} message
38555         * @param {Array} parameters
38556         * @returns {String}
38557         */
38558        format: function(message, parameters) {
38559            if (!$.isArray(parameters)) {
38560                parameters = [parameters];
38561            }
38562
38563            for (var i in parameters) {
38564                message = message.replace('%s', parameters[i]);
38565            }
38566
38567            return message;
38568        },
38569
38570        /**
38571         * Implement Luhn validation algorithm
38572         * Credit to https://gist.github.com/ShirtlessKirk/2134376
38573         *
38574         * @see http://en.wikipedia.org/wiki/Luhn
38575         * @param {String} value
38576         * @returns {Boolean}
38577         */
38578        luhn: function(value) {
38579            var length  = value.length,
38580                mul     = 0,
38581                prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],
38582                sum     = 0;
38583
38584            while (length--) {
38585                sum += prodArr[mul][parseInt(value.charAt(length), 10)];
38586                mul ^= 1;
38587            }
38588
38589            return (sum % 10 === 0 && sum > 0);
38590        },
38591
38592        /**
38593         * Implement modulus 11, 10 (ISO 7064) algorithm
38594         *
38595         * @param {String} value
38596         * @returns {Boolean}
38597         */
38598        mod11And10: function(value) {
38599            var check  = 5,
38600                length = value.length;
38601            for (var i = 0; i < length; i++) {
38602                check = (((check || 10) * 2) % 11 + parseInt(value.charAt(i), 10)) % 10;
38603            }
38604            return (check === 1);
38605        },
38606
38607        /**
38608         * Implements Mod 37, 36 (ISO 7064) algorithm
38609         * Usages:
38610         * mod37And36('A12425GABC1234002M')
38611         * mod37And36('002006673085', '0123456789')
38612         *
38613         * @param {String} value
38614         * @param {String} [alphabet]
38615         * @returns {Boolean}
38616         */
38617        mod37And36: function(value, alphabet) {
38618            alphabet = alphabet || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
38619            var modulus = alphabet.length,
38620                length  = value.length,
38621                check   = Math.floor(modulus / 2);
38622            for (var i = 0; i < length; i++) {
38623                check = (((check || modulus) * 2) % (modulus + 1) + alphabet.indexOf(value.charAt(i))) % modulus;
38624            }
38625            return (check === 1);
38626        }
38627    };
38628}(jQuery));
38629;(function($) {
38630    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
38631        'en_US': {
38632            b
38632etween: {
38633                'default': 'Please enter a value between %s and %s',
38634                notInclusive: 'Please enter a value between %s and %s strictly'
38635            }
38636        }
38637    });
38638
38639    FormValidation.Validator.between = {
38640        html5Attributes: {
38641            message: 'message',
38642            min: 'min',
38643            max: 'max',
38644            inclusive: 'inclusive'
38645        },
38646
38647        enableByHtml5: function($field) {
38648            if ('range' === $field.attr('type')) {
38649                return {
38650                    min: $field.attr('min'),
38651                    max: $field.attr('max')
38652                };
38653            }
38654
38655            return false;
38656        },
38657
38658        /**
38659         * Return true if the input value is between (strictly or not) two given numbers
38660         *
38661         * @param {FormValidation.Base} validator The validator plugin instance
38662         * @param {jQuery} $field Field element
38663         * @param {Object} options Can consist of the following keys:
38664         * - min
38665         * - max
38666         *
38667         * The min, max keys define the number which the field value compares to. min, max can be
38668         *      - A number
38669         *      - Name of field which its value defines the number
38670         *      - Name of callback function that returns the number
38671         *      - A callback function that returns the number
38672         *
38673         * - inclusive [optional]: Can be true or false. Default is true
38674         * - message: The invalid message
38675         * @returns {Boolean|Object}
38676         */
38677        validate: function(validator, $field, options, validatorName) {
38678            var value = validator.getFieldValue($field, validatorName);
38679            if (value === '') {
38680                return true;
38681            }
38682
38683			value = this._format(value);
38684
38685            var locale   = validator.getLocale(),
38686                min      = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),
38687                max      = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max),
38688                minValue = this._format(min),
38689                maxValue = this._format(max);
38690
38691			return (options.inclusive === true || options.inclusive === undefined)
38692                    ? {
38693                        valid: $.isNumeric(value) && parseFloat(value) >= minValue && parseFloat(value) <= maxValue,
38694                        message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].between['default'], [min, max])
38695                    }
38696                    : {
38697                        valid: $.isNumeric(value) && parseFloat(value) > minValue && parseFloat(value) < maxValue,
38698                        message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].between.notInclusive, [min, max])
38699                    };
38700        },
38701
38702        _format: function(value) {
38703            return (value + '').replace(',', '.');
38704        }
38705    };
38706}(jQuery));
38707;(function($) {
38708    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
38709        'en_US': {
38710            callback: {
38711                'default': 'Please enter a valid value'
38712            }
38713        }
38714    });
38715
38716    FormValidation.Validator.callback = {
38717        priority: 999,
38718
38719        html5Attributes: {
38720            message: 'message',
38721            callback: 'callback'
38722        },
38723
38724        /**
38725         * Return result from the callback method
38726         *
38727         * @param {FormValidation.Base} validator The validator plugin instance
38728         * @param {jQuery} $field Field element
38729         * @param {Object} options Can consist of the following keys:
38730         * - callback: The callback method that passes parameters:
38731         *      callback: function(fieldValue, validator, $field) {
38732         *          // fieldValue is the value of field
38733         *          // validator is instance of FormValidation.Base
38734         *          // $field is the field element
38735         *      }
38736         * - message: The invalid message
38737         * @returns {Deferred}
38738         */
vendor: 21,515 bytes, lines 38739-39286
38739        validate: function(validator, $field, options, validatorName) {
38740            var value  = validator.getFieldValue($field, validatorName),
38741                dfd    = new $.Deferred(),
38742                result = { valid: true };
38743
38744            if (options.callback) {
38745                var response = FormValidation.Helper.call(options.callback, [value, validator, $field]);
38746                result = ('boolean' === typeof response || null === response) ? { valid: response } : response;
38747            }
38748
38749            dfd.resolve($field, validatorName, result);
38750            return dfd;
38751        }
38752    };
38753}(jQuery));
38754;(function($) {
38755    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
38756        'en_US': {
38757            choice: {
38758                'default': 'Please enter a valid value',
38759                less: 'Please choose %s options at minimum',
38760                more: 'Please choose %s options at maximum',
38761                between: 'Please choose %s - %s options'
38762            }
38763        }
38764    });
38765
38766    FormValidation.Validator.choice = {
38767        html5Attributes: {
38768            message: 'message',
38769            min: 'min',
38770            max: 'max'
38771        },
38772
38773        /**
38774         * Check if the number of checked boxes are less or more than a given number
38775         *
38776         * @param {FormValidation.Base} validator The validator plugin instance
38777         * @param {jQuery} $field Field element
38778         * @param {Object} options Consists of following keys:
38779         * - min
38780         * - max
38781         *
38782         * At least one of two keys is required
38783         * The min, max keys define the number which the field value compares to. min, max can be
38784         *      - A number
38785         *      - Name of field which its value defines the number
38786         *      - Name of callback function that returns the number
38787         *      - A callback function that returns the number
38788         *
38789         * - message: The invalid message
38790         * @returns {Object}
38791         */
38792        validate: function(validator, $field, options, validatorName) {
38793            var locale     = validator.getLocale(),
38794                ns         = validator.getNamespace(),
38795                numChoices = $field.is('select')
38796                            ? validator.getFieldElements($field.attr('data-' + ns + '-field')).find('option').filter(':selected').length
38797                            : validator.getFieldElements($field.attr('data-' + ns + '-field')).filter(':checked').length,
38798                min        = options.min ? ($.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min)) : null,
38799                max        = options.max ? ($.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max)) : null,
38800                isValid    = true,
38801                message    = options.message || FormValidation.I18n[locale].choice['default'];
38802
38803            if ((min && numChoices < parseInt(min, 10)) || (max && numChoices > parseInt(max, 10))) {
38804                isValid = false;
38805            }
38806
38807            switch (true) {
38808                case (!!min && !!max):
38809                    message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.between, [parseInt(min, 10), parseInt(max, 10)]);
38810                    break;
38811
38812                case (!!min):
38813                    message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.less, parseInt(min, 10));
38814                    break;
38815
38816                case (!!max):
38817                    message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.more, parseInt(max, 10));
38818                    break;
38819
38820                default:
38821                    break;
38822            }
38823
38824            return { valid: isValid, message: message };
38825        }
38826    };
38827}(jQuery));
38828;(function($) {
38829    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
38830        'en_US': {
38831            color: {
38832                'default': 'Please enter a valid color'
38833            }
38834        }
38835    });
38836
38837    FormValidation.Validator.color = {
38838        html5Attributes: {
38839            message: 'message',
38840            type: 'type'
38841        },
38842
38843        enableByHtml5: function($field) {
38844            return ('color' === $field.attr('type'));
38845        },
38846
38847        SUPPORTED_TYPES: [
38848            'hex', 'rgb', 'rgba', 'hsl', 'hsla', 'keyword'
38849        ],
38850
38851        KEYWORD_COLORS: [
38852            // Colors start with A
38853            'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure',
38854            // B
38855            'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood',
38856            // C
38857            'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan',
38858            // D
38859            'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta',
38860            'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue',
38861            'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray',
38862            'dimgrey', 'dodgerblue',
38863            // F
38864            'firebrick', 'floralwhite', 'forestgreen', 'fuchsia',
38865            // G
38866            'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey',
38867            // H
38868            'honeydew', 'hotpink',
38869            // I
38870            'indianred', 'indigo', 'ivory',
38871            // K
38872            'khaki',
38873            // L
38874            'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',
38875            'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen',
38876            'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen',
38877            'linen',
38878            // M
38879            'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
38880            'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream',
38881            'mistyrose', 'moccasin',
38882            // N
38883            'navajowhite', 'navy',
38884            // O
38885            'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid',
38886            // P
38887            'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink',
38888            'plum', 'powderblue', 'purple',
38889            // R
38890            'red', 'rosybrown', 'royalblue',
38891            // S
38892            'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue',
38893            'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue',
38894            // T
38895            'tan', 'teal', 'thistle', 'tomato', 'transparent', 'turquoise',
38896            // V
38897            'violet',
38898            // W
38899            'wheat', 'white', 'whitesmoke',
38900            // Y
38901            'yellow', 'yellowgreen'
38902        ],
38903
38904        /**
38905         * Return true if the input value is a valid color
38906         *
38907         * @param {FormValidation.Base} validator The validator plugin instance
38908         * @param {jQuery} $field Field element
38909         * @param {Object} options Can consist of the following keys:
38910         * - message: The invalid message
38911         * - type: The array of valid color types
38912         * @returns {Boolean}
38913         */
38914        validate: function(validator, $field, options, validatorName) {
38915            var value = validator.getFieldValue($field, validatorName);
38916            if (value === '') {
38917                return true;
38918            }
38919
38920            // Only accept 6 hex character values due to the HTML 5 spec
38921            // See http://www.w3.org/TR/html-markup/input.color.html#input.color.attrs.value
38922            if (this.enableByHtml5($field)) {
38923                return /^#[0-9A-F]{6}$/i.test(value);
38924            }
38925
38926            var types = options.type || this.SUPPORTED_TYPES;
38927            if (!$.isArray(types)) {
38928                types = types.replace(/s/g, '').split(',');
38929            }
38930
38931            var method,
38932                type,
38933                isValid = false;
38934
38935            for (var i = 0; i < types.length; i++) {
38936                type    = types[i];
38937                method  = '_' + type.toLowerCase();
38938                isValid = isValid || this[method](value);
38939                if (isValid) {
38940                    return true;
38941                }
38942            }
38943
38944            return false;
38945        },
38946
38947        _hex: function(value) {
38948            return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(value);
38949        },
38950
38951        _hsl: function(value) {
38952            return /^hsl\((\s*(-?\d+)\s*,)(\s*(\b(0?\d{1,2}|100)\b%)\s*,)(\s*(\b(0?\d{1,2}|100)\b%)\s*)\)$/.test(value);
38953        },
38954
38955        _hsla: function(value) {
38956            return /^hsla\((\s*(-?\d+)\s*,)(\s*(\b(0?\d{1,2}|100)\b%)\s*,){2}(\s*(0?(\.\d+)?|1(\.0+)?)\s*)\)$/.test(value);
38957        },
38958
38959        _keyword: function(value) {
38960            return $.inArray(value, this.KEYWORD_COLORS) >= 0;
38961        },
38962
38963        _rgb: function(value) {
38964            var regexInteger = /^rgb\((\s*(\b([01]?\d{1,2}|2[0-4]\d|25[0-5])\b)\s*,){2}(\s*(\b([01]?\d{1,2}|2[0-4]\d|25[0-5])\b)\s*)\)$/,
38965                regexPercent = /^rgb\((\s*(\b(0?\d{1,2}|100)\b%)\s*,){2}(\s*(\b(0?\d{1,2}|100)\b%)\s*)\)$/;
38966            return regexInteger.test(value) || regexPercent.test(value);
38967        },
38968
38969        _rgba: function(value) {
38970            var regexInteger = /^rgba\((\s*(\b([01]?\d{1,2}|2[0-4]\d|25[0-5])\b)\s*,){3}(\s*(0?(\.\d+)?|1(\.0+)?)\s*)\)$/,
38971                regexPercent = /^rgba\((\s*(\b(0?\d{1,2}|100)\b%)\s*,){3}(\s*(0?(\.\d+)?|1(\.0+)?)\s*)\)$/;
38972            return regexInteger.test(value) || regexPercent.test(value);
38973        }
38974    };
38975}(jQuery));
38976;(function($) {
38977    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
38978        'en_US': {
38979            creditCard: {
38980                'default': 'Please enter a valid credit card number'
38981            }
38982        }
38983    });
38984
38985    FormValidation.Validator.creditCard = {
38986        /**
38987         * Return true if the input value is valid credit card number
38988         * Based on https://gist.github.com/DiegoSalazar/4075533
38989         *
38990         * @param {FormValidation.Base} validator The validator plugin instance
38991         * @param {jQuery} $field Field element
38992         * @param {Object} [options] Can consist of the following key:
38993         * - message: The invalid message
38994         * @returns {Boolean|Object}
38995         */
38996        validate: function(validator, $field, options, validatorName) {
38997            var value = validator.getFieldValue($field, validatorName);
38998            if (value === '') {
38999                return true;
39000            }
39001
39002            // Accept only digits, dashes or spaces
39003            if (/[^0-9-\s]+/.test(value)) {
39004                return false;
39005            }
39006            value = value.replace(/\D/g, '');
39007
39008            if (!FormValidation.Helper.luhn(value)) {
39009                return false;
39010            }
39011
39012            // Validate the card number based on prefix (IIN ranges) and length
39013            var cards = {
39014                AMERICAN_EXPRESS: {
39015                    length: [15],
39016                    prefix: ['34', '37']
39017                },
39018                DANKORT: {
39019                    length: [16],
39020                    prefix: ['5019']
39021                },
39022                DINERS_CLUB: {
39023                    length: [14],
39024                    prefix: ['300', '301', '302', '303', '304', '305', '36']
39025                },
39026                DINERS_CLUB_US: {
39027                    length: [16],
39028                    prefix: ['54', '55']
39029                },
39030                DISCOVER: {
39031                    length: [16],
39032                    prefix: ['6011', '622126', '622127', '622128', '622129', '62213',
39033                             '62214', '62215', '62216', '62217', '62218', '62219',
39034                             '6222', '6223', '6224', '6225', '6226', '6227', '6228',
39035                             '62290', '62291', '622920', '622921', '622922', '622923',
39036                             '622924', '622925', '644', '645', '646', '647', '648',
39037                             '649', '65']
39038                },
39039                ELO: {
39040                    length: [16],
39041                    prefix: ['4011', '4312', '4389', '4514', '4573', '4576',
39042                             '5041', '5066', '5067', '509',
39043                             '6277', '6362', '6363', '650', '6516', '6550']
39044                },
39045                FORBRUGSFORENINGEN: {
39046                    length: [16],
39047                    prefix: ['600722']
39048                },
39049                JCB: {
39050                    length: [16],
39051                    prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']
39052                },
39053                LASER: {
39054                    length: [16, 17, 18, 19],
39055                    prefix: ['6304', '6706', '6771', '6709']
39056                },
39057                MAESTRO: {
39058                    length: [12, 13, 14, 15, 16, 17, 18, 19],
39059                    prefix: ['5018', '5020', '5038', '5868', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']
39060                },
39061                MASTERCARD: {
39062                    length: [16],
39063                    prefix: ['51', '52', '53', '54', '55']
39064                },
39065                SOLO: {
39066                    length: [16, 18, 19],
39067                    prefix: ['6334', '6767']
39068                },
39069                UNIONPAY: {
39070                    length: [16, 17, 18, 19],
39071                    prefix: ['622126', '622127', '622128', '622129', '62213', '62214',
39072                             '62215', '62216', '62217', '62218', '62219', '6222', '6223',
39073                             '6224', '6225', '6226', '6227', '6228', '62290', '62291',
39074                             '622920', '622921', '622922', '622923', '622924', '622925']
39075                },
39076                VISA_ELECTRON: {
39077                    length: [16],
39078                    prefix: ['4026', '417500', '4405', '4508', '4844', '4913', '4917']
39079                },
39080                VISA: {
39081                    length: [16],
39082                    prefix: ['4']
39083                }
39084            };
39085
39086            var type, i;
39087            for (type in cards) {
39088                for (i in cards[type].prefix) {
39089                    if (value.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i]     // Check the prefix
39090                        && $.inArray(value.length, cards[type].length) !== -1)                      // and length
39091                    {
39092                        return {
39093                            valid: true,
39094                            type: type
39095                        };
39096                    }
39097                }
39098            }
39099
39100            return false;
39101        }
39102    };
39103}(jQuery));
39104;(function($) {
39105    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39106        'en_US': {
39107            date: {
39108                'default': 'Please enter a valid date',
39109                min: 'Please enter a date after %s',
39110                max: 'Please enter a date before %s',
39111                range: 'Please enter a date in the range %s - %s'
39112            }
39113        }
39114    });
39115
39116    FormValidation.Validator.date = {
39117        html5Attributes: {
39118            message: 'message',
39119            format: 'format',
39120            min: 'min',
39121            max: 'max',
39122            separator: 'separator'
39123        },
39124
39125        /**
39126         * Return true if the input value is valid date
39127         *
39128         * @param {FormValidation.Base} validator The validator plugin instance
39129         * @param {jQuery} $field Field element
39130         * @param {Object} options Can consist of the following keys:
39131         * - message: The invalid message
39132         * - min: the minimum date
39133         * - max: the maximum date
39134         * - separator: Use to separate the date, month, and year.
39135         * By default, it is /
39136         * - format: The date format. Default is MM/DD/YYYY
39137         * The format can be:
39138         *
39139         * i) date: Consist of DD, MM, YYYY parts which are separated by the separator option
39140         * ii) date and time:
39141         * The time can consist of h, m, s parts which are separated by :
39142         * ii) date, time and A (indicating AM or PM)
39143         * @returns {Boolean|Object}
39144         */
39145        validate: function(validator, $field, options, validatorName) {
39146            var value = validator.getFieldValue($field, validatorName);
39147            if (value === '') {
39148                return true;
39149            }
39150
39151            options.format = options.format || 'MM/DD/YYYY';
39152
39153            // #683: Force the format to YYYY-MM-DD as the default browser behaviour when using type="date" attribute
39154            if ($field.attr('type') === 'date') {
39155                options.format = 'YYYY-MM-DD';
39156            }
39157
39158            var locale     = validator.getLocale(),
39159                message    = options.message || FormValidation.I18n[locale].date['default'],
39160                formats    = options.format.split(' '),
39161                dateFormat = formats[0],
39162                timeFormat = (formats.length > 1) ? formats[1] : null,
39163                amOrPm     = (formats.length > 2) ? formats[2] : null,
39164                sections   = value.split(' '),
39165                date       = sections[0],
39166                time       = (sections.length > 1) ? sections[1] : null;
39167
39168            if (formats.length !== sections.length) {
39169                return {
39170                    valid: false,
39171                    message: message
39172                };
39173            }
39174
39175            // Determine the separator
39176            var separator = options.separator;
39177            if (!separator) {
39178                separator = (date.indexOf('/') !== -1)
39179                            ? '/'
39180                            : ((date.indexOf('-') !== -1) ? '-' : ((date.indexOf('.') !== -1) ? '.' : null));
39181            }
39182            if (separator === null || date.indexOf(separator) === -1) {
39183                return {
39184                    valid: false,
39185                    message: message
39186                };
39187            }
39188
39189            // Determine the date
39190            date       = date.split(separator);
39191            dateFormat = dateFormat.split(separator);
39192            if (date.length !== dateFormat.length) {
39193                return {
39194                    valid: false,
39195                    message: message
39196                };
39197            }
39198
39199            var year  = date[$.inArray('YYYY', dateFormat)],
39200                month = date[$.inArray('MM', dateFormat)],
39201                day   = date[$.inArray('DD', dateFormat)];
39202
39203            if (!year || !month || !day || year.length !== 4) {
39204                return {
39205                    valid: false,
39206                    message: message
39207                };
39208            }
39209
39210            // Determine the time
39211            var minutes = null, hours = null, seconds = null;
39212            if (timeFormat) {
39213                timeFormat = timeFormat.split(':');
39214                time       = time.split(':');
39215
39216                if (timeFormat.length !== time.length) {
39217                    return {
39218                        valid: false,
39219                        message: message
39220                    };
39221                }
39222
39223                hours   = time.length > 0 ? time[0] : null;
39224                minutes = time.length > 1 ? time[1] : null;
39225                seconds = time.length > 2 ? time[2] : null;
39226
39227                if (hours === '' || minutes === '' || seconds === '') {
39228                    return {
39229                        valid: false,
39230                        message: message
39231                    };
39232                }
39233
39234                // Validate seconds
39235                if (seconds) {
39236                    if (isNaN(seconds) || seconds.length > 2) {
39237                        return {
39238                            valid: false,
39239                            message: message
39240                        };
39241                    }
39242                    seconds = parseInt(seconds, 10);
39243                    if (seconds < 0 || seconds > 60) {
39244                        return {
39245                            valid: false,
39246                            message: message
39247                        };
39248                    }
39249                }
39250
39251                // Validate hours
39252                if (hours) {
39253                    if (isNaN(hours) || hours.length > 2) {
39254                        return {
39255                            valid: false,
39256                            message: message
39257                        };
39258                    }
39259                    hours = parseInt(hours, 10);
39260                    if (hours < 0 || hours >= 24 || (amOrPm && hours > 12)) {
39261                        return {
39262                            valid: false,
39263                            message: message
39264                        };
39265                    }
39266                }
39267
39268                // Validate minutes
39269                if (minutes) {
39270                    if (isNaN(minutes) || minutes.length > 2) {
39271                        return {
39272                            valid: false,
39273                            message: message
39274                        };
39275                    }
39276                    minutes = parseInt(minutes, 10);
39277                    if (minutes < 0 || minutes > 59) {
39278                        return {
39279                            valid: false,
39280                            message: message
39281                        };
39282                    }
39283                }
39284            }
39285
39286            // Validate day, month, and year
39287            var valid     = FormValidation.Helper.date(year, month, day),
39288                min       = null,
39289                max       = null,
39290                minOption = options.min,
39291                maxOption = options.max;
39292
39293            if (minOption) {
39294                min = (minOption instanceof Date)
39295                    ? minOption
39296                    : (this._parseDate(minOption, dateFormat, separator) ||
39297                       this._parseDate(validator.getDynamicOption($field, minOption), dateFormat, separator));
39298
39299                // In order to avoid displaying a date string like "Mon Dec 08 2014 19:14:12 GMT+0000 (WET)"
39300                minOption = this._formatDate(min, options.format);
39301            }
39302
39303            if (maxOption) {
39304                max = (maxOption instanceof Date)
39305                    ? maxOption
39306                    : (this._parseDate(maxOption, dateFormat, separator) ||
39307                       this._parseDate(validator.getDynamicOption($field, maxOption), dateFormat, separator));
39308
39309                // In order to avoid displaying a date string like "Mon Dec 08 2014 19:14:12 GMT+0000 (WET)"
39310                maxOption = this._formatDate(max, options.format);
39311            }
39312
39313            date = new Date(year, month -1, day, hours, minutes, seconds);
39314
39315            switch (true) {
39316                case (minOption && !maxOption && valid):
39317                    valid   = date.getTime() >= min.getTime();
39318                    message = options.message || FormValidation.Helper.format(FormValidation.I18n[locale].date.min, minOption);
39319                    break;
39320
39321                case (maxOption && !minOption && valid):
39322                    valid   = date.getTime() <= max.getTime();
39323                    message = options.message || FormValidation.Helper.format(FormValidation.I18n[locale].date.max, maxOption);
39324                    break;
39325
39326                case (maxOption && minOption && valid):
39327                    valid   = date.getTime() <= max.getTime() && date.getTime() >= min.getTime();
39328                    message = options.message || FormValidation.Helper.format(FormValidation.I18n[locale].date.range, [minOption, maxOption]);
39329                    break;
39330
39331                default:
39332                    break;
39333            }
39334
39335            return {
39336                valid: valid,
39337                date: date,
39338                message: message
39339            };
39340        },
39341
39342        /**
39343         * Return a date object after parsing the date string
39344         *
39345         * @param {Date|String} date   The date string to parse
39346         * @param {String} format The date format
39347         * The format can be:
39348         *   - date: Consist of DD, MM, YYYY parts which are separated by the separator option
39349         *   - date and time:
39350         *     The time can consist of h, m, s parts which are separated by :
39351         * @param {String} separator The separator used to separate the date, month, and year
39352         * @returns {Date}
39353         */
39354        _parseDate: function(date, format, separator) {
39355            if (date instanceof Date) {
39356                return date;
39357            }
39358            if (typeof date !== 'string') {
39359                return null;
39360            }
39361
39362            // Ensure that the format must consist of year, month and day patterns
39363            var yearIndex   = $.inArray('YYYY', format),
39364                monthIndex  = $.inArray('MM', format),
39365                dayIndex    = $.inArray('DD', format);
39366            if (yearIndex === -1 || monthIndex === -1 || dayIndex === -1) {
39367                return null;
39368            }
39369
39370            var minutes     = 0, hours = 0, seconds = 0,
39371                sections    = date.split(' '),
39372                dateSection = sections[0].split(separator);
39373            if (dateSection.length < 3) {
39374                return null;
39375            }
39376
39377            if (sections.length > 1) {
39378                var timeSection = sections[1].split(':');
39379                hours   = timeSection.length > 0 ? timeSection[0] : null;
39380                minutes = timeSection.length > 1 ? timeSection[1] : null;
39381                seconds = timeSection.length > 2 ? timeSection[2] : null;
39382            }
39383
39384            return new Date(dateSection[yearIndex], dateSection[monthIndex] - 1, dateSection[dayIndex],
39385                            hours, minutes, seconds);
39386        },
39387
39388        /**
39389         * Format date
39390         *
39391         * @param {Date} date The date object to format
39392         * @param {String} format The date format
39393         * The format can consist of the following tokens:
39394         *      d       Day of the month without leading zeros (1 through 31)
39395         *      dd      Day of the month with leading zeros (01 through 31)
39396         *      m       Month without leading zeros (1 through 12)
39397         *      mm      Month with leading zeros (01 through 12)
39398         *      yy      Last two digits of year (for example: 14)
39399         *      yyyy    Full four digits of year (for example: 2014)
39400         *      h       Hours without leading zeros (1 through 12)
39401         *      hh      Hours with leading zeros (01 through 12)
39402         *      H       Hours without leading zeros (0 through 23)
39403         *      HH      Hours with leading zeros (00 through 23)
39404         *      M       Minutes without leading zeros (0 through 59)
39405         *      MM      Minutes with leading zeros (00 through 59)
39406         *      s       Seconds without leading zeros (0 through 59)
39407         *      ss      Seconds with leading zeros (00 through 59)
39408         * @returns {String}
39409         */
39410        _formatDate: function(date, format) {
39411            format = format
39412                        .replace(/Y/g, 'y')
39413                        .replace(/M/g, 'm')
39414                        .replace(/D/g, 'd')
39415                        .replace(/:m/g, ':M')
39416                        .replace(/:mm/g, ':MM')
39417                        .replace(/:S/, ':s')
39418                        .replace(/:SS/, ':ss');
39419
39420            var replacer = {
39421                d: function(date) {
39422                    return date.getDate();
39423                },
39424                dd: function(date) {
39425                    var d = date.getDate();
39426                    return (d < 10) ? '0' + d : d;
39427                },
39428                m: function(date) {
39429                    return date.getMonth() + 1;
39430                },
39431                mm: function(date) {
39432                    var m = date.getMonth() + 1;
39433                    return m < 10 ? '0' + m : m;
39434                },
39435                yy: function(date) {
39436                    return ('' + date.getFullYear()).substr(2);
39437                },
39438                yyyy: function(date) {
39439                    return date.getFullYear();
39440                },
39441                h: function(date) {
39442                    return date.getHours() % 12 || 12;
39443                },
39444                hh: function(date) {
39445                    var h = date.getHours() % 12 || 12;
39446                    return h < 10 ? '0' + h : h;
39447                },
39448                H: function(date) {
39449                    return date.getHours();
39450                },
39451                HH: function(date) {
39452                    var H = date.getHours();
39453                    return H < 10 ? '0' + H : H;
39454                },
39455                M: function(date) {
39456                    return date.getMinutes();
39457                },
39458                MM: function(date) {
39459                    var M = date.getMinutes();
39460                    return M < 10 ? '0' + M : M;
39461                },
39462                s: function(date) {
39463                    return date.getSeconds();
39464                },
39465                ss: function(date) {
39466                    var s = date.getSeconds();
39467                    return s < 10 ? '0' + s : s;
39468                }
39469            };
39470
39471            return format.replace(/d{1,4}|m{1,4}|yy(?:yy)?|([HhMs])\1?|"[^"]*"|'[^']*'/g, function(match) {
39472                return replacer[match] ? replacer[match](date) : match.slice(1, match.length - 1);
39473            });
39474        }
39475    };
39476}(jQuery));
39477;(function($) {
39478    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39479        'en_US': {
39480            different: {
39481                'default': 'Please enter a different value'
39482            }
39483        }
39484    });
39485
39486    FormValidation.Validator.different = {
39487        html5Attributes: {
39488            message: 'message',
39489            field: 'field'
39490        },
39491
39492        /**
39493         * Bind the validator on the live change of the field to compare with current one
39494         *
39495         * @param {FormValidation.Base} validator The validator plugin instance
39496         * @param {jQuery} $field Field element
39497         * @param {Object} options Consists of the following key:
39498         * - field: The name of field that will be used to compare with current one
39499         */
39500        init: function(validator, $field, options, validatorName) {
39501            var fields = options.field.split(',');
39502            for (var i = 0; i < fields.length; i++) {
39503                var compareWith = validator.getFieldElements($.trim(fields[i]));
39504                validator.onLiveChange(compareWith, 'live_' + validatorName, function() {
39505                    var status = validator.getStatus($field, validatorName);
39506                    if (status !== validator.STATUS_NOT_VALIDATED) {
39507                        validator.revalidateField($field);
39508                    }
39509                });
39510            }
39511        },
39512
39513        /**
39514         * Unbind the validator on the live change of the field to compare with current one
39515         *
39516         * @param {FormValidation.Base} validator The validator plugin instance
39517         * @param {jQuery} $field Field element
39518         * @param {Object} options Consists of the following key:
39519         * - field: The name of field that will be used to compare with current one
39520         */
39521        destroy: function(validator, $field, options, validatorName) {
39522            var fields = options.field.split(',');
39523            for (var i = 0; i < fields.length; i++) {
39524                var compareWith = validator.getFieldElements($.trim(fields[i]));
39525                validator.offLiveChange(compareWith, 'live_' + validatorName);
39526            }
39527        },
39528
39529        /**
39530         * Return true if the input value is different with given field's value
39531         *
39532         * @param {FormValidation.Base} validator The validator plugin instance
39533         * @param {jQuery} $field Field element
39534         * @param {Object} options Consists of the following key:
39535         * - field: The name of field that will be used to compare with current one
39536         * - message: The invalid message
39537         * @returns {Boolean}
39538         */
39539        validate: function(validator, $field, options, validatorName) {
39540            var value = validator.getFieldValue($field, validatorName);
39541            if (value === '') {
39542                return true;
39543            }
39544
39545            var fields  = options.field.split(','),
39546                isValid = true;
39547
39548            for (var i = 0; i < fields.length; i++) {
39549                var compareWith = validator.getFieldElements($.trim(fields[i]));
39550                if (compareWith == null || compareWith.length === 0) {
39551                    continue;
39552                }
39553
39554                var compareValue = validator.getFieldValue(compareWith, validatorName);
39555                if (value === compareValue) {
39556                    isValid = false;
39557                } else if (compareValue !== '') {
39558                    validator.updateStatus(compareWith, validator.STATUS_VALID, validatorName);
39559                }
39560            }
39561
39562            return isValid;
39563        }
39564    };
39565}(jQuery));
39566;(function($) {
39567    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39568        'en_US': {
39569            digits: {
39570                'default': 'Please enter only digits'
39571            }
39572        }
39573    });
39574
39575    FormValidation.Validator.digits = {
39576        /**
39577         * Return true if the input value contains digits only
39578         *
39579         * @param {FormValidation.Base} validator Validate plugin instance
39580         * @param {jQuery} $field Field element
39581         * @param {Object} [options]
39582         * @returns {Boolean}
39583         */
39584        validate: function(validator, $field, options, validatorName) {
39585            var value = validator.getFieldValue($field, validatorName);
39586            if (value === '') {
39587                return true;
39588            }
39589
39590            return /^\d+$/.test(value);
39591        }
39592    };
39593}(jQuery));
39594;(function($) {
39595    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39596        'en_US': {
39597            emailAddress: {
39598                'default': 'Please enter a valid email address'
39599            }
39600        }
39601    });
39602
39603    FormValidation.Validator.emailAddress = {
39604        html5Attributes: {
39605            message: 'message',
39606            multiple: 'multiple',
39607            separator: 'separator'
39608        },
39609
39610        enableByHtml5: function($field) {
39611            return ('email' === $field.attr('type'));
39612        },
39613
39614        /**
39615         * Return true if and only if the input value is a valid email address
39616         *
39617         * @param {FormValidation.Base} validator Validate plugin instance
39618         * @param {jQuery} $field Field element
39619         * @param {Object} [options]
39620         * - multiple: Allow multiple email addresses, separated by a comma or semicolon; default is false.
39621         * - separator: Regex for character or characters expected as separator between addresses; default is comma /[,;]/, i.e. comma or semicolon.
39622         * @returns {Boolean}
39623         */
vendor: 4,440 bytes, lines 39624-39734
39624        validate: function(validator, $field, options, validatorName) {
39625            var value = validator.getFieldValue($field, validatorName);
39626            if (value === '') {
39627                return true;
39628            }
39629
39630            // Email address regular expression
39631            // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
39632            var emailRegExp   = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@[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])?)*$/,
39633                allowMultiple = options.multiple === true || options.multiple === 'true';
39634
39635            if (allowMultiple) {
39636                var separator = options.separator || /[,;]/,
39637                    addresses = this._splitEmailAddresses(value, separator);
39638
39639                for (var i = 0; i < addresses.length; i++) {
39640                    if (!emailRegExp.test(addresses[i])) {
39641                        return false;
39642                    }
39643                }
39644
39645                return true;
39646            } else {
39647                return emailRegExp.test(value);
39648            }
39649        },
39650
39651        _splitEmailAddresses: function(emailAddresses, separator) {
39652            var quotedFragments     = emailAddresses.split(/"/),
39653                quotedFragmentCount = quotedFragments.length,
39654                emailAddressArray   = [],
39655                nextEmailAddress    = '';
39656
39657            for (var i = 0; i < quotedFragmentCount; i++) {
39658                if (i % 2 === 0) {
39659                    var splitEmailAddressFragments     = quotedFragments[i].split(separator),
39660                        splitEmailAddressFragmentCount = splitEmailAddressFragments.length;
39661
39662                    if (splitEmailAddressFragmentCount === 1) {
39663                        nextEmailAddress += splitEmailAddressFragments[0];
39664                    } else {
39665                        emailAddressArray.push(nextEmailAddress + splitEmailAddressFragments[0]);
39666
39667                        for (var j = 1; j < splitEmailAddressFragmentCount - 1; j++) {
39668                            emailAddressArray.push(splitEmailAddressFragments[j]);
39669                        }
39670                        nextEmailAddress = splitEmailAddressFragments[splitEmailAddressFragmentCount - 1];
39671                    }
39672                } else {
39673                    nextEmailAddress += '"' + quotedFragments[i];
39674                    if (i < quotedFragmentCount - 1) {
39675                        nextEmailAddress += '"';
39676                    }
39677                }
39678            }
39679
39680            emailAddressArray.push(nextEmailAddress);
39681            return emailAddressArray;
39682        }
39683    };
39684}(jQuery));
39685;(function($) {
39686    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39687        'en_US': {
39688            file: {
39689                'default': 'Please choose a valid file'
39690            }
39691        }
39692    });
39693
39694    FormValidation.Validator.file = {
39695        Error: {
39696            EXTENSION: 'EXTENSION',
39697            MAX_FILES: 'MAX_FILES',
39698            MAX_SIZE: 'MAX_SIZE',
39699            MAX_TOTAL_SIZE: 'MAX_TOTAL_SIZE',
39700            MIN_FILES: 'MIN_FILES',
39701            MIN_SIZE: 'MIN_SIZE',
39702            MIN_TOTAL_SIZE: 'MIN_TOTAL_SIZE',
39703            TYPE: 'TYPE'
39704        },
39705
39706        html5Attributes: {
39707            extension: 'extension',
39708            maxfiles: 'maxFiles',
39709            minfiles: 'minFiles',
39710            maxsize: 'maxSize',
39711            minsize: 'minSize',
39712            maxtotalsize: 'maxTotalSize',
39713            mintotalsize: 'minTotalSize',
39714            message: 'message',
39715            type: 'type'
39716        },
39717
39718        /**
39719         * Validate upload file. Use HTML 5 API if the browser supports
39720         *
39721         * @param {FormValidation.Base} validator The validator plugin instance
39722         * @param {jQuery} $field Field element
39723         * @param {Object} options Can consist of the following keys:
39724         * - extension: The allowed extensions, separated by a comma
39725         * - maxFiles: The maximum number of files
39726         * - minFiles: The minimum number of files
39727         * - maxSize: The maximum size in bytes
39728         * - minSize: The minimum size in bytes
39729         * - maxTotalSize: The maximum size in bytes for all files
39730         * - minTotalSize: The minimum size in bytes for all files
39731         * - message: The invalid message
39732         * - type: The allowed MIME type, separated by a comma
39733         * @returns {Boolean|Object}
39734         */
39735        validate: function(validator, $field, options, validatorName) {
39736            var value = validator.getFieldValue($field, validatorName);
39737            if (value === '') {
39738                return true;
39739            }
39740
39741            var ext,
39742                extensions = options.extension ? options.extension.toLowerCase().split(',') : null,
39743                types      = options.type      ? options.type.toLowerCase().split(',')      : null,
39744                html5      = (window.File && window.FileList && window.FileReader);
39745
39746            if (html5) {
39747                // Get FileList instance
39748                var files     = $field.get(0).files,
39749                    total     = files.length,
39750                    totalSize = 0;
39751
39752                // Check the maxFiles
39753                if (options.maxFiles && total > parseInt(options.maxFiles, 10)) {
39754                    return {
39755                        valid: false,
39756                        error: this.Error.MAX_FILES
39757                    };
39758                }
39759
39760                // Check the minFiles
39761                if (options.minFiles && total < parseInt(options.minFiles, 10)) {
39762                    return {
39763                        valid: false,
39764                        error: this.Error.MIN_FILES
39765                    };
39766                }
39767
39768                var metaData = {};
39769                for (var i = 0; i < total; i++) {
39770                    totalSize += files[i].size;
39771                    ext        = files[i].name.substr(files[i].name.lastIndexOf('.') + 1);
39772                    metaData   = {
39773                        file: files[i],
39774                        size: files[i].size,
39775                        ext: ext,
39776                        type: files[i].type
39777                    };
39778
39779                    // Check the minSize
39780                    if (options.minSize && files[i].size < parseInt(options.minSize, 10)) {
39781                       return {
39782                           valid: false,
39783                           error: this.Error.MIN_SIZE,
39784                           metaData: metaData
39785                       };
39786                    }
39787
39788                    // Check the maxSize
39789                    if (options.maxSize && files[i].size > parseInt(options.maxSize, 10)) {
39790                        return {
39791                            valid: false,
39792                            error: this.Error.MAX_SIZE,
39793                            metaData: metaData
39794                        };
39795                    }
39796
39797                    // Check file extension
39798                    if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) {
39799                        return {
39800                            valid: false,
39801                            error: this.Error.EXTENSION,
39802                            metaData: metaData
39803                        };
39804                    }
39805
39806                    // Check file type
39807                    if (files[i].type && types && $.inArray(files[i].type.toLowerCase(), types) === -1) {
39808                        return {
39809                            valid: false,
39810                            error: this.Error.TYPE,
39811                            metaData: metaData
39812                        };
39813                    }
39814                }
39815
39816                // Check the maxTotalSize
39817                if (options.maxTotalSize && totalSize > parseInt(options.maxTotalSize, 10)) {
39818                    return {
39819                        valid: false,
39820                        error: this.Error.MAX_TOTAL_SIZE,
39821                        metaData: {
39822                            totalSize: totalSize
39823                        }
39824                    };
39825                }
39826
39827                // Check the minTotalSize
39828                if (options.minTotalSize && totalSize < parseInt(options.minTotalSize, 10)) {
39829                    return {
39830                        valid: false,
39831                        error: this.Error.MIN_TOTAL_SIZE,
39832                        metaData: {
39833                            totalSize: totalSize
39834                        }
39835                    };
39836                }
39837            } else {
39838                // Check file extension
39839                ext = value.substr(value.lastIndexOf('.') + 1);
39840                if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) {
39841                    return {
39842                        valid: false,
39843                        error: this.Error.EXTENSION,
39844                        metaData: {
39845                            ext: ext
39846                        }
39847                    };
39848                }
39849            }
39850
39851            return true;
39852        }
39853    };
39854}(jQuery));
39855;(function($) {
39856    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39857        'en_US': {
39858            greaterThan: {
39859                'default': 'Please enter a value greater than or equal to %s',
39860                notInclusive: 'Please enter a value greater than %s'
39861            }
39862        }
39863    });
39864
39865    FormValidation.Validator.greaterThan = {
39866        html5Attributes: {
39867            message: 'message',
39868            value: 'value',
39869            inclusive: 'inclusive'
39870        },
39871
39872        enableByHtml5: function($field) {
39873            var type = $field.attr('type'),
39874                min  = $field.attr('min');
39875            if (min && type !== 'date') {
39876                return {
39877                    value: min
39878                };
39879            }
39880
39881            return false;
39882        },
39883
39884        /**
39885         * Return true if the input value is greater than or equals to given number
39886         *
39887         * @param {FormValidation.Base} validator Validate plugin instance
39888         * @param {jQuery} $field Field element
39889         * @param {Object} options Can consist of the following keys:
39890         * - value: Define the number to compare with. It can be
39891         *      - A number
39892         *      - Name of field which its value defines the number
39893         *      - Name of callback function that returns the number
39894         *      - A callback function that returns the number
39895         *
39896         * - inclusive [optional]: Can be true or false. Default is true
39897         * - message: The invalid message
39898         * @returns {Boolean|Object}
39899         */
39900        validate: function(validator, $field, options, validatorName) {
39901            var value = validator.getFieldValue($field, validatorName);
39902            if (value === '') {
39903                return true;
39904            }
39905            
39906            value = this._format(value);
39907
39908            var locale         = validator.getLocale(),
39909                compareTo      = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value),
39910                compareToValue = this._format(compareTo);
39911
39912			return (options.inclusive === true || options.inclusive === undefined)
39913                    ? {
39914                        valid: $.isNumeric(value) && parseFloat(value) >= compareToValue,
39915                        message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].greaterThan['default'], compareTo)
39916                    }
39917                    : {
39918                        valid: $.isNumeric(value) && parseFloat(value) > compareToValue,
39919                        message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].greaterThan.notInclusive, compareTo)
39920                    };
39921        },
39922
39923        _format: function(value) {
39924            return (value + '').replace(',', '.');
39925        }
39926    };
39927}(jQuery));
39928;(function($) {
39929    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
39930        'en_US': {
39931            identical: {
39932                'default': 'Please enter the same value'
39933            }
39934        }
39935    });
39936
39937    FormValidation.Validator.identical = {
39938        html5Attributes: {
39939            message: 'message',
39940            field: 'field'
39941        },
39942
39943        /**
39944         * Bind the validator on the live change of the field to compare with current one
39945         *
39946         * @param {FormValidation.Base} validator The validator plugin instance
39947         * @param {jQuery} $field Field element
39948         * @param {Object} options Consists of the following key:
39949         * - field: The name of field that will be used to compare with current one
39950         */
39951        init: function(validator, $field, options, validatorName) {
39952            var compareWith = validator.getFieldElements(options.field);
39953            validator.onLiveChange(compareWith, 'live_' + validatorName, function() {
39954                var status = validator.getStatus($field, validatorName);
39955                if (status !== validator.STATUS_NOT_VALIDATED) {
39956                    validator.revalidateField($field);
39957                }
39958            });
39959        },
39960
39961        /**
39962         * Unbind the validator on the live change of the field to compare with current one
39963         *
39964         * @param {FormValidation.Base} validator The validator plugin instance
39965         * @param {jQuery} $field Field element
39966         * @param {Object} options Consists of the following key:
39967         * - field: The name of field that will be used to compare with current one
39968         */
39969        destroy: function(validator, $field, options, validatorName) {
39970            var compareWith = validator.getFieldElements(options.field);
39971            validator.offLiveChange(compareWith, 'live_' + validatorName);
39972        },
39973
39974        /**
39975         * Check if input value equals to value of particular one
39976         *
39977         * @param {FormValidation.Base} validator The validator plugin instance
39978         * @param {jQuery} $field Field element
39979         * @param {Object} options Consists of the following key:
39980         * - field: The name of field that will be used to compare with current one
39981         * @returns {Boolean}
39982         */
39983        validate: function(validator, $field, options, validatorName) {
39984            var value       = validator.getFieldValue($field, validatorName),
39985                compareWith = validator.getFieldElements(options.field);
39986            if (compareWith === null || compareWith.length === 0) {
39987                return true;
39988            }
39989
39990            var compareValue = validator.getFieldValue(compareWith, validatorName);
39991            if (value === compareValue) {
39992                validator.updateStatus(compareWith, validator.STATUS_VALID, validatorName);
39993                return true;
39994            }
39995
39996            return false;
39997        }
39998    };
39999}(jQuery));
40000;(function($) {
40001    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40002        'en_US': {
40003            integer: {
40004                'default': 'Please enter a valid number'
40005            }
40006        }
40007    });
40008
40009    FormValidation.Validator.integer = {
40010        html5Attributes: {
40011            message: 'message',
40012            thousandsseparator: 'thousandsSeparator',
40013            decimalseparator: 'decimalSeparator'
40014        },
40015
40016        enableByHtml5: function($field) {
40017            return ('number' === $field.attr('type')) && ($field.attr('step') === undefined || $field.attr('step') % 1 === 0);
40018        },
40019
40020        /**
40021         * Return true if the input value is an integer
40022         *
40023         * @param {FormValidation.Base} validator The validator plugin instance
40024         * @param {jQuery} $field Field element
40025         * @param {Object} options Can consist of the following key:
40026         * - message: The invalid message
40027         * - thousandsSeparator: The thousands separator. It's empty by default
40028         * - decimalSeparator: The decimal separator. It's '.' by default
40029         * @returns {Boolean}
40030         */
40031        validate: function(validator, $field, options, validatorName) {
40032            if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) {
40033                return false;
40034            }
40035
40036            var value = validator.getFieldValue($field, validatorName);
40037            if (value === '') {
40038                return true;
40039            }
40040
40041            var decimalSeparator   = options.decimalSeparator   || '.',
40042                thousandsSeparator = options.thousandsSeparator || '';
40043            decimalSeparator       = (decimalSeparator   === '.') ? '\\.' : decimalSeparator;
40044            thousandsSeparator     = (thousandsSeparator === '.') ? '\\.' : thousandsSeparator;
40045
40046            var testRegexp         = new RegExp('^-?[0-9]{1,3}(' + thousandsSeparator + '[0-9]{3})*(' + decimalSeparator + '[0-9]+)?$'),
40047                thousandsReplacer  = new RegExp(thousandsSeparator, 'g');
40048
40049            if (!testRegexp.test(value)) {
40050                return false;
40051            }
40052
40053            // Replace thousands separator with blank
40054            if (thousandsSeparator) {
40055                value = value.replace(thousandsReplacer, '');
40056            }
40057            // Replace decimal separator with a dot
40058            if (decimalSeparator) {
40059                value = value.replace(decimalSeparator, '.');
40060            }
40061
40062            if (isNaN(value) || !isFinite(value)) {
40063                return false;
40064            }
40065            // TODO: Use Number.isInteger() if available
40066            value = parseFloat(value);
40067            return Math.floor(value) === value;
40068        }
40069    };
40070}(jQuery));
40071;(function($) {
40072    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40073        'en_US': {
40074            lessThan: {
40075                'default': 'Please enter a value less than or equal to %s',
40076                notInclusive: 'Please enter a value less than %s'
40077            }
40078        }
40079    });
40080
40081    FormValidation.Validator.lessThan = {
40082        html5Attributes: {
40083            message: 'message',
40084            value: 'value',
40085            inclusive: 'inclusive'
40086        },
40087
40088        enableByHtml5: function($field) {
40089            var type = $field.attr('type'),
40090                max  = $field.attr('max');
40091            if (max && type !== 'date') {
40092                return {
40093                    value: max
40094                };
40095            }
40096
40097            return false;
vendor: 4,751 bytes, lines 40098-40218
40098        },
40099
40100        /**
40101         * Return true if the input value is less than or equal to given number
40102         *
40103         * @param {FormValidation.Base} validator The validator plugin instance
40104         * @param {jQuery} $field Field element
40105         * @param {Object} options Can consist of the following keys:
40106         * - value: The number used to compare to. It can be
40107         *      - A number
40108         *      - Name of field which its value defines the number
40109         *      - Name of callback function that returns the number
40110         *      - A callback function that returns the number
40111         *
40112         * - inclusive [optional]: Can be true or false. Default is true
40113         * - message: The invalid message
40114         * @returns {Boolean|Object}
40115         */
40116        validate: function(validator, $field, options, validatorName) {
40117            var value = validator.getFieldValue($field, validatorName);
40118            if (value === '') {
40119                return true;
40120            }
40121            
40122			value = this._format(value);
40123
40124            var locale         = validator.getLocale(),
40125                compareTo      = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value),
40126                compareToValue = this._format(compareTo);
40127
40128            return (options.inclusive === true || options.inclusive === undefined)
40129                    ? {
40130                        valid: $.isNumeric(value) && parseFloat(value) <= compareToValue,
40131                        message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].lessThan['default'], compareTo)
40132                    }
40133                    : {
40134                        valid: $.isNumeric(value) && parseFloat(value) < compareToValue,
40135                        message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].lessThan.notInclusive, compareTo)
40136                    };
40137        },
40138
40139        _format: function(value) {
40140            return (value + '').replace(',', '.');
40141        }
40142    };
40143}(jQuery));
40144;(function($) {
40145    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40146        'en_US': {
40147            notEmpty: {
40148                'default': 'Please enter a value'
40149            }
40150        }
40151    });
40152
40153    FormValidation.Validator.notEmpty = {
40154        enableByHtml5: function($field) {
40155            var required = $field.attr('required') + '';
40156            return ('required' === required || 'true' === required);
40157        },
40158
40159        /**
40160         * Check if input value is empty or not
40161         *
40162         * @param {FormValidation.Base} validator The validator plugin instance
40163         * @param {jQuery} $field Field element
40164         * @param {Object} options
40165         * @returns {Boolean}
40166         */
40167        validate: function(validator, $field, options, validatorName) {
40168            var type = $field.attr('type');
40169            if ('radio' === type || 'checkbox' === type) {
40170                var ns = validator.getNamespace();
40171                return validator
40172                            .getFieldElements($field.attr('data-' + ns + '-field'))
40173                            .filter(':checked')
40174                            .length > 0;
40175            }
40176
40177            if ('number' === type && $field.get(0).validity && $field.get(0).validity.badInput === true) {
40178                return true;
40179            }
40180
40181            var value = validator.getFieldValue($field, validatorName);
40182            return $.trim(value) !== '';
40183        }
40184    };
40185}(jQuery));
40186;(function($) {
40187    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40188        'en_US': {
40189            numeric: {
40190                'default': 'Please enter a valid float number'
40191            }
40192        }
40193    });
40194
40195    FormValidation.Validator.numeric = {
40196        html5Attributes: {
40197            message: 'message',
40198            separator: 'separator',     // deprecated
40199            thousandsseparator: 'thousandsSeparator',
40200            decimalseparator: 'decimalSeparator'
40201        },
40202
40203        enableByHtml5: function($field) {
40204            return ('number' === $field.attr('type')) && ($field.attr('step') !== undefined) && ($field.attr('step') % 1 !== 0);
40205        },
40206
40207        /**
40208         * Validate decimal number
40209         *
40210         * @param {FormValidation.Base} validator The validator plugin instance
40211         * @param {jQuery} $field Field element
40212         * @param {Object} options Consist of key:
40213         * - message: The invalid message
40214         * - thousandsSeparator: The thousands separator. It's empty by default
40215         * - separator, decimalSeparator: The decimal separator. It's '.' by default
40216         * The separator option is deprecated and should be replaced with decimalSeparator
40217         * @returns {Boolean}
40218         */
40219        validate: function(validator, $field, options, validatorName) {
40220            if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) {
40221                return false;
40222            }
40223
40224            var value = validator.getFieldValue($field, validatorName);
40225            if (value === '') {
40226                return true;
40227            }
40228
40229            var decimalSeparator   = options.separator || options.decimalSeparator || '.',
40230                thousandsSeparator = options.thousandsSeparator || '';
40231
40232            // Support preceding zero numbers such as .5, -.5
40233            if (value.substr(0, 1) === decimalSeparator) {
40234                value = '0' + decimalSeparator + value.substr(1);
40235            } else if (value.substr(0, 2) === '-' + decimalSeparator) {
40236                value = '-0' + decimalSeparator + value.substr(2);
40237            }
40238
40239            decimalSeparator   = (decimalSeparator   === '.') ? '\\.' : decimalSeparator;
40240            thousandsSeparator = (thousandsSeparator === '.') ? '\\.' : thousandsSeparator;
40241
40242            var testRegexp         = new RegExp('^-?[0-9]{1,3}(' + thousandsSeparator + '[0-9]{3})*(' + decimalSeparator + '[0-9]+)?$'),
40243                thousandsReplacer  = new RegExp(thousandsSeparator, 'g');
40244
40245            if (!testRegexp.test(value)) {
40246                return false;
40247            }
40248
40249            // Replace thousands separator with blank
40250            if (thousandsSeparator) {
40251                value = value.replace(thousandsReplacer, '');
40252            }
40253            // Replace decimal separator with a dot
40254            if (decimalSeparator) {
40255                value = value.replace(decimalSeparator, '.');
40256            }
40257
40258            return !isNaN(parseFloat(value)) && isFinite(value);
40259        }
40260    };
40261}(jQuery));
40262;(function($) {
40263    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40264        'en_US': {
40265            promise: {
40266                'default': 'Please enter a valid value'
40267            }
40268        }
40269    });
40270
40271    FormValidation.Validator.promise = {
40272        priority: 999,
40273
40274        html5Attributes: {
40275            message: 'message',
40276            promise: 'promise'
40277        },
40278
40279        /**
40280         * Return result from a jQuery's Deferred object
40281         *
40282         * @param {FormValidation.Base} validator The validator plugin instance
40283         * @param {jQuery} $field Field element
40284         * @param {Object} options Can consist of the following keys:
40285         * - promise: The method that passes parameters:
40286         *      promise: function(fieldValue, validator, $field) {
40287         *          // fieldValue is the value of field
40288         *          // validator is instance of FormValidation.Base
40289         *          // $field is the field element
40290         *
40291         *          var dfd = new $.Deferred();
40292         *
40293         *          // Do something ...
40294         *
40295         *          // Resolve when particular task is done
40296         *          dfd.resolve({
40297         *              valid: true or false,       // Required
40298         *              message: 'Other message',   // Optional
40299         *              key: value                  // You can attach more data to reuse later
40300         *          });
40301         *
40302         *          // You can reject if there's error
40303         *          dfd.reject({
40304         *              message: 'Other message',   // Optional
40305         *              key: value                  // You can attach more data to reuse later
40306         *          });
40307         *
40308         *          return dfd.promise();
40309         *      }
40310         * - message: The invalid message
40311         * @returns {Deferred}
40312         */
40313        validate: function(validator, $field, options, validatorName) {
40314            var value   = validator.getFieldValue($field, validatorName),
40315                dfd     = new $.Deferred(),
40316                promise = FormValidation.Helper.call(options.promise, [value, validator, $field]);
40317
40318            promise
40319                .done(function(result) {
40320                    dfd.resolve($field, validatorName, result);
40321                })
40322                .fail(function(result) {
40323                    result = result || {};
40324                    result.valid = false;
40325                    dfd.resolve($field, validatorName, result);
40326                });
40327
40328            return dfd;
40329        }
40330    };
40331}(jQuery));
40332;(function($) {
40333    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40334        'en_US': {
40335            regexp: {
40336                'default': 'Please enter a value matching the pattern'
40337            }
40338        }
40339    });
40340
40341    FormValidation.Validator.regexp = {
40342        html5Attributes: {
40343            message: 'message',
40344            flags: 'flags',
40345            regexp: 'regexp'
40346        },
40347
40348        enableByHtml5: function($field) {
40349            var pattern = $field.attr('pattern');
40350            if (pattern) {
40351                return {
40352                    regexp: pattern
40353                };
40354            }
40355
40356            return false;
40357        },
40358
40359        /**
40360         * Check if the element value matches given regular expression
40361         *
40362         * @param {FormValidation.Base} validator The validator plugin instance
40363         * @param {jQuery} $field Field element
40364         * @param {Object} options Consists of the following key:
40365         * - regexp: The regular expression you need to check
40366         * - flags: If specified, flags can have any combination of Javascript regular expression flags such as:
40367         *      g: global match
40368         *      i: ignore case
40369         *      m: multiple line
40370         * @returns {Boolean}
40371         */
40372        validate: function(validator, $field, options, validatorName) {
40373            var value = validator.getFieldValue($field, validatorName);
40374            if (value === '') {
40375                return true;
40376            }
40377
40378            var regexp = ('string' === typeof options.regexp)
40379                        ? (options.flags ? new RegExp(options.regexp, options.flags) : new RegExp(options.regexp))
40380                        : options.regexp;
40381            return regexp.test(value);
40382        }
40383    };
40384}(jQuery));
40385;(function($) {
40386    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40387        'en_US': {
40388            remote: {
40389                'default': 'Please enter a valid value'
40390            }
40391        }
40392    });
40393
40394    FormValidation.Validator.remote = {
40395        priority: 1000,
40396
40397        html5Attributes: {
40398            async: 'async',
40399            crossdomain: 'crossDomain',
40400            data: 'data',
40401            datatype: 'dataType',
40402            delay: 'delay',
40403            message: 'message',
40404            name: 'name',
40405            type: 'type',
40406            url: 'url',
40407            validkey: 'validKey'
40408        },
40409
40410        /**
40411         * Destroy the timer when destroying the FormValidation (using validator.destroy() method)
40412         */
40413        destroy: function(validator, $field, options, validatorName) {
40414            var ns    = validator.getNamespace(),
40415                timer = $field.data(ns + '.' + validatorName + '.timer');
40416            if (timer) {
40417                clearTimeout(timer);
40418                $field.removeData(ns + '.' + validatorName + '.timer');
40419            }
40420        },
40421
40422        /**
40423         * Request a remote server to check the input value
40424         *
40425         * @param {FormValidation.Base} validator Plugin instance
40426         * @param {jQuery} $field Field element
40427         * @param {Object} options Can consist of the following keys:
40428         * - async {Boolean} [optional] Indicate the Ajax request will be asynchronous or not. It's true by default
40429         * - crossDomain {Boolean} [optional]
40430         * - data {Object|Function} [optional]: By default, it will take the value
40431         *  {
40432         *      <fieldName>: <fieldValue>
40433         *  }
40434         * - dataType {String} [optional]: The type of data which is returned by remote server.
40435         * It can be json (default), text, script
40436         * - delay {Number} [optional]
40437         * - headers {String[]} [optional]: Additional headers
40438         * - message {String} [optional]: The invalid message
40439         * - name {String} [optional]: Override the field name for the request.
40440         * - type {String} [optional] Can be GET or POST (default)
40441         * - url {String|Function}
40442         * - validKey {String} [optional]: The valid key. It's "valid" by default
40443         * This is useful when connecting to external remote server or APIs provided by 3rd parties
40444         * @returns {Deferred}
40445         */
40446        validate: function(validator, $field, options, validatorName) {
40447            var ns    = validator.getNamespace(),
40448                value = validator.getFieldValue($field, validatorName),
40449                dfd   = new $.Deferred();
40450            if (value === '') {
40451                dfd.resolve($field, validatorName, { valid: true });
40452                return dfd;
40453            }
40454            var name     = $field.attr('data-' + ns + '-field'),
40455                data     = options.data || {},
40456                url      = options.url,
40457                validKey = options.validKey || 'valid';
40458
40459            // Support dynamic data
40460            if ('function' === typeof data) {
40461                data = data.call(this, validator, $field, value);
40462            }
40463
40464            // Parse string data from HTML5 attribute
40465            if ('string' === typeof data) {
40466                data = JSON.parse(data);
40467            }
40468
40469            // Support dynamic url
40470            if ('function' === typeof url) {
40471                url = url.call(this, validator, $field, value);
40472            }
40473
40474            data[options.name || name] = value;
40475
40476            var ajaxOptions = {
40477                async: options.async === null || options.async === true || options.async === 'true',
40478                data: data,
40479                dataType: options.dataType || 'json',
40480                headers: options.headers || {},
40481                type: options.type || 'GET',
40482                url: url
40483            };
40484            if (options.crossDomain !== null) {
40485                ajaxOptions.crossDomain = (options.crossDomain === true || options.crossDomain === 'true');
40486            }
40487
40488            function runCallback() {
40489                var xhr = $.ajax(ajaxOptions);
40490
40491                xhr
40492                    .success(function(response) {
40493                        response.valid = (response[validKey] === true || response[validKey] === 'true')
40494                                        ? true
40495                                        : (response[validKey] === false || response[validKey] === 'false' ? false : null);
40496                        dfd.resolve($field, validatorName, response);
40497                    })
40498                    .error(function(response) {
40499                        dfd.resolve($field, validatorName, {
40500                            valid: false
40501                        });
40502                    });
40503
40504                dfd.fail(function() {
40505                    xhr.abort();
40506                });
40507
40508                return dfd;
40509            }
40510            
40511            if (options.delay) {
40512                // Since the form might have multiple fields with the same name
40513                // I have to attach the timer to the field element
40514                if ($field.data(ns + '.' + validatorName + '.timer')) {
40515                    clearTimeout($field.data(ns + '.' + validatorName + '.timer'));
40516                }
40517
40518                $field.data(ns + '.' + validatorName + '.timer', setTimeout(runCallback, options.delay));
40519                return dfd;
40520            } else {
40521                return runCallback();
40522            }
40523        }
40524    };
40525}(jQuery));
40526;(function($) {
40527    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40528        'en_US': {
40529            stringLength: {
40530                'default': 'Please enter a value with valid length',
40531                less: 'Please enter less than %s characters',
40532                more: 'Please enter more than %s characters',
40533                between: 'Please enter value between %s and %s characters long'
40534            }
40535        }
40536    });
40537
40538    FormValidation.Validator.stringLength = {
40539        html5Attributes: {
40540            message: 'message',
40541            min: 'min',
40542            max: 'max',
40543            trim: 'trim',
40544            utf8bytes: 'utf8Bytes'
40545        },
40546
40547        enableByHtml5: function($field) {
40548            var options   = {},
40549                maxLength = $field.attr('maxlength'),
40550                minLength = $field.attr('minlength');
40551            if (maxLength) {
40552                options.max = parseInt(maxLength, 10);
40553            }
40554            if (minLength) {
40555                options.min = parseInt(minLength, 10);
40556            }
40557
40558            return $.isEmptyObject(options) ? false : options;
40559        },
40560
40561        /**
40562         * Check if the length of element value is less or more than given number
40563         *
40564         * @param {FormValidation.Base} validator The validator plugin instance
40565         * @param {jQuery} $field Field element
40566         * @param {Object} options Consists of following keys:
40567         * - min
40568         * - max
40569         * At least one of two keys is required
40570         * The min, max keys define the number which the field value compares to. min, max can be
40571         *      - A number
40572         *      - Name of field which its value defines the number
40573         *      - Name of callback function that returns the number
40574         *      - A callback function that returns the number
40575         *
40576         * - message: The invalid message
40577         * - trim: Indicate the length will be calculated after trimming the value or not. It is false, by default
40578         * - utf8bytes: Evaluate string length in UTF-8 bytes, default to false
40579         * @returns {Object}
40580         */
40581        validate: function(validator, $field, options, validatorName) {
40582            var value = validator.getFieldValue($field, validatorName);
40583            if (options.trim === true || options.trim === 'true') {
40584                value = $.trim(value);
40585            }
40586
40587            if (value === '') {
40588                return true;
40589            }
40590
40591            var locale     = validator.getLocale(),
40592                min        = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),
40593                max        = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max),
40594                // Credit to http://stackoverflow.com/a/23329386 (@lovasoa) for UTF-8 byte length code
40595                utf8Length = function(str) {
40596                                 var s = str.length;
40597                                 for (var i = str.length - 1; i >= 0; i--) {
40598                                     var code = str.charCodeAt(i);
40599                                     if (code > 0x7f && code <= 0x7ff) {
40600                                         s++;
40601                                     } else if (code > 0x7ff && code <= 0xffff) {
40602                                         s += 2;
40603                                     }
40604                                     if (code >= 0xDC00 && code <= 0xDFFF) {
40605                                         i--;
40606                                     }
40607                                 }
40608                                 return s;
40609                             },
40610                length     = options.utf8Bytes ? utf8Length(value) : value.length,
40611                isValid    = true,
40612                message    = options.message || FormValidation.I18n[locale].stringLength['default'];
40613
40614            if ((min && length < parseInt(min, 10)) || (max && length > parseInt(max, 10))) {
40615                isValid = false;
40616            }
40617
40618            switch (true) {
40619                case (!!min && !!max):
40620                    message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.between, [parseInt(min, 10), parseInt(max, 10)]);
40621                    break;
40622
40623                case (!!min):
40624                    message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.more, parseInt(min, 10) - 1);
40625                    break;
40626
40627                case (!!max):
40628                    message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.less, parseInt(max, 10) + 1);
40629                    break;
40630
40631                default:
40632                    break;
40633            }
40634
40635            return {
40636                valid: isValid,
40637                message: message
40638            };
40639        }
40640    };
40641}(jQuery));
40642;(function($) {
40643    FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
40644        'en_US': {
40645            uri: {
40646                'default': 'Please enter a valid URI'
40647            }
40648        }
40649    });
40650
40651    FormValidation.Validator.uri = {
40652        html5Attributes: {
40653            message: 'message',
40654            allowlocal: 'allowLocal',
40655            allowemptyprotocol: 'allowEmptyProtocol',
40656            protocol: 'protocol'
40657        },
40658
40659        enableByHtml5: function($field) {
40660            return ('url' === $field.attr('type'));
40661        },
40662
40663        /**
40664         * Return true if the input value is a valid URL
40665         *
40666         * @param {FormValidation.Base} validator The validator plugin instance
40667         * @param {jQuery} $field Field element
40668         * @param {Object} options
40669         * - message: The error message
40670         * - allowLocal: Allow the private and local network IP. Default to false
40671         * - allowEmptyProtocol: Allow the URI without protocol. Default to false
40672         * - protocol: The protocols, separated by a comma. Default to "http, https, ftp"
40673         * @returns {Boolean}
40674         */
40675        validate: function(validator, $field, options, validatorName) {
40676            var value = validator.getFieldValue($field, validatorName);
40677            if (value === '') {
40678                return true;
40679            }
40680
40681            // Credit to https://gist.github.com/dperini/729294
40682            //
40683            // Regular Expression for URL validation
40684            //
40685            // Author: Diego Perini
40686            // Updated: 2010/12/05
40687            //
40688            // the regular expression composed & commented
40689            // could be easily tweaked for RFC compliance,
40690            // it was expressly modified to fit & satisfy
40691            // these test for an URL shortener:
40692            //
40693            //   http://mathiasbynens.be/demo/url-regex
40694            //
40695            // Notes on possible differences from a standard/generic validation:
40696            //
40697            // - utf-8 char class take in consideration the full Unicode range
40698            // - TLDs are mandatory unless `allowLocal` is true
40699            // - protocols have been restricted to ftp, http and https only as requested
40700            //
40701            // Changes:
40702            //
40703            // - IP address dotted notation validation, range: 1.0.0.0 - 223.255.255.255
40704            //   first and last IP address of each class is considered invali
40704d
40705            //   (since they are broadcast/network addresses)
40706            //
40707            // - Added exclusion of private, reserved and/or local networks ranges
40708            //   unless `allowLocal` is true
40709            //
40710            // - Added possibility of choosing a custom protocol
40711            //
40712            // - Add option to validate without protocol
40713            //
40714            var allowLocal         = options.allowLocal === true || options.allowLocal === 'true',
40715                allowEmptyProtocol = options.allowEmptyProtocol === true || options.allowEmptyProtocol === 'true',
40716                protocol           = (options.protocol || 'http, https, ftp').split(',').join('|').replace(/\s/g, ''),
40717                urlExp             = new RegExp(
40718                    "^" +
40719                    // protocol identifier
40720                    "(?:(?:" + protocol + ")://)" +
40721                    // allow empty protocol
40722                    (allowEmptyProtocol ? '?' : '') +
40723                    // user:pass authentication
40724                    "(?:\\S+(?::\\S*)?@)?" +
40725                    "(?:" +
40726                    // IP address exclusion
40727                    // private & local networks
40728                    (allowLocal
40729                        ? ''
40730                        : ("(?!(?:10|127)(?:\\.\\d{1,3}){3})" +
40731                           "(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" +
40732                           "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})")) +
40733                    // IP address dotted notation octets
40734                    // excludes loopback network 0.0.0.0
40735                    // excludes reserved space >= 224.0.0.0
40736                    // excludes network & broadcast addresses
40737                    // (first & last IP address of each class)
40738                    "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
40739                    "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
40740                    "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" +
40741                    "|" +
40742                    // host name
40743                    "(?:(?:[a-z\\u00a1-\\uffff0-9]-?)*[a-z\\u00a1-\\uffff0-9]+)" +
40744                    // domain name
40745                    "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-?)*[a-z\\u00a1-\\uffff0-9])*" +
40746                    // TLD identifier
40747                    "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" +
40748                    // Allow intranet sites (no TLD) if `allowLocal` is true
40749                    (allowLocal ? '?' : '') +
40750                    ")" +
40751                    // port number
40752                    "(?::\\d{2,5})?" +
40753                    // resource path
40754                    "(?:/[^\\s]*)?" +
40755                    "$", "i"
40756                );
40757
40758            return urlExp.test(value);
40759        }
40760    };
40761}(jQuery));
40762
40763/**
40764 * FormValidation (http://formvalidation.io)
40765 * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks
40766 *
40767 * @author      https://twitter.com/formvalidation
40768 * @copyright   (c) 2013 - 2016 Nguyen Huu Phuoc
40769 * @license     http://formvalidation.io/license/
40770 */
40771
40772/**
40773 * This class supports validating Bootstrap 4 alpha form (http://v4-alpha.getbootstrap.com/)
40774 */
40775(function($) {
40776    FormValidation.Framework.Bootstrap4 = function(element, options, namespace) {
40777        options = $.extend(true, {
40778            button: {
40779                selector: '[type="submit"]:not([formnovalidate])',
40780                // The class of disabled button
40781                disabled: 'disabled'
40782            },
40783            err: {
40784                // http://v4-alpha.getbootstrap.com/components/forms/#validation
40785                clazz: 'form-control-feedback',
40786                parent: '^(.*)(col|offset)-(xs|sm|md|lg)-[0-9]+(.*)$'
40787            },
40788            // - Use FontAwesome icons:
40789            //  icon: {
40790            //      valid: 'fa fa-check',
40791            //      invalid: 'fa fa-times',
40792            //      validating: 'fa fa-refresh',
40793            //      feedback: 'form-control-feedback'
40794            //  }
40795            icon: {
40796                valid: null,
40797                invalid: null,
40798                validating: null,
40799                feedback: 'fv-control-feedback'
40800            },
40801            row: {
40802                // By default, each field is placed inside the <div class="form-group"></div>
40803                // http://v4-alpha.getbootstrap.com/components/forms/#form-groups
40804                selector: '.form-group',
40805                valid: 'has-success',
40806                invalid: 'has-warning',
40807                feedback: 'fv-has-feedback'
40808            }
40809        }, options);
40810
40811        FormValidation.Base.apply(this, [element, options, namespace]);
40812    };
40813
40814    FormValidation.Framework.Bootstrap4.prototype = $.extend({}, FormValidation.Base.prototype, {
40815        /**
40816         * Specific framework might need to adjust the icon position
40817         *
40818         * @param {jQuery} $field The field element
40819         * @param {jQuery} $icon The icon element
40820         */
40821        _fixIcon: function($field, $icon) {
40822            var ns      = this._namespace,
40823                type    = $field.attr('type'),
40824                field   = $field.attr('data-' + ns + '-field'),
40825                row     = this.options.fields[field].row || this.options.row.selector,
40826                $parent = $field.closest(row);
40827
40828            // Place it after the container of checkbox/radio
40829            // so when clicking the icon, it doesn't effect to the checkbox/radio element
40830            if ('checkbox' === type || 'radio' === type) {
40831                var $fieldParent = $field.parent();
40832                if ($fieldParent.hasClass('form-check')) {
40833                    $icon.insertAfter($fieldParent);
40834                } else if ($fieldParent.parent().hasClass('form-check')) {
40835                    $icon.insertAfter($fieldParent.parent());
40836                }
40837            }
40838
40839            // Fix feedback icons in input-group
40840            if ($parent.find('.input-group').length !== 0) {
40841                $icon.addClass('fv-bootstrap-icon-input-group')
40842                     .insertAfter($parent.find('.input-group').eq(0));
40843            }
40844        },
40845
40846        /**
40847         * Create a tooltip or popover
40848         * It will be shown when focusing on the field
40849         *
40850         * @param {jQuery} $field The field element
40851         * @param {String} message The message
40852         * @param {String} type Can be 'tooltip' or 'popover'
40853         */
40854        _createTooltip: function($field, message, type) {
40855            var ns    = this._namespace,
40856                $icon = $field.data(ns + '.icon');
40857            if ($icon) {
40858                switch (type) {
40859                    case 'popover':
40860                        $icon
40861                            .css({
40862                                'cursor': 'pointer',
40863                                'pointer-events': 'auto'
40864                            })
40865                            .popover('destroy')
40866                            .popover({
40867                                container: 'body',
40868                                content: message,
40869                                html: true,
40870                                placement: 'top',
40871                                trigger: 'hover click'
40872                            });
40873                        break;
40874
40875                    case 'tooltip':
40876                    /* falls through */
40877                    default:
40878                        $icon
40879                            .css({
40880                                'cursor': 'pointer',
40881                                'pointer-events': 'auto'
40882                            })
40883                            .tooltip('dispose')
40884                            .tooltip({
40885                                container: 'body',
40886                                html: true,
40887                                placement: 'top',
40888                                title: message
40889                            });
40890                        break;
40891                }
40892            }
40893        },
40894
40895        /**
40896         * Destroy the tooltip or popover
40897         *
40898         * @param {jQuery} $field The field element
40899         * @param {String} type Can be 'tooltip' or 'popover'
40900         */
40901        _destroyTooltip: function($field, type) {
40902            var ns    = this._namespace,
40903                $icon = $field.data(ns + '.icon');
40904            if ($icon) {
40905                switch (type) {
40906                    case 'popover':
40907                        $icon
40908                            .css({
40909                                'cursor': '',
40910                                'pointer-events': 'none'
40911                            })
40912                            .popover('destroy');
40913                        break;
40914
40915                    case 'tooltip':
40916                    /* falls through */
40917                    default:
40918                        $icon
40919                            .css({
40920                                'cursor': '',
40921                                'pointer-events': 'none'
40922                            })
40923                            .tooltip('dispose');
40924                        break;
40925                }
40926            }
40927        },
40928
40929        /**
40930         * Hide a tooltip or popover
40931         *
40932         * @param {jQuery} $field The field element
40933         * @param {String} type Can be 'tooltip' or 'popover'
40934         */
40935        _hideTooltip: function($field, type) {
40936            var ns    = this._namespace,
40937                $icon = $field.data(ns + '.icon');
40938            if ($icon) {
40939                switch (type) {
40940                    case 'popover':
40941                        $icon.popover('hide');
40942                        break;
40943
40944                    case 'tooltip':
40945                    /* falls through */
40946                    default:
40947                        $icon.tooltip('hide');
40948                        break;
40949                }
40950            }
40951        },
40952
40953        /**
40954         * Show a tooltip or popover
40955         *
40956         * @param {jQuery} $field The field element
40957         * @param {String} type Can be 'tooltip' or 'popover'
40958         */
40959        _showTooltip: function($field, type) {
40960            var ns    = this._namespace,
40961                $icon = $field.data(ns + '.icon');
40962            if ($icon) {
40963                switch (type) {
40964                    case 'popover':
40965                        $icon.popover('show');
40966                        break;
40967
40968                    case 'tooltip':
40969                    /* falls through */
40970                    default:
40971                        $icon.tooltip('show');
40972                        break;
40973                }
40974            }
40975        }
40976    });
40977}(jQuery));
40978
40979(function($) {
40980    /**
40981     * Default English package. It's included in the dist, so you do NOT need to include it to your head tag
40982     * The only reason I put it here is that you can clone it, and translate it into your language
40983     */
40984    FormValidation.I18n = $.extend(true, FormValidation.I18n, {
40985        'en_US': {
40986            base64: {
40987                'default': 'Please enter a valid base 64 encoded'
40988            },
40989            between: {
40990                'default': 'Please enter a value between %s and %s',
40991                notInclusive: 'Please enter a value between %s and %s strictly'
40992            },
40993            bic: {
40994                'default': 'Please enter a valid BIC number'
40995            },
40996            callback: {
40997                'default': 'Please enter a valid value'
40998            },
40999            choice: {
41000                'default': 'Please enter a valid value',
41001                less: 'Please choose %s options at minimum',
41002                more: 'Please choose %s options at maximum',
41003                between: 'Please choose %s - %s options'
41004            },
41005            color: {
41006                'default': 'Please enter a valid color'
41007            },
41008            creditCard: {
41009                'default': 'Please enter a valid credit card number'
41010            },
41011            cusip: {
41012                'default': 'Please enter a valid CUSIP number'
41013            },
41014            cvv: {
41015                'default': 'Please enter a valid CVV number'
41016            },
41017            date: {
41018                'default': 'Please enter a valid date',
41019                min: 'Please enter a date after %s',
41020                max: 'Please enter a date before %s',
41021                range: 'Please enter a date in the range %s - %s'
41022            },
41023            different: {
41024                'default': 'Please enter a different value'
41025            },
41026            digits: {
41027                'default': 'Please enter only digits'
41028            },
41029            ean: {
41030                'default': 'Please enter a valid EAN number'
41031            },
41032            ein: {
41033                'default': 'Please enter a valid EIN number'
41034            },
41035            emailAddress: {
41036                'default': 'Please enter a valid email address'
41037            },
41038            file: {
41039                'default': 'Please choose a valid file'
41040            },
41041            greaterThan: {
41042                'default': 'Please enter a value greater than or equal to %s',
41043                notInclusive: 'Please enter a value greater than %s'
41044            },
41045            grid: {
41046                'default': 'Please enter a valid GRId number'
41047            },
41048            hex: {
41049                'default': 'Please enter a valid hexadecimal number'
41050            },
41051            iban: {
41052                'default': 'Please enter a valid IBAN number',
41053                country: 'Please enter a valid IBAN number in %s',
41054                countries: {
41055                    AD: 'Andorra',
41056                    AE: 'United Arab Emirates',
41057                    AL: 'Albania',
41058                    AO: 'Angola',
41059                    AT: 'Austria',
41060                    AZ: 'Azerbaijan',
41061                    BA: 'Bosnia and Herzegovina',
41062                    BE: 'Belgium',
41063                    BF: 'Burkina Faso',
41064                    BG: 'Bulgaria',
41065                    BH: 'Bahrain',
41066                    BI: 'Burundi',
41067                    BJ: 'Benin',
41068                    BR: 'Brazil',
41069                    CH: 'Switzerland',
41070                    CI: 'Ivory Coast',
41071                    CM: 'Cameroon',
41072                    CR: 'Costa Rica',
41073                    CV: 'Cape Verde',
41074                    CY: 'Cyprus',
41075                    CZ: 'Czech Republic',
41076                    DE: 'Germany',
41077                    DK: 'Denmark',
41078                    DO: 'Dominican Republic',
41079                    DZ: 'Algeria',
41080                    EE: 'Estonia',
41081                    ES: 'Spain',
41082                    FI: 'Finland',
41083                    FO: 'Faroe Islands',
41084                    FR: 'France',
41085                    GB: 'United Kingdom',
41086                    GE: 'Georgia',
41087                    GI: 'Gibraltar',
41088                    GL: 'Greenland',
41089                    GR: 'Greece',
41090                    GT: 'Guatemala',
41091                    HR: 'Croatia',
41092                    HU: 'Hungary',
41093                    IE: 'Ireland',
41094                    IL: 'Israel',
41095                    IR: 'Iran',
41096                    IS: 'Iceland',
41097                    IT: 'Italy',
41098                    JO: 'Jordan',
41099                    KW: 'Kuwait',
41100                    KZ: 'Kazakhstan',
41101                    LB: 'Lebanon',
41102                    LI: 'Liechtenstein',
41103                    LT: 'Lithuania',
41104                    LU: 'Luxembourg',
41105                    LV: 'Latvia',
41106                    MC: 'Monaco',
41107                    MD: 'Moldova',
41108                    ME: 'Montenegro',
41109                    MG: 'Madagascar',
41110                    MK: 'Macedonia',
41111                    ML: 'Mali',
41112                    MR: 'Mauritania',
41113                    MT: 'Malta',
41114                    MU: 'Mauritius',
41115                    MZ: 'Mozambique',
41116                    NL: 'Netherlands',
41117                    NO: 'Norway',
41118                    PK: 'Pakistan',
41119                    PL: 'Poland',
41120                    PS: 'Palestine',
41121                    PT: 'Portugal',
41122                    QA: 'Qatar',
41123                    RO: 'Romania',
41124                    RS: 'Serbia',
41125                    SA: 'Saudi Arabia',
41126                    SE: 'Sweden',
41127                    SI: 'Slovenia',
41128                    SK: 'Slovakia',
41129                    SM: 'San Marino',
41130                    SN: 'Senegal',
41131                    TL: 'East Timor',
41132                    TN: 'Tunisia',
41133                    TR: 'Turkey',
41134                    VG: 'Virgin Islands, British',
41135                    XK: 'Republic of Kosovo'
41136                }
41137            },
41138            id: {
41139                'default': 'Please enter a valid identification number',
41140                country: 'Please enter a valid identification number in %s',
41141                countries: {
41142                    BA: 'Bosnia and Herzegovina',
41143                    BG: 'Bulgaria',
41144                    BR: 'Brazil',
41145                    CH: 'Switzerland',
41146                    CL: 'Chile',
41147                    CN: 'China',
41148                    CZ: 'Czech Republic',
41149                    DK: 'Denmark',
41150                    EE: 'Estonia',
41151                    ES: 'Spain',
41152                    FI: 'Finland',
41153                    HR: 'Croatia',
41154                    IE: 'Ireland',
41155                    IS: 'Iceland',
41156                    LT: 'Lithuania',
41157                    LV: 'Latvia',
41158                    ME: 'Montenegro',
41159                    MK: 'Macedonia',
41160                    NL: 'Netherlands',
41161                    PL: 'Poland',
41162                    RO: 'Romania',
41163                    RS: 'Serbia',
41164                    SE: 'Sweden',
41165                    SI: 'Slovenia',
41166                    SK: 'Slovakia',
41167                    SM: 'San Marino',
41168                    TH: 'Thailand',
41169                    TR: 'Turkey',
41170                    ZA: 'South Africa'
41171                }
41172            },
41173            identical: {
41174                'default': 'Please enter the same value'
41175            },
41176            imei: {
41177                'default': 'Please enter a valid IMEI number'
41178            },
41179            imo: {
41180                'default': 'Please enter a valid IMO number'
41181            },
41182            integer: {
41183                'default': 'Please enter a valid number'
41184            },
41185            ip: {
41186                'default': 'Please enter a valid IP address',
41187                ipv4: 'Please enter a valid IPv4 address',
41188                ipv6: 'Please enter a valid IPv6 address'
41189            },
41190            isbn: {
41191                'default': 'Please enter a valid ISBN number'
41192            },
41193            isin: {
41194                'default': 'Please enter a valid ISIN number'
41195            },
41196            ismn: {
41197                'default': 'Please enter a valid ISMN number'
41198            },
41199            issn: {
41200                'default': 'Please enter a valid ISSN number'
41201            },
41202            lessThan: {
41203                'default': 'Please enter a value less than or equal to %s',
41204                notInclusive: 'Please enter a value less than %s'
41205            },
41206            mac: {
41207                'default': 'Please enter a valid MAC address'
41208            },
41209            meid: {
41210                'default': 'Please enter a valid MEID number'
41211            },
41212            notEmpty: {
41213                'default': 'Please enter a value'
41214            },
41215            numeric: {
41216                'default': 'Please enter a valid float number'
41217            },
41218            phone: {
41219                'default': 'Please enter a valid phone number',
41220                country: 'Please enter a valid phone number in %s',
41221                countries: {
41222                    AE: 'United Arab Emirates',
41223                    BG: 'Bulgaria',
41224                    BR: 'Brazil',
41225                    CN: 'China',
41226                    CZ: 'Czech Republic',
41227                    DE: 'Germany',
41228                    DK: 'Denmark',
41229                    ES: 'Spain',
41230                    FR: 'France',
41231                    GB: 'United Kingdom',
41232                    IN: 'India',
41233                    MA: 'Morocco',
41234                    NL: 'Netherlands',
41235                    PK: 'Pakistan',
41236                    RO: 'Romania',
41237                    RU: 'Russia',
41238                    SK: 'Slovakia',
41239                    TH: 'Thailand',
41240                    US: 'USA',
41241                    VE: 'Venezuela'
41242                }
41243            },
41244            promise: {
41245                'default': 'Please enter a valid value'
41246            },
41247            regexp: {
41248                'default': 'Please enter a value matching the pattern'
41249            },
41250            remote: {
41251                'default': 'Please enter a valid value'
41252            },
41253            rtn: {
41254                'default': 'Please enter a valid RTN number'
41255            },
41256            sedol: {
41257                'default': 'Please enter a valid SEDOL number'
41258            },
41259            siren: {
41260                'default': 'Please enter a valid SIREN number'
41261            },
41262            siret: {
41263                'default': 'Please enter a valid SIRET number'
41264            },
41265            step: {
41266                'default': 'Please enter a valid step of %s'
41267            },
41268            stringCase: {
41269                'default': 'Please enter only lowercase characters',
41270                upper: 'Please enter only uppercase characters'
41271            },
41272            stringLength: {
41273                'default': 'Please enter a value with valid length',
41274                less: 'Please enter less than %s characters',
41275                more: 'Please enter more than %s characters',
41276                between: 'Please enter value between %s and %s characters long'
41277            },
41278            uri: {
41279                'default': 'Please enter a valid URI'
41280            },
41281            uuid: {
41282                'default': 'Please enter a valid UUID number',
41283                version: 'Please enter a valid UUID version %s number'
41284            },
41285            vat: {
41286                'default': 'Please enter a valid VAT number',
41287                country: 'Please enter a valid VAT number in %s',
41288                countries: {
41289                    AT: 'Austria',
41290                    BE: 'Belgium',
41291                    BG: 'Bulgaria',
41292                    BR: 'Brazil',
41293                    CH: 'Switzerland',
41294                    CY: 'Cyprus',
41295                    CZ: 'Czech Republic',
41296                    DE: 'Germany',
41297                    DK: 'Denmark',
41298                    EE: 'Estonia',
41299                    ES: 'Spain',
41300                    FI: 'Finland',
41301                    FR: 'France',
41302                    GB: 'United Kingdom',
41303                    GR: 'Greece',
41304                    EL: 'Greece',
41305                    HU: 'Hungary',
41306                    HR: 'Croatia',
41307                    IE: 'Ireland',
41308                    IS: 'Iceland',
41309                    IT: 'Italy',
41310                    LT: 'Lithuania',
41311                    LU: 'Luxembourg',
41312                    LV: 'Latvia',
41313                    MT: 'Malta',
41314                    NL: 'Netherlands',
41315                    NO: 'Norway',
41316                    PL: 'Poland',
41317                    PT: 'Portugal',
41318                    RO: 'Romania',
41319                    RU: 'Russia',
41320                    RS: 'Serbia',
41321                    SE: 'Sweden',
41322                    SI: 'Slovenia',
41323                    SK: 'Slovakia',
41324                    VE: 'Venezuela',
41325                    ZA: 'South Africa'
41326                }
41327            },
41328            vin: {
41329                'default': 'Please enter a valid VIN number'
41330            },
41331            zipCode: {
41332                'default': 'Please enter a valid postal code',
41333                country: 'Please enter a valid postal code in %s',
41334                countries: {
41335                    AT: 'Austria',
41336                    BG: 'Bulgaria',
41337                    BR: 'Brazil',
41338                    CA: 'Canada',
41339                    CH: 'Switzerland',
41340                    CZ: 'Czech Republic',
41341                    DE: 'Germany',
41342                    DK: 'Denmark',
41343                    ES: 'Spain',
41344                    FR: 'France',
41345                    GB: 'United Kingdom',
41346                    IE: 'Ireland',
41347                    IN: 'India',
41348                    IT: 'Italy',
41349                    MA: 'Morocco',
41350                    NL: 'Netherlands',
41351                    PL: 'Poland',
41352                    PT: 'Portugal',
41353                    RO: 'Romania',
41354                    RU: 'Russia',
41355                    SE: 'Sweden',
41356                    SG: 'Singapore',
41357                    SK: 'Slovakia',
41358                    US: 'USA'
41359                }
41360            }
41361        }
41362    });
41363}(jQuery));
41364
41365function skCookieConsent(options) {
41366    function renderTemplate(template, params) {
41367        var html = template;
41368
41369        $.each(params, function (key, value) {
41370            html = html.replace('%' + key + '%', value);
41371        });
41372
41373        return html;
41374    }
41375
41376    function createPopup() {
41377        var infoLinkHtml = renderTemplate(settings.infoLinkTemplate, {
41378            'url': settings.infoLinkUrl,
41379            'label': settings.infoLinkLabel
41380        });
41381
41382        var acceptButtonHtml = renderTemplate(settings.acceptButtonTemplate, {
41383            'label': settings.acceptButtonLabel
41384        });
41385        var refuseButtonHtml = renderTemplate(settings.refuseButtonTemplate, {
41386            'label': settings.refuseButtonLabel
41387        });
41388        var closeButtonHtml = renderTemplate(settings.closeButtonTemplate, {
41389            'label': settings.closeButtonLabel
41390        });
41391
41392        var popupHtml = renderTemplate(settings.popupTemplate, {
41393            'message': settings.message,
41394            'infoLink': infoLinkHtml,
41395            'acceptButton': acceptButtonHtml,
41396            'refuseButton': refuseButtonHtml,
41397            'closeButton': closeButtonHtml
41398        });
41399
41400        var wrapperHtml = renderTemplate(settings.wrapperTemplate, {
41401            'popup': popupHtml
41402        });
41403
41404        $wrapper = $(wrapperHtml);
41405        $wrapper.attr('id', 'teha-cookie-consent');
41406        $('body').append($wrapper);
41407        $wrapper.find('.cookie-consent-accept-button').on('click', onAcceptClick);
41408        $wrapper.find('.cookie-consent-refuse-button').on('click', onRefuseClick);
41409        $wrapper.find('.cookie-consent-close-button').on('click', onCloseButtonClick);
41410    }
41411
41412    function onAcceptClick(e) {
41413        e.preventDefault();
41414        createConsentCookie();
41415        triggerCookieConsentEvent();
41416        closePopup();
41417    }
41418
41419    function onRefuseClick(e) {
41420        e.preventDefault();
41421        localStorage.setItem(settings.cookieRefusalName, settings.cookieRefusalValue);
41422        closePopup();
41423    }
41424
41425    function onCloseButtonClick(e) {
41426        e.preventDefault();
41427        closePopup();
41428    }
41429
41430    function triggerCookieConsentEvent() {
41431        log('Triggering event "teha.cookie.consent" on body');
41432        $('body').trigger('teha.cookie.consent');
41433        loadHtmlElements();
41434    }
41435
41436    function loadHtmlElements() {
41437        if (typeof tehaCookieConsentLoad === 'object') {
41438            $.each(tehaCookieConsentLoad, function(index, loader) {
41439                log('Adding cookie consent HTML element: ', loader);
41440
41441                if (typeof loader !== 'object') {
41442                    console.error('[CookieConsent] Loader object is not an object: ', loader);
41443                } else {
41444                    var valid = true;
41445
41446                    if (!loader.hasOwnProperty('id')) {
41447                        console.error('[CookieConsent] Loader object has no "id" property: ', loader);
41448                        valid = false;
41449                    }
41450
41451                    if (!loader.hasOwnProperty('html')) {
41452                        console.error('[CookieConsent] Loader object has no "html" property: ', loader);
41453                        valid = false;
41454                    }
41455
41456                    if (valid) {
41457                        var html = loader.html;
41458                        log('Adding HTML element :' + html);
41459                        $('#' + loader.id).replaceWith($(html));
41460                    }
41461                }
41462            })
41463        }
41464    }
41465
41466    function loadersExist() {
41467        return typeof tehaCookieConsentLoad === 'object' && tehaCookieConsentLoad.length > 0;
41468    }
41469
41470    function closePopup() {
41471        $wrapper.fadeOut('fast');
41472        if (location.hash === '#show-cookie-bar') {
41473            location.hash = '#hide-cookie-bar';
41474        }
41475    }
41476
41477    function createConsentCookie() {
41478        log('Creating consent cookie');
41479        setCookie(settings.cookieName, settings.cookieValue, settings.cookieDays);
41480    }
41481
41482    function setCookie(name, value, days) {
41483        var expires = "";
41484        if (days) {
41485            var date = new Date();
41486            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
41487            expires = "; expires=" + date.toUTCString();
41488        }
41489        document.cookie = name + "=" + (value || "") + expires + "; path=/";
41490    }
41491
41492    function getCookie(name) {
41493        var nameEQ = name + "=";
41494        var ca = document.cookie.split(';');
41495        for (var i = 0; i < ca.length; i++) {
41496            var c = ca[i];
41497            while (c.charAt(0) === ' ') c = c.substring(1, c.length);
41498            if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
41499        }
41500        return null;
41501    }
41502
41503    function init() {
41504        var cookieValue = getCookie(settings.cookieName);
41505        log('Value of consent cookie "' + settings.cookieName + '" is: ', cookieValue);
41506        var storageValue = localStorage.getItem(settings.cookieRefusalName);
41507        log('Value of local storage variable "' + settings.cookieRefusalName + '" is: ', storageValue);
41508        if (cookieValue == settings.cookieValue) {
41509            log('Consent has already been given');
41510            triggerCookieConsentEvent();
41511        } else if (storageValue == settings.cookieRefusalValue) {
41512            log('User refused cookies before.');
41513        } else {
41514            log('Consent has not been given or refused yet. Checked for c
41514ookie value: '+ settings.cookieValue + ' and storage value: ' + settings.cookieRefusalValue) ;
41515            createPopup();
41516        }
41517
41518        $('a.show-cookie-bar').on('click', function(e){
41519            e.preventDefault();
41520            location.hash = 'show-cookie-bar';
41521        });
41522
41523        window.onhashchange = function() {
41524            if (location.hash === '#show-cookie-bar') {
41525                log('Show cookie bar again - delete cookie and locale storage and reload page.');
41526                localStorage.removeItem(settings.cookieRefusalName);
41527                setCookie(settings.cookieName, '', -100);
41528                location.reload();
41529            }
41530        }
41531    }
41532
41533    function log(message, params) {
41534        if (settings.debug) {
41535            if (typeof params === 'undefined') {
41536                console.log('[CookieConsent] ' + message);
41537            } else {
41538                console.log('[CookieConsent] ' + message, params);
41539            }
41540        }
41541    }
41542
41543    function translate(messageId, fallback) {
41544        var translation = fallback;
41545
41546        if (translator) {
41547            messageId = 'cookie-consent.' + messageId;
41548
41549            var translatedMessage = translator.translate(messageId, 'Teha.Neos.SiteKit');
41550
41551            if (translatedMessage !== null && translatedMessage !== messageId) {
41552                translation = translatedMessage;
41553            }
41554        }
41555
41556        return translation;
41557    }
41558
41559    var translator = null;
41560
41561    if (typeof SiteKit === 'object' && typeof SiteKit.Translator === 'object') {
41562        translator = SiteKit.Translator;
41563    }
41564
41565    var defaultSettings = {
41566        infoLinkUrl: translate('info-link-url', '/privacy'),
41567        infoLinkLabel: translate('info-link-label', 'Privacy Statement'),
41568        acceptButtonLabel: translate('accept-button-label', 'Enable cookies'),
41569        refuseButtonLabel: translate('refuse-button-label', 'Disable cookies'),
41570        closeButtonLabel: '&times;',
41571        message: translate('message', 'This website uses cookies to ensure you get the best experience on our website.'),
41572        wrapperTemplate: '<div class="cookie-consent-wrapper">%popup%</div>',
41573        popupTemplate:
41574            '<div class="cookie-consent-popup">' +
41575            '   %closeButton%' +
41576            '   <div class="cookie-consent-message">%message%</div>' +
41577            '   <div class="cookie-consent-info">%infoLink%</div>' +
41578            '   <div class="cookie-consent-accept">%acceptButton% %refuseButton%</div>' +
41579            '</div>',
41580        acceptButtonTemplate: '<button type="button" class="cookie-consent-accept-button">%label%</button>',
41581        refuseButtonTemplate: '<button type="button" class="cookie-consent-refuse-button">%label%</button>',
41582        infoLinkTemplate: '<a target="_blank" href="%url%">%label%</a>',
41583        closeButtonTemplate: '<button class="cookie-consent-close-button">%label%</button>',
41584
41585        cookieName: 'cookie.consent',
41586        cookieValue: 1,
41587        cookieDays: 90,
41588        cookieRefusalName: 'cookie.refusal',
41589        cookieRefusalValue: 1,
41590        debug: window.location.hash.match('debug-site-kit-js')
41591    };
41592    var settings = $.extend({}, defaultSettings, options);
41593
41594    var $wrapper;
41595
41596    log('Initializing with the following settings: ', settings);
41597    init();
41598
41599    return this;
41600}
41601
41602(function ($) {
41603    function setCookie(name, value, days) {
41604        var expires = "";
41605        if (days) {
41606            var date = new Date();
41607            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
41608            expires = "; expires=" + date.toUTCString();
41609        }
41610        document.cookie = name + "=" + (value || "") + expires + "; path=/";
41611    }
41612
41613    function getCookie(name) {
41614        var nameEQ = name + "=";
41615        var ca = document.cookie.split(';');
41616        for (var i = 0; i < ca.length; i++) {
41617            var c = ca[i];
41618            while (c.charAt(0) === ' ') c = c.substring(1, c.length);
41619            if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
41620        }
41621        return null;
41622    }
41623
41624    function showPrivacyDialog(onAccept, settings) {
41625        var $dialog = $('#sk-embed-video-dialog');
41626
41627        if ($dialog.length === 0) {
41628            var translate = function(messageId, args) {
41629                return SiteKit.Translator.translate(messageId, 'Teha.Neos.SiteKit', args);
41630            };
41631
41632            var privacyUrl = translate('embed-video.privacy-url');
41633
41634            var dialogHtml =
41635                '<div class="modal fade" tabindex="-1" role="dialog" id="sk-embed-video-dialog">' +
41636                '  <div class="modal-dialog" role="document">' +
41637                '    <div class="modal-content">' +
41638                '      <div class="modal-header">' +
41639                '        <h5 class="modal-title">' + translate('embed-video.headline') + '</h5>' +
41640                '        <button type="button" class="close" data-dismiss="modal" aria-label="Close">' +
41641                '          <span aria-hidden="true">&times;</span>' +
41642                '        </button>' +
41643                '      </div>' +
41644                '      <div class="modal-body">' + translate('embed-video.message', { 0: privacyUrl }) + '</div>' +
41645                '      <div class="modal-footer">' +
41646                '        <button type="button" class="btn btn-secondary" data-dismiss="modal">' + translate('embed-video.close') + '</button>' +
41647                '        <button type="button" class="btn btn-primary accept" data-dismiss="modal">'  + translate('embed-video.accept') + '</button>' +
41648                '      </div>' +
41649                '    </div>' +
41650                '  </div>' +
41651                '</div>';
41652
41653            $dialog = $(dialogHtml);
41654            $dialog.appendTo($('body'));
41655            $dialog.modal({ show: false });
41656            $dialog.find('button.accept').on('click', function() {
41657                setCookie(settings.cookieName, settings.cookieValue, settings.cookieDays);
41658                onAccept();
41659            });
41660        }
41661
41662        $dialog.modal('show');
41663    }
41664
41665    function cookieHasBeenAccepted(settings) {
41666        var cookieValue = getCookie(settings.cookieName);
41667        return cookieValue == settings.cookieValue;
41668    }
41669
41670    $.fn.skEmbedVideo = function (options) {
41671        return this.each(function () {
41672            var $iFrameContainer = $(this).find('.iframe-container');
41673            var iFrameHtml = $iFrameContainer.attr('data-iframe');
41674            var $button = $iFrameContainer.find('.play-button');
41675
41676            if (iFrameHtml) {
41677                var settings = $.extend({}, $.fn.skEmbedVideo.defaults, options);
41678
41679                function loadVideo(autoplay) {
41680                    $iFrameContainer.addClass('loading');
41681                    $button.prop('disabled', true);
41682
41683                    var html = iFrameHtml;
41684                    if (autoplay) {
41685                        html = html.replace(/\ssrc="([^"]+)"/, ' src="$1&amp;autoplay=1"');
41686                    }
41687
41688                    console.log('skEmbedVideo: Creating iFrame: ', html);
41689
41690                    var $iFrame = $(html);
41691
41692                    $iFrame.on('load', function() {
41693                        $iFrameContainer.removeClass('loading').addClass('loaded');
41694                    });
41695
41696                    $iFrameContainer.append($iFrame);
41697                }
41698
41699                $button.on('click', function() {
41700                    if (settings.privacyInfoEnabled && !cookieHasBeenAccepted(settings)) {
41701                        showPrivacyDialog(function() {
41702                            loadVideo(true);
41703                        }, settings);
41704                    } else {
41705                        loadVideo(true);
41706                    }
41707                });
41708
41709                if (cookieHasBeenAccepted(settings)) {
41710                    loadVideo(false);
41711                }
41712            }
41713        });
41714    };
41715
41716    $.fn.skEmbedVideo.defaults = {
41717        privacyInfoEnabled: true,
41718        cookieName: 'sk.embed.videos',
41719        cookieValue: 1,
41720        cookieDays: 90
41721    };
41722}(jQuery));
41723
41724(function ($) {
41725    var pluginName = 'skFullPage';
41726
41727    var SkMobileMenu = function ($self, options) {
41728        this.$self = $self;
41729        var me = this;
41730        var settings = $.extend({}, $.fn.skFullPage.defaults, options);
41731
41732        var $controls = null;
41733        var $sections = $self.find(settings.sectionSelector);
41734        var $mainMenu = $(settings.mainMenuSelector);
41735
41736        init();
41737
41738        function sectionChanged($targetSection) {
41739            var layout = $targetSection.attr('data-layout');
41740
41741            console.log('Section changed. Changing layout to: ' + layout);
41742
41743            $controls.skChangeLayout($targetSection.attr('data-layout-controls'));
41744
41745            $mainMenu.skChangeLayout($targetSection.attr('data-layout-main-menu'))
41746                .toggleClass('opacity-none', $targetSection.attr('data-hide-main-menu') == '1');
41747        }
41748
41749        function addCellClass($section) {
41750            var cellClass = $section.attr('data-cell-class');
41751            if (cellClass != '') {
41752                $section.find('.fp-tableCell').addClass(cellClass);
41753            }
41754        }
41755
41756        function createScrollIndicator($section) {
41757            $('<a/>', {
41758                'class': 'scroll-indicator',
41759                'href': '#'
41760            }).text('Scroll')
41761                .on('click', function (e) {
41762                    e.preventDefault();
41763                    $.fn.fullpage.moveTo(2);
41764                })
41765                .appendTo($section);
41766        }
41767
41768        function initFullPageFrontend() {
41769            $self.fullpage({
41770                navigation: true,
41771
41772                onLeave: function(fromIndex, toIndex, direction) {
41773                    var $fromSection = $(this);
41774                    var $toSection = $sections.eq(toIndex - 1);
41775
41776                    sectionChanged($toSection);
41777
41778                    $self.trigger('section-changed', {
41779                        fromIndex: fromIndex,
41780                        toIndex: toIndex,
41781                        $fromSection: $fromSection,
41782                        $toSection: $toSection
41783                    });
41784                },
41785
41786                afterRender: function() {
41787                    console.log('afterRender');
41788                    setTimeout(function() {
41789                        $self.addClass('loading-complete');
41790                        $('body').addClass('loading-complete');
41791                    }, 50);
41792
41793                    $controls = $('#fp-nav');
41794
41795                    var $sections = $self.find('.fp-section');
41796                    var sectionCount = $sections.length;
41797
41798                    $sections.each(function(index) {
41799                        var $section = $(this);
41800
41801                        if (sectionCount > 1 && index === 0) {
41802                            createScrollIndicator($section);
41803                        }
41804
41805                        addCellClass($section);
41806                    });
41807                }
41808            });
41809
41810            sectionChanged($sections.first());
41811        }
41812
41813        function initFullPageBackend() {
41814            console.log('Initializing FullPage in Backend mode');
41815            $sections
41816                .addClass('fp-section')
41817                .addClass('fp-table')
41818                .find('.full-page-content').wrap('<div class="fp-tableCell"></div>');
41819
41820            $sections.each(function () {
41821                addCellClass($(this));
41822            });
41823        }
41824
41825        function init() {
41826            if ($('body').hasClass('neos-backend')) {
41827                initFullPageBackend();
41828            } else {
41829                initFullPageFrontend();
41830            }
41831        }
41832    };
41833
41834
41835    $.fn.skFullPage = function (option) {
41836        var options = typeof option == "object" && option;
41837
41838        return this.each(function () {
41839            var $this = $(this);
41840            var fullPluginName = 'teha.' + pluginName;
41841            var skFullPage = $this.data(fullPluginName);
41842
41843            if (!skFullPage) {
41844                skFullPage = new SkMobileMenu($this, options);
41845                $this.data(fullPluginName, skFullPage);
41846            }
41847
41848            if (typeof option == 'string') {
41849                if (skFullPage[option]) {
41850                    skFullPage[option]();
41851                } else {
41852                    $.error('Unknown plugin method: ' + pluginName + '.' + option);
41853                }
41854            }
41855        });
41856    };
41857
41858    $.fn.skFullPage.defaults = {
41859        mainMenuSelector: '#main-menu',
41860        sectionSelector: '.section'
41861    };
41862
41863})(jQuery);
41864
41865(function ($) {
41866
41867    $.fn.skInitForm = function () {
41868        return this.each(function() {
41869            var $form = $(this);
41870
41871            $form.find('select').skStyleSelect();
41872
41873            $form.find('.placeholder-input.is-required').each(function() {
41874                $(this).find(':input[placeholder]').attr('placeholder', function(i, value) {
41875                    return value + ' *';
41876                });
41877
41878                var $select = $(this).find('select');
41879                $select.find('option[value=""]').html(function(i, value) {
41880                    return value + ' *';
41881                });
41882                $select.skStyleSelect('updateLabel');
41883            });
41884
41885            $('body').trigger('sk.init-form', [ $form ]);
41886        });
41887    };
41888
41889}(jQuery));
41890
41891(function ($) {
41892    var pluginName = 'skInvisibleReCaptcha';
41893    var scriptAdded = false;
41894
41895    window.reCaptchaCallback = function() {
41896        console.log('InvisibleReCaptcha: Submitting after reCAPTCHA using window.reCaptchaSubmit(): ', window.reCaptchaSubmit);
41897        window.reCaptchaSubmit();
41898    };
41899
41900    window.reCaptchaSubmit = null;
41901
41902    var InvisibleReCaptcha = function ($self, options) {
41903        this.$self = $self;
41904        var me = this;
41905
41906        var settings = $.extend({}, $.fn.skInvisibleReCaptcha.defaults, options);
41907
41908        if (!scriptAdded) {
41909            $('body').append($('
vendor: 75 bytes, line 41909
41909<script src="https://www.google.com/recaptcha/api.js" async defer></script>
41909'));
41910            scriptAdded = true;
41911        }
41912        
41913        var $form = $($self.parents('form'));
41914
41915        console.log('InvisibleReCaptcha: Init field: ', $self.get(0));
41916        console.log('InvisibleReCaptcha: Init form: ', $form.get(0));
41917
41918        $form.on('success.form.fv', function(e) {
41919            e.preventDefault();
41920
41921            var formValidation = $form.data('formValidation');
41922
41923            window.reCaptchaSubmit = function() {
41924                var response = $('#g-recaptcha-response').val();
41925                console.log('InvisibleReCaptcha: Executing formValidation.defaultSubmit() with response:' + response);
41926                $self.val(response);
41927                formValidation.defaultSubmit();
41928            };
41929
41930            console.log('InvisibleReCaptcha: Executing grecaptcha.execute()');
41931            grecaptcha.execute();
41932        });
41933    };
41934
41935
41936    $.fn.skInvisibleReCaptcha = function (option) {
41937        var options = typeof option == "object" && option;
41938
41939        return this.each(function () {
41940            var $this = $(this);
41941            var fullPluginName = 'teha.' + pluginName;
41942            var skInvisibleReCaptcha = $this.data(fullPluginName);
41943
41944            if (!skInvisibleReCaptcha) {
41945                skInvisibleReCaptcha = new InvisibleReCaptcha($this, options);
41946                $this.data(fullPluginName, skInvisibleReCaptcha);
41947            }
41948
41949            if (typeof option == 'string') {
41950                if (skInvisibleReCaptcha[option]) {
41951                    skInvisibleReCaptcha[option]();
41952                } else {
41953                    $.error('Unknown plugin method: ' + pluginName + '.' + option);
41954                }
41955            }
41956        });
41957    };
41958
41959    $.fn.skInvisibleReCaptcha.defaults = {
41960    };
41961
41962})(jQuery);
41963
41964(function ($) {
41965    $.fn.skChangeLayout = function (layout) {
41966        if (layout == null) {
41967            console.log('Not changing layout to null');
41968            return this;
41969        }
41970
41971        return this.each(function () {
41972            var $element = $(this);
41973            var classes = $element.attr('class').split(/\s+/);
41974
41975            $.each(classes, function(index, className) {
41976                if (className.match(/^layout-/)) {
41977                    console.log('Removing layout class: ' + className, $element);
41978                    $element.removeClass(className);
41979                }
41980            });
41981
41982            console.log('Setting layout class: layout-' + layout, $element);
41983            $element.addClass('layout-' + layout);
41984        });
41985    };
41986})(jQuery);
41987
41988(function ($) {
41989    $.fn.skLoadVideo = function (method) {
41990        return this.each(function() {
41991            var $container = $(this);
41992            var $loadingPlaceholder = $container.find('.loading-placeholder');
41993
41994            var videoId = $(this).attr('data-video-id');
41995            var provider = $(this).attr('data-video-provider');
41996
41997            console.log('Loading video "' + videoId + '" from provider "' + provider + '"');
41998            if (videoId && provider) {
41999                var url = $.fn.skLoadVideo.infoUrl.replace('{provider}', provider).replace('{videoId}', videoId);
42000                $.getJSON(url, function (response) {
42001                    var $iframe = $(response.info.html);
42002                    var ratio = response.info.height / (response.info.width / 100);
42003                    console.log('Got video info from ' + url + ':', response);
42004                    console.log('Ratio is ' + ratio + '%');
42005                    $container.css('padding-bottom', ratio + '%');
42006                    $iframe.on('load', function() {
42007                        $loadingPlaceholder.remove();
42008                    });
42009                    $iframe.removeAttr('width').removeAttr('height');
42010                    $iframe.appendTo($container);
42011                });
42012            }
42013        });
42014    };
42015
42016    $.fn.skLoadVideo.infoUrl = '/site-kit/oembed/info/{provider}/{videoId}';
42017}(jQuery));
42018
42019(function ($) {
42020    var pluginName = 'skMobileMenu';
42021    var transitionEnd = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd';
42022
42023    var SkMobileMenu = function ($self, options) {
42024        this.$self = $self;
42025        var me = this;
42026
42027        var settings = $.extend({}, $.fn.skMobileMenu.defaults, options);
42028
42029        var $overlay = $('#' + settings.overlayId);
42030        var $sidebar = $self.find('.sidebar');
42031        var $closeMenuButton = $self.find('.close-menu');
42032
42033        createOverlayIfMissing();
42034        initEvents();
42035
42036        function initEvents() {
42037            $overlay.on('click', onCloseMenuClick);
42038            $closeMenuButton.on('click', onCloseMenuClick);
42039            $self.find('.open-sub-menu').on('click', onOpenSubMenuClick);
42040            $self.find('.close-sub-menu, .sub-menu-label').on('click', onCloseSubMenuClick);
42041        }
42042
42043        function onCloseMenuClick() {
42044            me.hide();
42045        }
42046
42047        function onOpenSubMenuClick() {
42048            var $subMenu = $(this).closest('li').find('.sub-menu').first();
42049            $subMenu.show();
42050            setTimeout(function() {
42051                $subMenu.addClass('open');
42052            }, 10);
42053        }
42054
42055        function onCloseSubMenuClick() {
42056            var $subMenu = $(this).closest('.sub-menu');
42057            $subMenu.one(transitionEnd, function() {
42058                $subMenu.hide();
42059            }).removeClass('open');
42060        }
42061
42062        function createOverlayIfMissing() {
42063            if ($overlay.length == 0) {
42064                console.log('Creating overlay');
42065                $overlay = $('<div/>', {
42066                    class: settings.overlayClasses,
42067                    id: settings.overlayId
42068                }).appendTo($('body'));
42069            }
42070        }
42071
42072        function closeAllSubMenus() {
42073            $self.find('.sub-menu').removeClass('open');
42074        }
42075
42076        this.show = function () {
42077            $overlay.addClass('visible');
42078            $self.one(transitionEnd, function () {
42079                $closeMenuButton.addClass('open');
42080            }).addClass('open');
42081        };
42082
42083        this.hide = function () {
42084            $overlay.removeClass('visible');
42085            $closeMenuButton.removeClass('open');
42086            $self.removeClass('open');
42087        }
42088    };
42089
42090
42091    $.fn.skMobileMenu = function (option) {
42092        var options = typeof option == "object" && option;
42093
42094        return this.each(function () {
42095            var $this = $(this);
42096            var fullPluginName = 'teha.' + pluginName;
42097            var skMobileMenu = $this.data(fullPluginName);
42098
42099            if (!skMobileMenu) {
42100                skMobileMenu = new SkMobileMenu($this, options);
42101                $this.data(fullPluginName, skMobileMenu);
42102            }
42103
42104            if (typeof option == 'string') {
42105                if (skMobileMenu[option]) {
42106                    skMobileMenu[option]();
42107                } else {
42108                    $.error('Unknown plugin method: ' + pluginName + '.' + option);
42109                }
42110            }
42111        });
42112    };
42113
42114    $.fn.skMobileMenu.defaults = {
42115        overlayId: 'mobile-menu-slide-in-overlay',
42116        overlayClasses: 'slide-in-overlay'
42117    };
42118
42119})(jQuery);
42120
42121(function ($) {
42122    var pluginName = 'skSocialStream';
42123    var transitionEnd = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd';
42124
42125    var SkSocialStream = function ($self, options) {
42126        this.$self = $self;
42127        var me = this;
42128        var settings = $.extend({}, $.fn.skSocialStream.defaults, options);
42129        var contentLoaded = false;
42130
42131        var $overlay = $('#' + settings.overlayId);
42132        var $closeButton = $self.find('.close-button');
42133        var $loading = $self.find('.loading');
42134
42135        createOverlayIfMissing();
42136        initEvents();
42137
42138        function onCloseButtonClick() {
42139            me.hide();
42140        }
42141
42142        function createOverlayIfMissing() {
42143            if ($overlay.length == 0) {
42144                console.log('Creating overlay');
42145                $overlay = $('<div/>', {
42146                    class: settings.overlayClasses,
42147                    id: settings.overlayId
42148                }).appendTo($('body'));
42149            }
42150        }
42151
42152        function initEvents() {
42153            $overlay.on('click', onCloseButtonClick);
42154            $closeButton.on('click', onCloseButtonClick);
42155        }
42156
42157        function loadContent() {
42158
42159            if (!contentLoaded) {
42160                var $iframe = $self.find('iframe');
42161                $iframe.on('load', function() {
42162                    $loading.hide();
42163                    $iframe.css('display', 'block');
42164                    contentLoaded = true;
42165                });
42166                $iframe.attr('src', $self.attr('data-url'));
42167            }
42168        }
42169
42170        this.show = function () {
42171            $overlay.addClass('visible');
42172            $self.one(transitionEnd, function () {
42173                $closeButton.addClass('open');
42174                loadContent();
42175            }).addClass('open');
42176
42177            $('body').css('overflow', 'hidden');
42178        };
42179
42180        this.hide = function () {
42181            $overlay.removeClass('visible');
42182            $closeButton.removeClass('open');
42183            $self.removeClass('open');
42184            $('body').css('overflow', 'auto');
42185        }
42186    };
42187
42188
42189    $.fn.skSocialStream = function (option) {
42190        var options = typeof option == "object" && option;
42191
42192        return this.each(function () {
42193            var $this = $(this);
42194            var fullPluginName = 'teha.' + pluginName;
42195            var skSocialStream = $this.data(fullPluginName);
42196
42197            if (!skSocialStream) {
42198                skSocialStream = new SkSocialStream($this, options);
42199                $this.data(fullPluginName, skSocialStream);
42200            }
42201
42202            if (typeof option == 'string') {
42203                if (skSocialStream[option]) {
42204                    skSocialStream[option]();
42205                } else {
42206                    $.error('Unknown plugin method: ' + pluginName + '.' + option);
42207                }
42208            }
42209        });
42210    };
42211
42212    $.fn.skSocialStream.defaults = {
42213        url: '/social-stream/',
42214        overlayId: 'social-stream-slide-in-overlay',
42215        overlayClasses: 'slide-in-overlay'
42216    };
42217
42218})(jQuery);
42219
42220(function ($) {
42221    function SelectBox($select) {
42222        function updateLabel() {
42223            var selectedText = $select.find(":selected").text();
42224            console.log('Update label to [' + selectedText + '] hasClearButton = ', hasClearButton);
42225            $innerLabel.text(selectedText).toggleClass('placeholder', $select.val() == '');
42226
42227            if (hasClearButton && $select.val().length > 0) {
42228                showClearButton();
42229            }
42230
42231            $select.trigger('sk.style-select.updated');
42232        }
42233
42234        function clearValue() {
42235            $select.val(null);
42236            updateLabel();
42237            hideClearButton();
42238            $select.trigger('change');
42239        }
42240
42241        function showClearButton() {
42242            $wrapper.addClass('clear-button-visible');
42243            $select.attr('tabIndex', -1);
42244        }
42245
42246        function hideClearButton() {
42247            $wrapper.removeClass('clear-button-visible');
42248            $select.removeAttr('tabIndex');
42249        }
42250
42251        var $label, $clearButton, $wrapper, $innerLabel;
42252        var hasClearButton;
42253
42254        $label = $select.next();
42255        hasClearButton = $select.attr('data-clear-button') === 'true';
42256
42257        $wrapper = $select.parent();
42258
42259        if (!$wrapper.hasClass('select-wrapper')) {
42260            $select.wrap('<div class="select-wrapper"></div>');
42261            $wrapper = $select.parent();
42262        }
42263
42264        if (!$label.hasClass('select-label')) {
42265            $label = $('<span class="select-label"></span>');
42266            $select.after($label);
42267        }
42268
42269        $innerLabel = $label.find('span');
42270        if ($innerLabel.length === 0) {
42271            $innerLabel = $('<span class="select-label-inner"></span>');
42272            $label.append($innerLabel);
42273        }
42274
42275        $clearButton = $label.next('.clear-button');
42276        if (hasClearButton && $clearButton.length === 0) {
42277            $clearButton = $('<button type="button" class="clear-button"><span>&times;</span></button>');
42278            $wrapper.append($clearButton);
42279        }
42280
42281        if ($clearButton.length !== 0) {
42282            $clearButton.on('click', function() {
42283                clearValue();
42284            });
42285        }
42286
42287        $wrapper.addClass('initialized');
42288
42289        $select.on('change', function() {
42290            updateLabel();
42291        });
42292
42293        updateLabel();
42294
42295        return {
42296            updateLabel: updateLabel
42297        }
42298    }
42299
42300
42301    $.fn.skStyleSelect = function (method) {
42302        return this.each(function() {
42303            var $select = $(this);
42304            var selectBox = $select.data('skSelectBox');
42305
42306            if (!selectBox) {
42307                selectBox = new SelectBox($select);
42308                $select.data('skSelectBox', selectBox);
42309            }
42310
42311            if (method === 'updateLabel') {
42312                selectBox.updateLabel();
42313            }
42314        });
42315    };
42316
42317}(jQuery));
42318
42319(function ($) {
42320    var tabsInitialized = false;
42321    var activeTabs = [];
42322
42323    function updateHash() {
42324        var hash = 'tabs.';
42325        for(var tabContainerId in activeTabs) {
42326            var tabId = activeTabs[tabContainerId];
42327            hash += tabId + '.';
42328        }
42329        hash = hash.substring(0, hash.length - 1);
42330
42331        console.log('New hash', hash);
42332        window.location.hash = encodeURIComponent(hash);
42333    }
42334
42335    $.fn.skTabs = function () {
42336        var me = this.each(function() {
42337            var $tabContainer = $(this);
42338
42339            $tabContainer.find('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
42340                var tabContainerId = $tabContainer.attr('id');
42341                var tabId = $(e.target).attr('href').replace(/^#tab--/, '');
42342
42343                console.log('Tab shown: ' + tabContainerId + '.' + tabId);
42344                activeTabs[tabContainerId] = tabId;
42345
42346                updateHash();
42347            });
42348        });
42349
42350        $.skInitTabs();
42351
42352        return me;
42353    };
42354
42355    $.skInitTabs = function () {
42356        if (tabsInitialized) {
42357            return;
42358        }
42359
42360        var hash = window.location.hash.replace(/^#/, '');
42361        if (hash.length > 0) {
42362            var decodedHash = decodeURIComponent(hash);
42363            console.log('Initializing tabs with hash: ', decodedHash);
42364
42365            if (decodedHash.match(/^tabs\./, decodedHash)) {
42366                var tabIds = decodedHash.substring(5).split('.');
42367                var $firstTab = null;
42368
42369                for(var i = 0; i < tabIds.length; i++) {
42370                    var tabId = tabIds[i];
42371                    var $tab = $('a[href="#tab--' + tabId + '"]');
42372                    console.log('Activating tab', $tab);
42373                    $tab.tab('show');
42374
42375                    if ($firstTab === null) {
42376                        $firstTab = $tab;
42377                    }
42378                }
42379
42380                if ($firstTab !== null) {
42381                    console.log('Scrolling to tab: ', $firstTab);
42382                    $('html, body').animate({
42383                        scrollTop: $firstTab.offset().top - 50
42384                    }, 200);
42385                }
42386
42387            }
42388        }
42389
42390        tabsInitialized = true;
42391    };
42392}(jQuery));
42393var SiteKit = SiteKit || {};
42394
42395SiteKit.executeReadyStack = function() {
42396    for(var i = 0; i < window.readyStack.length; i++) {
42397        var callback = window.readyStack[i];
42398
42399        console.log('Executing ready stack callback function ' + i);
42400        callback($);
42401    }
42402
42403    window.readyStack = [];
42404};
42405
42406jQuery(function ($) {
42407    var imageOverlaysToLoad = {};
42408
42409    SiteKit.onWindowResize = function() {
42410        console.log('SiteKit: Resize overlay images');
42411
42412        SiteKit.$imageOverlays.each(function() {
42413            var $imageOverlay = $(this);
42414            var imageWidth = $imageOverlay.data('image-overlay-width');
42415            var imageHeight = $imageOverlay.data('image-overlay-height');
42416
42417            if (imageWidth > 0 && imageHeight > 0) {
42418                console.log('Image overlay resize: ', $imageOverlay, imageWidth, imageHeight);
42419
42420                if ($imageOverlay.outerWidth() > imageWidth && $imageOverlay.outerHeight() > imageHeight) {
42421                    console.log('Image overlay auto: ', $imageOverlay);
42422                    $imageOverlay.css('background-size', 'auto');
42423                } else {
42424                    console.log('Image overlay contain: ', $imageOverlay);
42425                    $imageOverlay.css('background-size', 'contain');
42426                }
42427            }
42428        });
42429    };
42430
42431    SiteKit.$imageOverlays = $('.bg-size-contain-no-upscale');
42432    SiteKit.$imageOverlays.each(function() {
42433        var $imageOverlay = $(this);
42434        var css = $imageOverlay.css('background-image');
42435        if (css.length > 0 && css !== 'none') {
42436            var backgroundImageUrl = css
42437                .replace(/^\s*url\(["']?/, '')
42438                .replace(/["']?\)\s*$/, '');
42439
42440            if (backgroundImageUrl) {
42441                console.log('Image overlay found: ', backgroundImageUrl);
42442                imageOverlaysToLoad[backgroundImageUrl] = true;
42443
42444                var image = new Image();
42445                image.onload = function() {
42446                    console.log('Image loaded', image.src, image.naturalWidth, image.naturalHeight);
42447
42448                    $imageOverlay.data('image-overlay-width', image.naturalWidth);
42449                    $imageOverlay.data('image-overlay-height', image.naturalHeight);
42450
42451                    delete imageOverlaysToLoad[backgroundImageUrl];
42452
42453                    if ($.isEmptyObject(imageOverlaysToLoad)) {
42454                        console.log('All images loaded, trigger resize');
42455                        SiteKit.onWindowResize();
42456                    }
42457                };
42458                image.src = backgroundImageUrl;
42459            }
42460        }
42461    });
42462
42463    $(window).on('resize', $.throttle(300, SiteKit.onWindowResize));
42464
42465    // if (typeof document.addEventListener === 'function') {
42466    //     document.addEventListener('Neos.PageLoaded', function(event) {
42467    //     }, false);
42468    // }
42469
42470    SiteKit.executeReadyStack();
42471    SiteKit.onWindowResize();
42472});
42473
42474
42475//! moment.js
42476
42477;(function (global, factory) {
42478    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
42479    typeof define === 'function' && define.amd ? define(factory) :
42480    global.moment = factory()
vendor: 35,273 bytes, lines 42480-43619
42480
42481}(this, (function () { 'use strict';
42482
42483    var hookCallback;
42484
42485    function hooks () {
42486        return hookCallback.apply(null, arguments);
42487    }
42488
42489    // This is done to register the method called with moment()
42490    // without creating circular dependencies.
42491    function setHookCallback (callback) {
42492        hookCallback = callback;
42493    }
42494
42495    function isArray(input) {
42496        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
42497    }
42498
42499    function isObject(input) {
42500        // IE8 will treat undefined and null as object if it wasn't for
42501        // input != null
42502        return input != null && Object.prototype.toString.call(input) === '[object Object]';
42503    }
42504
42505    function isObjectEmpty(obj) {
42506        if (Object.getOwnPropertyNames) {
42507            return (Object.getOwnPropertyNames(obj).length === 0);
42508        } else {
42509            var k;
42510            for (k in obj) {
42511                if (obj.hasOwnProperty(k)) {
42512                    return false;
42513                }
42514            }
42515            return true;
42516        }
42517    }
42518
42519    function isUndefined(input) {
42520        return input === void 0;
42521    }
42522
42523    function isNumber(input) {
42524        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
42525    }
42526
42527    function isDate(input) {
42528        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
42529    }
42530
42531    function map(arr, fn) {
42532        var res = [], i;
42533        for (i = 0; i < arr.length; ++i) {
42534            res.push(fn(arr[i], i));
42535        }
42536        return res;
42537    }
42538
42539    function hasOwnProp(a, b) {
42540        return Object.prototype.hasOwnProperty.call(a, b);
42541    }
42542
42543    function extend(a, b) {
42544        for (var i in b) {
42545            if (hasOwnProp(b, i)) {
42546                a[i] = b[i];
42547            }
42548        }
42549
42550        if (hasOwnProp(b, 'toString')) {
42551            a.toString = b.toString;
42552        }
42553
42554        if (hasOwnProp(b, 'valueOf')) {
42555            a.valueOf = b.valueOf;
42556        }
42557
42558        return a;
42559    }
42560
42561    function createUTC (input, format, locale, strict) {
42562        return createLocalOrUTC(input, format, locale, strict, true).utc();
42563    }
42564
42565    function defaultParsingFlags() {
42566        // We need to deep clone this object.
42567        return {
42568            empty           : false,
42569            unusedTokens    : [],
42570            unusedInput     : [],
42571            overflow        : -2,
42572            charsLeftOver   : 0,
42573            nullInput       : false,
42574            invalidMonth    : null,
42575            invalidFormat   : false,
42576            userInvalidated : false,
42577            iso             : false,
42578            parsedDateParts : [],
42579            meridiem        : null,
42580            rfc2822         : false,
42581            weekdayMismatch : false
42582        };
42583    }
42584
42585    function getParsingFlags(m) {
42586        if (m._pf == null) {
42587            m._pf = defaultParsingFlags();
42588        }
42589        return m._pf;
42590    }
42591
42592    var some;
42593    if (Array.prototype.some) {
42594        some = Array.prototype.some;
42595    } else {
42596        some = function (fun) {
42597            var t = Object(this);
42598            var len = t.length >>> 0;
42599
42600            for (var i = 0; i < len; i++) {
42601                if (i in t && fun.call(this, t[i], i, t)) {
42602                    return true;
42603                }
42604            }
42605
42606            return false;
42607        };
42608    }
42609
42610    function isValid(m) {
42611        if (m._isValid == null) {
42612            var flags = getParsingFlags(m);
42613            var parsedParts = some.call(flags.parsedDateParts, function (i) {
42614                return i != null;
42615            });
42616            var isNowValid = !isNaN(m._d.getTime()) &&
42617                flags.overflow < 0 &&
42618                !flags.empty &&
42619                !flags.invalidMonth &&
42620                !flags.invalidWeekday &&
42621                !flags.weekdayMismatch &&
42622                !flags.nullInput &&
42623                !flags.invalidFormat &&
42624                !flags.userInvalidated &&
42625                (!flags.meridiem || (flags.meridiem && parsedParts));
42626
42627            if (m._strict) {
42628                isNowValid = isNowValid &&
42629                    flags.charsLeftOver === 0 &&
42630                    flags.unusedTokens.length === 0 &&
42631                    flags.bigHour === undefined;
42632            }
42633
42634            if (Object.isFrozen == null || !Object.isFrozen(m)) {
42635                m._isValid = isNowValid;
42636            }
42637            else {
42638                return isNowValid;
42639            }
42640        }
42641        return m._isValid;
42642    }
42643
42644    function createInvalid (flags) {
42645        var m = createUTC(NaN);
42646        if (flags != null) {
42647            extend(getParsingFlags(m), flags);
42648        }
42649        else {
42650            getParsingFlags(m).userInvalidated = true;
42651        }
42652
42653        return m;
42654    }
42655
42656    // Plugins that add properties should also add the key here (null value),
42657    // so we can properly clone ourselves.
42658    var momentProperties = hooks.momentProperties = [];
42659
42660    function copyConfig(to, from) {
42661        var i, prop, val;
42662
42663        if (!isUndefined(from._isAMomentObject)) {
42664            to._isAMomentObject = from._isAMomentObject;
42665        }
42666        if (!isUndefined(from._i)) {
42667            to._i = from._i;
42668        }
42669        if (!isUndefined(from._f)) {
42670            to._f = from._f;
42671        }
42672        if (!isUndefined(from._l)) {
42673            to._l = from._l;
42674        }
42675        if (!isUndefined(from._strict)) {
42676            to._strict = from._strict;
42677        }
42678        if (!isUndefined(from._tzm)) {
42679            to._tzm = from._tzm;
42680        }
42681        if (!isUndefined(from._isUTC)) {
42682            to._isUTC = from._isUTC;
42683        }
42684        if (!isUndefined(from._offset)) {
42685            to._offset = from._offset;
42686        }
42687        if (!isUndefined(from._pf)) {
42688            to._pf = getParsingFlags(from);
42689        }
42690        if (!isUndefined(from._locale)) {
42691            to._locale = from._locale;
42692        }
42693
42694        if (momentProperties.length > 0) {
42695            for (i = 0; i < momentProperties.length; i++) {
42696                prop = momentProperties[i];
42697                val = from[prop];
42698                if (!isUndefined(val)) {
42699                    to[prop] = val;
42700                }
42701            }
42702        }
42703
42704        return to;
42705    }
42706
42707    var updateInProgress = false;
42708
42709    // Moment prototype object
42710    function Moment(config) {
42711        copyConfig(this, config);
42712        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
42713        if (!this.isValid()) {
42714            this._d = new Date(NaN);
42715        }
42716        // Prevent infinite loop in case updateOffset creates new moment
42717        // objects.
42718        if (updateInProgress === false) {
42719            updateInProgress = true;
42720            hooks.updateOffset(this);
42721            updateInProgress = false;
42722        }
42723    }
42724
42725    function isMoment (obj) {
42726        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
42727    }
42728
42729    function absFloor (number) {
42730        if (number < 0) {
42731            // -0 -> 0
42732            return Math.ceil(number) || 0;
42733        } else {
42734            return Math.floor(number);
42735        }
42736    }
42737
42738    function toInt(argumentForCoercion) {
42739        var coercedNumber = +argumentForCoercion,
42740            value = 0;
42741
42742        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
42743            value = absFloor(coercedNumber);
42744        }
42745
42746        return value;
42747    }
42748
42749    // compare two arrays, return the number of differences
42750    function compareArrays(array1, array2, dontConvert) {
42751        var len = Math.min(array1.length, array2.length),
42752            lengthDiff = Math.abs(array1.length - array2.length),
42753            diffs = 0,
42754            i;
42755        for (i = 0; i < len; i++) {
42756            if ((dontConvert && array1[i] !== array2[i]) ||
42757                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
42758                diffs++;
42759            }
42760        }
42761        return diffs + lengthDiff;
42762    }
42763
42764    function warn(msg) {
42765        if (hooks.suppressDeprecationWarnings === false &&
42766                (typeof console !==  'undefined') && console.warn) {
42767            console.warn('Deprecation warning: ' + msg);
42768        }
42769    }
42770
42771    function deprecate(msg, fn) {
42772        var firstTime = true;
42773
42774        return extend(function () {
42775            if (hooks.deprecationHandler != null) {
42776                hooks.deprecationHandler(null, msg);
42777            }
42778            if (firstTime) {
42779                var args = [];
42780                var arg;
42781                for (var i = 0; i < arguments.length; i++) {
42782                    arg = '';
42783                    if (typeof arguments[i] === 'object') {
42784                        arg += '\n[' + i + '] ';
42785                        for (var key in arguments[0]) {
42786                            arg += key + ': ' + arguments[0][key] + ', ';
42787                        }
42788                        arg = arg.slice(0, -2); // Remove trailing comma and space
42789                    } else {
42790                        arg = arguments[i];
42791                    }
42792                    args.push(arg);
42793                }
42794                warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
42795                firstTime = false;
42796            }
42797            return fn.apply(this, arguments);
42798        }, fn);
42799    }
42800
42801    var deprecations = {};
42802
42803    function deprecateSimple(name, msg) {
42804        if (hooks.deprecationHandler != null) {
42805            hooks.deprecationHandler(name, msg);
42806        }
42807        if (!deprecations[name]) {
42808            warn(msg);
42809            deprecations[name] = true;
42810        }
42811    }
42812
42813    hooks.suppressDeprecationWarnings = false;
42814    hooks.deprecationHandler = null;
42815
42816    function isFunction(input) {
42817        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
42818    }
42819
42820    function set (config) {
42821        var prop, i;
42822        for (i in config) {
42823            prop = config[i];
42824            if (isFunction(prop)) {
42825                this[i] = prop;
42826            } else {
42827                this['_' + i] = prop;
42828            }
42829        }
42830        this._config = config;
42831        // Lenient ordinal parsing accepts just a number in addition to
42832        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
42833        // TODO: Remove "ordinalParse" fallback in next major release.
42834        this._dayOfMonthOrdinalParseLenient = new RegExp(
42835            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
42836                '|' + (/\d{1,2}/).source);
42837    }
42838
42839    function mergeConfigs(parentConfig, childConfig) {
42840        var res = extend({}, parentConfig), prop;
42841        for (prop in childConfig) {
42842            if (hasOwnProp(childConfig, prop)) {
42843                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
42844                    res[prop] = {};
42845                    extend(res[prop], parentConfig[prop]);
42846                    extend(res[prop], childConfig[prop]);
42847                } else if (childConfig[prop] != null) {
42848                    res[prop] = childConfig[prop];
42849                } else {
42850                    delete res[prop];
42851                }
42852            }
42853        }
42854        for (prop in parentConfig) {
42855            if (hasOwnProp(parentConfig, prop) &&
42856                    !hasOwnProp(childConfig, prop) &&
42857                    isObject(parentConfig[prop])) {
42858                // make sure changes to properties don't modify parent config
42859                res[prop] = extend({}, res[prop]);
42860            }
42861        }
42862        return res;
42863    }
42864
42865    function Locale(config) {
42866        if (config != null) {
42867            this.set(config);
42868        }
42869    }
42870
42871    var keys;
42872
42873    if (Object.keys) {
42874        keys = Object.keys;
42875    } else {
42876        keys = function (obj) {
42877            var i, res = [];
42878            for (i in obj) {
42879                if (hasOwnProp(obj, i)) {
42880                    res.push(i);
42881                }
42882            }
42883            return res;
42884        };
42885    }
42886
42887    var defaultCalendar = {
42888        sameDay : '[Today at] LT',
42889        nextDay : '[Tomorrow at] LT',
42890        nextWeek : 'dddd [at] LT',
42891        lastDay : '[Yesterday at] LT',
42892        lastWeek : '[Last] dddd [at] LT',
42893        sameElse : 'L'
42894    };
42895
42896    function calendar (key, mom, now) {
42897        var output = this._calendar[key] || this._calendar['sameElse'];
42898        return isFunction(output) ? output.call(mom, now) : output;
42899    }
42900
42901    var defaultLongDateFormat = {
42902        LTS  : 'h:mm:ss A',
42903        LT   : 'h:mm A',
42904        L    : 'MM/DD/YYYY',
42905        LL   : 'MMMM D, YYYY',
42906        LLL  : 'MMMM D, YYYY h:mm A',
42907        LLLL : 'dddd, MMMM D, YYYY h:mm A'
42908    };
42909
42910    function longDateFormat (key) {
42911        var format = this._longDateFormat[key],
42912            formatUpper = this._longDateFormat[key.toUpperCase()];
42913
42914        if (format || !formatUpper) {
42915            return format;
42916        }
42917
42918        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
42919            return val.slice(1);
42920        });
42921
42922        return this._longDateFormat[key];
42923    }
42924
42925    var defaultInvalidDate = 'Invalid date';
42926
42927    function invalidDate () {
42928        return this._invalidDate;
42929    }
42930
42931    var defaultOrdinal = '%d';
42932    var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
42933
42934    function ordinal (number) {
42935        return this._ordinal.replace('%d', number);
42936    }
42937
42938    var defaultRelativeTime = {
42939        future : 'in %s',
42940        past   : '%s ago',
42941        s  : 'a few seconds',
42942        ss : '%d seconds',
42943        m  : 'a minute',
42944        mm : '%d minutes',
42945        h  : 'an hour',
42946        hh : '%d hours',
42947        d  : 'a day',
42948        dd : '%d days',
42949        M  : 'a month',
42950        MM : '%d months',
42951        y  : 'a year',
42952        yy : '%d years'
42953    };
42954
42955    function relativeTime (number, withoutSuffix, string, isFuture) {
42956        var output = this._relativeTime[string];
42957        return (isFunction(output)) ?
42958            output(number, withoutSuffix, string, isFuture) :
42959            output.replace(/%d/i, number);
42960    }
42961
42962    function pastFuture (diff, output) {
42963        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
42964        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
42965    }
42966
42967    var aliases = {};
42968
42969    function addUnitAlias (unit, shorthand) {
42970        var lowerCase = unit.toLowerCase();
42971        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
42972    }
42973
42974    function normalizeUnits(units) {
42975        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
42976    }
42977
42978    function normalizeObjectUnits(inputObject) {
42979        var normalizedInput = {},
42980            normalizedProp,
42981            prop;
42982
42983        for (prop in inputObject) {
42984            if (hasOwnProp(inputObject, prop)) {
42985                normalizedProp = normalizeUnits(prop);
42986                if (normalizedProp) {
42987                    normalizedInput[normalizedProp] = inputObject[prop];
42988                }
42989            }
42990        }
42991
42992        return normalizedInput;
42993    }
42994
42995    var priorities = {};
42996
42997    function addUnitPriority(unit, priority) {
42998        priorities[unit] = priority;
42999    }
43000
43001    function getPrioritizedUnits(unitsObj) {
43002        var units = [];
43003        for (var u in unitsObj) {
43004            units.push({unit: u, priority: priorities[u]});
43005        }
43006        units.sort(function (a, b) {
43007            return a.priority - b.priority;
43008        });
43009        return units;
43010    }
43011
43012    function zeroFill(number, targetLength, forceSign) {
43013        var absNumber = '' + Math.abs(number),
43014            zerosToFill = targetLength - absNumber.length,
43015            sign = number >= 0;
43016        return (sign ? (forceSign ? '+' : '') : '-') +
43017            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
43018    }
43019
43020    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
43021
43022    var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
43023
43024    var formatFunctions = {};
43025
43026    var formatTokenFunctions = {};
43027
43028    // token:    'M'
43029    // padded:   ['MM', 2]
43030    // ordinal:  'Mo'
43031    // callback: function () { this.month() + 1 }
43032    function addFormatToken (token, padded, ordinal, callback) {
43033        var func = callback;
43034        if (typeof callback === 'string') {
43035            func = function () {
43036                return this[callback]();
43037            };
43038        }
43039        if (token) {
43040            formatTokenFunctions[token] = func;
43041        }
43042        if (padded) {
43043            formatTokenFunctions[padded[0]] = function () {
43044                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
43045            };
43046        }
43047        if (ordinal) {
43048            formatTokenFunctions[ordinal] = function () {
43049                return this.localeData().ordinal(func.apply(this, arguments), token);
43050            };
43051        }
43052    }
43053
43054    function removeFormattingTokens(input) {
43055        if (input.match(/\[[\s\S]/)) {
43056            return input.replace(/^\[|\]$/g, '');
43057        }
43058        return input.replace(/\\/g, '');
43059    }
43060
43061    function makeFormatFunction(format) {
43062        var array = format.match(formattingTokens), i, length;
43063
43064        for (i = 0, length = array.length; i < length; i++) {
43065            if (formatTokenFunctions[array[i]]) {
43066                array[i] = formatTokenFunctions[array[i]];
43067            } else {
43068                array[i] = removeFormattingTokens(array[i]);
43069            }
43070        }
43071
43072        return function (mom) {
43073            var output = '', i;
43074            for (i = 0; i < length; i++) {
43075                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
43076            }
43077            return output;
43078        };
43079    }
43080
43081    // format date using native date object
43082    function formatMoment(m, format) {
43083        if (!m.isValid()) {
43084            return m.localeData().invalidDate();
43085        }
43086
43087        format = expandFormat(format, m.localeData());
43088        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
43089
43090        return formatFunctions[format](m);
43091    }
43092
43093    function expandFormat(format, locale) {
43094        var i = 5;
43095
43096        function replaceLongDateFormatTokens(input) {
43097            return locale.longDateFormat(input) || input;
43098        }
43099
43100        localFormattingTokens.lastIndex = 0;
43101        while (i >= 0 && localFormattingTokens.test(format)) {
43102            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
43103            localFormattingTokens.lastIndex = 0;
43104            i -= 1;
43105        }
43106
43107        return format;
43108    }
43109
43110    var match1         = /\d/;            //       0 - 9
43111    var match2         = /\d\d/;          //      00 - 99
43112    var match3         = /\d{3}/;         //     000 - 999
43113    var match4         = /\d{4}/;         //    0000 - 9999
43114    var match6         = /[+-]?\d{6}/;    // -999999 - 999999
43115    var match1to2      = /\d\d?/;         //       0 - 99
43116    var match3to4      = /\d\d\d\d?/;     //     999 - 9999
43117    var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999
43118    var match1to3      = /\d{1,3}/;       //       0 - 999
43119    var match1to4      = /\d{1,4}/;       //       0 - 9999
43120    var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
43121
43122    var matchUnsigned  = /\d+/;           //       0 - inf
43123    var matchSigned    = /[+-]?\d+/;      //    -inf - inf
43124
43125    var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
43126    var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
43127
43128    var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
43129
43130    // any word (or two) characters or numbers including two/three word month in arabic.
43131    // includes scottish gaelic two word and hyphenated months
43132    var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;
43133
43134    var regexes = {};
43135
43136    function addRegexToken (token, regex, strictRegex) {
43137        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
43138            return (isStrict && strictRegex) ? strictRegex : regex;
43139        };
43140    }
43141
43142    function getParseRegexForToken (token, config) {
43143        if (!hasOwnProp(regexes, token)) {
43144            return new RegExp(unescapeFormat(token));
43145        }
43146
43147        return regexes[token](config._strict, config._locale);
43148    }
43149
43150    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
43151    function unescapeFormat(s) {
43152        return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
43153            return p1 || p2 || p3 || p4;
43154        }));
43155    }
43156
43157    function regexEscape(s) {
43158        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
43159    }
43160
43161    var tokens = {};
43162
43163    function addParseToken (token, callback) {
43164        var i, func = callback;
43165        if (typeof token === 'string') {
43166            token = [token];
43167        }
43168        if (isNumber(callback)) {
43169            func = function (input, array) {
43170                array[callback] = toInt(input);
43171            };
43172        }
43173        for (i = 0; i < token.length; i++) {
43174            tokens[token[i]] = func;
43175        }
43176    }
43177
43178    function addWeekParseToken (token, callback) {
43179        addParseToken(token, function (input, array, config, token) {
43180            config._w = config._w || {};
43181            callback(input, config._w, config, token);
43182        });
43183    }
43184
43185    function addTimeToArrayFromToken(token, input, config) {
43186        if (input != null && hasOwnProp(tokens, token)) {
43187            tokens[token](input, config._a, config, token);
43188        }
43189    }
43190
43191    var YEAR = 0;
43192    var MONTH = 1;
43193    var DATE = 2;
43194    var HOUR = 3;
43195    var MINUTE = 4;
43196    var SECOND = 5;
43197    var MILLISECOND = 6;
43198    var WEEK = 7;
43199    var WEEKDAY = 8;
43200
43201    // FORMATTING
43202
43203    addFormatToken('Y', 0, 0, function () {
43204        var y = this.year();
43205        return y <= 9999 ? '' + y : '+' + y;
43206    });
43207
43208    addFormatToken(0, ['YY', 2], 0, function () {
43209        return this.year() % 100;
43210    });
43211
43212    addFormatToken(0, ['YYYY',   4],       0, 'year');
43213    addFormatToken(0, ['YYYYY',  5],       0, 'year');
43214    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
43215
43216    // ALIASES
43217
43218    addUnitAlias('year', 'y');
43219
43220    // PRIORITIES
43221
43222    addUnitPriority('year', 1);
43223
43224    // PARSING
43225
43226    addRegexToken('Y',      matchSigned);
43227    addRegexToken('YY',     match1to2, match2);
43228    addRegexToken('YYYY',   match1to4, match4);
43229    addRegexToken('YYYYY',  match1to6, match6);
43230    addRegexToken('YYYYYY', match1to6, match6);
43231
43232    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
43233    addParseToken('YYYY', function (input, array) {
43234        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
43235    });
43236    addParseToken('YY', function (input, array) {
43237        array[YEAR] = hooks.parseTwoDigitYear(input);
43238    });
43239    addParseToken('Y', function (input, array) {
43240        array[YEAR] = parseInt(input, 10);
43241    });
43242
43243    // HELPERS
43244
43245    function daysInYear(year) {
43246        return isLeapYear(year) ? 366 : 365;
43247    }
43248
43249    function isLeapYear(year) {
43250        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
43251    }
43252
43253    // HOOKS
43254
43255    hooks.parseTwoDigitYear = function (input) {
43256        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
43257    };
43258
43259    // MOMENTS
43260
43261    var getSetYear = makeGetSet('FullYear', true);
43262
43263    function getIsLeapYear () {
43264        return isLeapYear(this.year());
43265    }
43266
43267    function makeGetSet (unit, keepTime) {
43268        return function (value) {
43269            if (value != null) {
43270                set$1(this, unit, value);
43271                hooks.updateOffset(this, keepTime);
43272                return this;
43273            } else {
43274                return get(this, unit);
43275            }
43276        };
43277    }
43278
43279    function get (mom, unit) {
43280        return mom.isValid() ?
43281            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
43282    }
43283
43284    function set$1 (mom, unit, value) {
43285        if (mom.isValid() && !isNaN(value)) {
43286            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
43287                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
43288            }
43289            else {
43290                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
43291            }
43292        }
43293    }
43294
43295    // MOMENTS
43296
43297    function stringGet (units) {
43298        units = normalizeUnits(units);
43299        if (isFunction(this[units])) {
43300            return this[units]();
43301        }
43302        return this;
43303    }
43304
43305
43306    function stringSet (units, value) {
43307        if (typeof units === 'object') {
43308            units = normalizeObjectUnits(units);
43309            var prioritized = getPrioritizedUnits(units);
43310            for (var i = 0; i < prioritized.length; i++) {
43311                this[prioritized[i].unit](units[prioritized[i].unit]);
43312            }
43313        } else {
43314            units = normalizeUnits(units);
43315            if (isFunction(this[units])) {
43316                return this[units](value);
43317            }
43318        }
43319        return this;
43320    }
43321
43322    function mod(n, x) {
43323        return ((n % x) + x) % x;
43324    }
43325
43326    var indexOf;
43327
43328    if (Array.prototype.indexOf) {
43329        indexOf = Array.prototype.indexOf;
43330    } else {
43331        indexOf = function (o) {
43332            // I know
43333            var i;
43334            for (i = 0; i < this.length; ++i) {
43335                if (this[i] === o) {
43336                    return i;
43337                }
43338            }
43339            return -1;
43340        };
43341    }
43342
43343    function daysInMonth(year, month) {
43344        if (isNaN(year) || isNaN(month)) {
43345            return NaN;
43346        }
43347        var modMonth = mod(month, 12);
43348        year += (month - modMonth) / 12;
43349        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);
43350    }
43351
43352    // FORMATTING
43353
43354    addFormatToken('M', ['MM', 2], 'Mo', function () {
43355        return this.month() + 1;
43356    });
43357
43358    addFormatToken('MMM', 0, 0, function (format) {
43359        return this.localeData().monthsShort(this, format);
43360    });
43361
43362    addFormatToken('MMMM', 0, 0, function (format) {
43363        return this.localeData().months(this, format);
43364    });
43365
43366    // ALIASES
43367
43368    addUnitAlias('month', 'M');
43369
43370    // PRIORITY
43371
43372    addUnitPriority('month', 8);
43373
43374    // PARSING
43375
43376    addRegexToken('M',    match1to2);
43377    addRegexToken('MM',   match1to2, match2);
43378    addRegexToken('MMM',  function (isStrict, locale) {
43379        return locale.monthsShortRegex(isStrict);
43380    });
43381    addRegexToken('MMMM', function (isStrict, locale) {
43382        return locale.monthsRegex(isStrict);
43383    });
43384
43385    addParseToken(['M', 'MM'], function (input, array) {
43386        array[MONTH] = toInt(input) - 1;
43387    });
43388
43389    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
43390        var month = config._locale.monthsParse(input, token, config._strict);
43391        // if we didn't find a month name, mark the date as invalid.
43392        if (month != null) {
43393            array[MONTH] = month;
43394        } else {
43395            getParsingFlags(config).invalidMonth = input;
43396        }
43397    });
43398
43399    // LOCALES
43400
43401    var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
43402    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
43403    function localeMonths (m, format) {
43404        if (!m) {
43405            return isArray(this._months) ? this._months :
43406                this._months['standalone'];
43407        }
43408        return isArray(this._months) ? this._months[m.month()] :
43409            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
43410    }
43411
43412    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
43413    function localeMonthsShort (m, format) {
43414        if (!m) {
43415            return isArray(this._monthsShort) ? this._monthsShort :
43416                this._monthsShort['standalone'];
43417        }
43418        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
43419            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
43420    }
43421
43422    function handleStrictParse(monthName, format, strict) {
43423        var i, ii, mom, llc = monthName.toLocaleLowerCase();
43424        if (!this._monthsParse) {
43425            // this is not used
43426            this._monthsParse = [];
43427            this._longMonthsParse = [];
43428            this._shortMonthsParse = [];
43429            for (i = 0; i < 12; ++i) {
43430                mom = createUTC([2000, i]);
43431                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
43432                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
43433            }
43434        }
43435
43436        if (strict) {
43437            if (format === 'MMM') {
43438                ii = indexOf.call(this._shortMonthsParse, llc);
43439                return ii !== -1 ? ii : null;
43440            } else {
43441                ii = indexOf.call(this._longMonthsParse, llc);
43442                return ii !== -1 ? ii : null;
43443            }
43444        } else {
43445            if (format === 'MMM') {
43446                ii = indexOf.call(this._shortMonthsParse, llc);
43447                if (ii !== -1) {
43448                    return ii;
43449                }
43450                ii = indexOf.call(this._longMonthsParse, llc);
43451                return ii !== -1 ? ii : null;
43452            } else {
43453                ii = indexOf.call(this._longMonthsParse, llc);
43454                if (ii !== -1) {
43455                    return ii;
43456                }
43457                ii = indexOf.call(this._shortMonthsParse, llc);
43458                return ii !== -1 ? ii : null;
43459            }
43460        }
43461    }
43462
43463    function localeMonthsParse (monthName, format, strict) {
43464        var i, mom, regex;
43465
43466        if (this._monthsParseExact) {
43467            return handleStrictParse.call(this, monthName, format, strict);
43468        }
43469
43470        if (!this._monthsParse) {
43471            this._monthsParse = [];
43472            this._longMonthsParse = [];
43473            this._shortMonthsParse = [];
43474        }
43475
43476        // TODO: add sorting
43477        // Sorting makes sure if one month (or abbr) is a prefix of another
43478        // see sorting in computeMonthsParse
43479        for (i = 0; i < 12; i++) {
43480            // make the regex if we don't have it already
43481            mom = createUTC([2000, i]);
43482            if (strict && !this._longMonthsParse[i]) {
43483                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
43484                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
43485            }
43486            if (!strict && !this._monthsParse[i]) {
43487                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
43488                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
43489            }
43490            // test the regex
43491            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
43492                return i;
43493            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
43494                return i;
43495            } else if (!strict && this._monthsParse[i].test(monthName)) {
43496                return i;
43497            }
43498        }
43499    }
43500
43501    // MOMENTS
43502
43503    function setMonth (mom, value) {
43504        var dayOfMonth;
43505
43506        if (!mom.isValid()) {
43507            // No op
43508            return mom;
43509        }
43510
43511        if (typeof value === 'string') {
43512            if (/^\d+$/.test(value)) {
43513                value = toInt(value);
43514            } else {
43515                value = mom.localeData().monthsParse(value);
43516                // TODO: Another silent failure?
43517                if (!isNumber(value)) {
43518                    return mom;
43519                }
43520            }
43521        }
43522
43523        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
43524        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
43525        return mom;
43526    }
43527
43528    function getSetMonth (value) {
43529        if (value != null) {
43530            setMonth(this, value);
43531            hooks.updateOffset(this, true);
43532            return this;
43533        } else {
43534            return get(this, 'Month');
43535        }
43536    }
43537
43538    function getDaysInMonth () {
43539        return daysInMonth(this.year(), this.month());
43540    }
43541
43542    var defaultMonthsShortRegex = matchWord;
43543    function monthsShortRegex (isStrict) {
43544        if (this._monthsParseExact) {
43545            if (!hasOwnProp(this, '_monthsRegex')) {
43546                computeMonthsParse.call(this);
43547            }
43548            if (isStrict) {
43549                return this._monthsShortStrictRegex;
43550            } else {
43551                return this._monthsShortRegex;
43552            }
43553        } else {
43554            if (!hasOwnProp(this, '_monthsShortRegex')) {
43555                this._monthsShortRegex = defaultMonthsShortRegex;
43556            }
43557            return this._monthsShortStrictRegex && isStrict ?
43558                this._monthsShortStrictRegex : this._monthsShortRegex;
43559        }
43560    }
43561
43562    var defaultMonthsRegex = matchWord;
43563    function monthsRegex (isStrict) {
43564        if (this._monthsParseExact) {
43565            if (!hasOwnProp(this, '_monthsRegex')) {
43566                computeMonthsParse.call(this);
43567            }
43568            if (isStrict) {
43569                return this._monthsStrictRegex;
43570            } else {
43571                return this._monthsRegex;
43572            }
43573        } else {
43574            if (!hasOwnProp(this, '_monthsRegex')) {
43575                this._monthsRegex = defaultMonthsRegex;
43576            }
43577            return this._monthsStrictRegex && isStrict ?
43578                this._monthsStrictRegex : this._monthsRegex;
43579        }
43580    }
43581
43582    function computeMonthsParse () {
43583        function cmpLenRev(a, b) {
43584            return b.length - a.length;
43585        }
43586
43587        var shortPieces = [], longPieces = [], mixedPieces = [],
43588            i, mom;
43589        for (i = 0; i < 12; i++) {
43590            // make the regex if we don't have it already
43591            mom = createUTC([2000, i]);
43592            shortPieces.push(this.monthsShort(mom, ''));
43593            longPieces.push(this.months(mom, ''));
43594            mixedPieces.push(this.months(mom, ''));
43595            mixedPieces.push(this.monthsShort(mom, ''));
43596        }
43597        // Sorting makes sure if one month (or abbr) is a prefix of another it
43598        // will match the longer piece.
43599        shortPieces.sort(cmpLenRev);
43600        longPieces.sort(cmpLenRev);
43601        mixedPieces.sort(cmpLenRev);
43602        for (i = 0; i < 12; i++) {
43603            shortPieces[i] = regexEscape(shortPieces[i]);
43604            longPieces[i] = regexEscape(longPieces[i]);
43605        }
43606        for (i = 0; i < 24; i++) {
43607            mixedPieces[i] = regexEscape(mixedPieces[i]);
43608        }
43609
43610        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
43611        this._monthsShortRegex = this._monthsRegex;
43612        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
43613        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
43614    }
43615
43616    function createDate (y, m, d, h, M, s, ms) {
43617        // can't just apply() to create a date:
43618        // https://stackoverflow.com/q/181348
43619        var date
vendor: 3,190 bytes, lines 43619-43721
43619 = new Date(y, m, d, h, M, s, ms);
43620
43621        // the date constructor remaps years 0-99 to 1900-1999
43622        if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
43623            date.setFullYear(y);
43624        }
43625        return date;
43626    }
43627
43628    function createUTCDate (y) {
43629        var date = new Date(Date.UTC.apply(null, arguments));
43630
43631        // the Date.UTC function remaps years 0-99 to 1900-1999
43632        if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
43633            date.setUTCFullYear(y);
43634        }
43635        return date;
43636    }
43637
43638    // start-of-first-week - start-of-year
43639    function firstWeekOffset(year, dow, doy) {
43640        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
43641            fwd = 7 + dow - doy,
43642            // first-week day local weekday -- which local weekday is fwd
43643            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
43644
43645        return -fwdlw + fwd - 1;
43646    }
43647
43648    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
43649    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
43650        var localWeekday = (7 + weekday - dow) % 7,
43651            weekOffset = firstWeekOffset(year, dow, doy),
43652            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
43653            resYear, resDayOfYear;
43654
43655        if (dayOfYear <= 0) {
43656            resYear = year - 1;
43657            resDayOfYear = daysInYear(resYear) + dayOfYear;
43658        } else if (dayOfYear > daysInYear(year)) {
43659            resYear = year + 1;
43660            resDayOfYear = dayOfYear - daysInYear(year);
43661        } else {
43662            resYear = year;
43663            resDayOfYear = dayOfYear;
43664        }
43665
43666        return {
43667            year: resYear,
43668            dayOfYear: resDayOfYear
43669        };
43670    }
43671
43672    function weekOfYear(mom, dow, doy) {
43673        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
43674            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
43675            resWeek, resYear;
43676
43677        if (week < 1) {
43678            resYear = mom.year() - 1;
43679            resWeek = week + weeksInYear(resYear, dow, doy);
43680        } else if (week > weeksInYear(mom.year(), dow, doy)) {
43681            resWeek = week - weeksInYear(mom.year(), dow, doy);
43682            resYear = mom.year() + 1;
43683        } else {
43684            resYear = mom.year();
43685            resWeek = week;
43686        }
43687
43688        return {
43689            week: resWeek,
43690            year: resYear
43691        };
43692    }
43693
43694    function weeksInYear(year, dow, doy) {
43695        var weekOffset = firstWeekOffset(year, dow, doy),
43696            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
43697        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
43698    }
43699
43700    // FORMATTING
43701
43702    addFormatToken('w', ['ww', 2], 'wo', 'week');
43703    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
43704
43705    // ALIASES
43706
43707    addUnitAlias('week', 'w');
43708    addUnitAlias('isoWeek', 'W');
43709
43710    // PRIORITIES
43711
43712    addUnitPriority('week', 5);
43713    addUnitPriority('isoWeek', 5);
43714
43715    // PARSING
43716
43717    addRegexToken('w',  match1to2);
43718    addRegexToken('ww', match1to2, match2);
43719    addRegexToken('W',  match1to2);
43720    addRegexToken('WW', match1to2, match2);
43721
vendor: 16,384 bytes, lines 43722-44204
43722    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
43723        week[token.substr(0, 1)] = toInt(input);
43724    });
43725
43726    // HELPERS
43727
43728    // LOCALES
43729
43730    function localeWeek (mom) {
43731        return weekOfYear(mom, this._week.dow, this._week.doy).week;
43732    }
43733
43734    var defaultLocaleWeek = {
43735        dow : 0, // Sunday is the first day of the week.
43736        doy : 6  // The week that contains Jan 1st is the first week of the year.
43737    };
43738
43739    function localeFirstDayOfWeek () {
43740        return this._week.dow;
43741    }
43742
43743    function localeFirstDayOfYear () {
43744        return this._week.doy;
43745    }
43746
43747    // MOMENTS
43748
43749    function getSetWeek (input) {
43750        var week = this.localeData().week(this);
43751        return input == null ? week : this.add((input - week) * 7, 'd');
43752    }
43753
43754    function getSetISOWeek (input) {
43755        var week = weekOfYear(this, 1, 4).week;
43756        return input == null ? week : this.add((input - week) * 7, 'd');
43757    }
43758
43759    // FORMATTING
43760
43761    addFormatToken('d', 0, 'do', 'day');
43762
43763    addFormatToken('dd', 0, 0, function (format) {
43764        return this.localeData().weekdaysMin(this, format);
43765    });
43766
43767    addFormatToken('ddd', 0, 0, function (format) {
43768        return this.localeData().weekdaysShort(this, format);
43769    });
43770
43771    addFormatToken('dddd', 0, 0, function (format) {
43772        return this.localeData().weekdays(this, format);
43773    });
43774
43775    addFormatToken('e', 0, 0, 'weekday');
43776    addFormatToken('E', 0, 0, 'isoWeekday');
43777
43778    // ALIASES
43779
43780    addUnitAlias('day', 'd');
43781    addUnitAlias('weekday', 'e');
43782    addUnitAlias('isoWeekday', 'E');
43783
43784    // PRIORITY
43785    addUnitPriority('day', 11);
43786    addUnitPriority('weekday', 11);
43787    addUnitPriority('isoWeekday', 11);
43788
43789    // PARSING
43790
43791    addRegexToken('d',    match1to2);
43792    addRegexToken('e',    match1to2);
43793    addRegexToken('E',    match1to2);
43794    addRegexToken('dd',   function (isStrict, locale) {
43795        return locale.weekdaysMinRegex(isStrict);
43796    });
43797    addRegexToken('ddd',   function (isStrict, locale) {
43798        return locale.weekdaysShortRegex(isStrict);
43799    });
43800    addRegexToken('dddd',   function (isStrict, locale) {
43801        return locale.weekdaysRegex(isStrict);
43802    });
43803
43804    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
43805        var weekday = config._locale.weekdaysParse(input, token, config._strict);
43806        // if we didn't get a weekday name, mark the date as invalid
43807        if (weekday != null) {
43808            week.d = weekday;
43809        } else {
43810            getParsingFlags(config).invalidWeekday = input;
43811        }
43812    });
43813
43814    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
43815        week[token] = toInt(input);
43816    });
43817
43818    // HELPERS
43819
43820    function parseWeekday(input, locale) {
43821        if (typeof input !== 'string') {
43822            return input;
43823        }
43824
43825        if (!isNaN(input)) {
43826            return parseInt(input, 10);
43827        }
43828
43829        input = locale.weekdaysParse(input);
43830        if (typeof input === 'number') {
43831            return input;
43832        }
43833
43834        return null;
43835    }
43836
43837    function parseIsoWeekday(input, locale) {
43838        if (typeof input === 'string') {
43839            return locale.weekdaysParse(input) % 7 || 7;
43840        }
43841        return isNaN(input) ? null : input;
43842    }
43843
43844    // LOCALES
43845
43846    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
43847    function localeWeekdays (m, format) {
43848        if (!m) {
43849            return isArray(this._weekdays) ? this._weekdays :
43850                this._weekdays['standalone'];
43851        }
43852        return isArray(this._weekdays) ? this._weekdays[m.day()] :
43853            this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
43854    }
43855
43856    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
43857    function localeWeekdaysShort (m) {
43858        return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
43859    }
43860
43861    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
43862    function localeWeekdaysMin (m) {
43863        return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
43864    }
43865
43866    function handleStrictParse$1(weekdayName, format, strict) {
43867        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
43868        if (!this._weekdaysParse) {
43869            this._weekdaysParse = [];
43870            this._shortWeekdaysParse = [];
43871            this._minWeekdaysParse = [];
43872
43873            for (i = 0; i < 7; ++i) {
43874                mom = createUTC([2000, 1]).day(i);
43875                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
43876                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
43877                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
43878            }
43879        }
43880
43881        if (strict) {
43882            if (format === 'dddd') {
43883                ii = indexOf.call(this._weekdaysParse, llc);
43884                return ii !== -1 ? ii : null;
43885            } else if (format === 'ddd') {
43886                ii = indexOf.call(this._shortWeekdaysParse, llc);
43887                return ii !== -1 ? ii : null;
43888            } else {
43889                ii = indexOf.call(this._minWeekdaysParse, llc);
43890                return ii !== -1 ? ii : null;
43891            }
43892        } else {
43893            if (format === 'dddd') {
43894                ii = indexOf.call(this._weekdaysParse, llc);
43895                if (ii !== -1) {
43896                    return ii;
43897                }
43898                ii = indexOf.call(this._shortWeekdaysParse, llc);
43899                if (ii !== -1) {
43900                    return ii;
43901                }
43902                ii = indexOf.call(this._minWeekdaysParse, llc);
43903                return ii !== -1 ? ii : null;
43904            } else if (format === 'ddd') {
43905                ii = indexOf.call(this._shortWeekdaysParse, llc);
43906                if (ii !== -1) {
43907                    return ii;
43908                }
43909                ii = indexOf.call(this._weekdaysParse, llc);
43910                if (ii !== -1) {
43911                    return ii;
43912                }
43913                ii = indexOf.call(this._minWeekdaysParse, llc);
43914                return ii !== -1 ? ii : null;
43915            } else {
43916                ii = indexOf.call(this._minWeekdaysParse, llc);
43917                if (ii !== -1) {
43918                    return ii;
43919                }
43920                ii = indexOf.call(this._weekdaysParse, llc);
43921                if (ii !== -1) {
43922                    return ii;
43923                }
43924                ii = indexOf.call(this._shortWeekdaysParse, llc);
43925                return ii !== -1 ? ii : null;
43926            }
43927        }
43928    }
43929
43930    function localeWeekdaysParse (weekdayName, format, strict) {
43931        var i, mom, regex;
43932
43933        if (this._weekdaysParseExact) {
43934            return handleStrictParse$1.call(this, weekdayName, format, strict);
43935        }
43936
43937        if (!this._weekdaysParse) {
43938            this._weekdaysParse = [];
43939            this._minWeekdaysParse = [];
43940            this._shortWeekdaysParse = [];
43941            this._fullWeekdaysParse = [];
43942        }
43943
43944        for (i = 0; i < 7; i++) {
43945            // make the regex if we don't have it already
43946
43947            mom = createUTC([2000, 1]).day(i);
43948            if (strict && !this._fullWeekdaysParse[i]) {
43949                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');
43950                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');
43951                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');
43952            }
43953            if (!this._weekdaysParse[i]) {
43954                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
43955                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
43956            }
43957            // test the regex
43958            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
43959                return i;
43960            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
43961                return i;
43962            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
43963                return i;
43964            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
43965                return i;
43966            }
43967        }
43968    }
43969
43970    // MOMENTS
43971
43972    function getSetDayOfWeek (input) {
43973        if (!this.isValid()) {
43974            return input != null ? this : NaN;
43975        }
43976        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
43977        if (input != null) {
43978            input = parseWeekday(input, this.localeData());
43979            return this.add(input - day, 'd');
43980        } else {
43981            return day;
43982        }
43983    }
43984
43985    function getSetLocaleDayOfWeek (input) {
43986        if (!this.isValid()) {
43987            return input != null ? this : NaN;
43988        }
43989        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
43990        return input == null ? weekday : this.add(input - weekday, 'd');
43991    }
43992
43993    function getSetISODayOfWeek (input) {
43994        if (!this.isValid()) {
43995            return input != null ? this : NaN;
43996        }
43997
43998        // behaves the same as moment#day except
43999        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
44000        // as a setter, sunday should belong to the previous week.
44001
44002        if (input != null) {
44003            var weekday = parseIsoWeekday(input, this.localeData());
44004            return this.day(this.day() % 7 ? weekday : weekday - 7);
44005        } else {
44006            return this.day() || 7;
44007        }
44008    }
44009
44010    var defaultWeekdaysRegex = matchWord;
44011    function weekdaysRegex (isStrict) {
44012        if (this._weekdaysParseExact) {
44013            if (!hasOwnProp(this, '_weekdaysRegex')) {
44014                computeWeekdaysParse.call(this);
44015            }
44016            if (isStrict) {
44017                return this._weekdaysStrictRegex;
44018            } else {
44019                return this._weekdaysRegex;
44020            }
44021        } else {
44022            if (!hasOwnProp(this, '_weekdaysRegex')) {
44023                this._weekdaysRegex = defaultWeekdaysRegex;
44024            }
44025            return this._weekdaysStrictRegex && isStrict ?
44026                this._weekdaysStrictRegex : this._weekdaysRegex;
44027        }
44028    }
44029
44030    var defaultWeekdaysShortRegex = matchWord;
44031    function weekdaysShortRegex (isStrict) {
44032        if (this._weekdaysParseExact) {
44033            if (!hasOwnProp(this, '_weekdaysRegex')) {
44034                computeWeekdaysParse.call(this);
44035            }
44036            if (isStrict) {
44037                return this._weekdaysShortStrictRegex;
44038            } else {
44039                return this._weekdaysShortRegex;
44040            }
44041        } else {
44042            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
44043                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
44044            }
44045            return this._weekdaysShortStrictRegex && isStrict ?
44046                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
44047        }
44048    }
44049
44050    var defaultWeekdaysMinRegex = matchWord;
44051    function weekdaysMinRegex (isStrict) {
44052        if (this._weekdaysParseExact) {
44053            if (!hasOwnProp(this, '_weekdaysRegex')) {
44054                computeWeekdaysParse.call(this);
44055            }
44056            if (isStrict) {
44057                return this._weekdaysMinStrictRegex;
44058            } else {
44059                return this._weekdaysMinRegex;
44060            }
44061        } else {
44062            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
44063                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
44064            }
44065            return this._weekdaysMinStrictRegex && isStrict ?
44066                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
44067        }
44068    }
44069
44070
44071    function computeWeekdaysParse () {
44072        function cmpLenRev(a, b) {
44073            return b.length - a.length;
44074        }
44075
44076        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
44077            i, mom, minp, shortp, longp;
44078        for (i = 0; i < 7; i++) {
44079            // make the regex if we don't have it already
44080            mom = createUTC([2000, 1]).day(i);
44081            minp = this.weekdaysMin(mom, '');
44082            shortp = this.weekdaysShort(mom, '');
44083            longp = this.weekdays(mom, '');
44084            minPieces.push(minp);
44085            shortPieces.push(shortp);
44086            longPieces.push(longp);
44087            mixedPieces.push(minp);
44088            mixedPieces.push(shortp);
44089            mixedPieces.push(longp);
44090        }
44091        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
44092        // will match the longer piece.
44093        minPieces.sort(cmpLenRev);
44094        shortPieces.sort(cmpLenRev);
44095        longPieces.sort(cmpLenRev);
44096        mixedPieces.sort(cmpLenRev);
44097        for (i = 0; i < 7; i++) {
44098            shortPieces[i] = regexEscape(shortPieces[i]);
44099            longPieces[i] = regexEscape(longPieces[i]);
44100            mixedPieces[i] = regexEscape(mixedPieces[i]);
44101        }
44102
44103        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
44104        this._weekdaysShortRegex = this._weekdaysRegex;
44105        this._weekdaysMinRegex = this._weekdaysRegex;
44106
44107        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
44108        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
44109        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
44110    }
44111
44112    // FORMATTING
44113
44114    function hFormat() {
44115        return this.hours() % 12 || 12;
44116    }
44117
44118    function kFormat() {
44119        return this.hours() || 24;
44120    }
44121
44122    addFormatToken('H', ['HH', 2], 0, 'hour');
44123    addFormatToken('h', ['hh', 2], 0, hFormat);
44124    addFormatToken('k', ['kk', 2], 0, kFormat);
44125
44126    addFormatToken('hmm', 0, 0, function () {
44127        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
44128    });
44129
44130    addFormatToken('hmmss', 0, 0, function () {
44131        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
44132            zeroFill(this.seconds(), 2);
44133    });
44134
44135    addFormatToken('Hmm', 0, 0, function () {
44136        return '' + this.hours() + zeroFill(this.minutes(), 2);
44137    });
44138
44139    addFormatToken('Hmmss', 0, 0, function () {
44140        return '' + this.hours() + zeroFill(this.minutes(), 2) +
44141            zeroFill(this.seconds(), 2);
44142    });
44143
44144    function meridiem (token, lowercase) {
44145        addFormatToken(token, 0, 0, function () {
44146            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
44147        });
44148    }
44149
44150    meridiem('a', true);
44151    meridiem('A', false);
44152
44153    // ALIASES
44154
44155    addUnitAlias('hour', 'h');
44156
44157    // PRIORITY
44158    addUnitPriority('hour', 13);
44159
44160    // PARSING
44161
44162    function matchMeridiem (isStrict, locale) {
44163        return locale._meridiemParse;
44164    }
44165
44166    addRegexToken('a',  matchMeridiem);
44167    addRegexToken('A',  matchMeridiem);
44168    addRegexToken('H',  match1to2);
44169    addRegexToken('h',  match1to2);
44170    addRegexToken('k',  match1to2);
44171    addRegexToken('HH', match1to2, match2);
44172    addRegexToken('hh', match1to2, match2);
44173    addRegexToken('kk', match1to2, match2);
44174
44175    addRegexToken('hmm', match3to4);
44176    addRegexToken('hmmss', match5to6);
44177    addRegexToken('Hmm', match3to4);
44178    addRegexToken('Hmmss', match5to6);
44179
44180    addParseToken(['H', 'HH'], HOUR);
44181    addParseToken(['k', 'kk'], function (input, array, config) {
44182        var kInput = toInt(input);
44183        array[HOUR] = kInput === 24 ? 0 : kInput;
44184    });
44185    addParseToken(['a', 'A'], function (input, array, config) {
44186        config._isPm = config._locale.isPM(input);
44187        config._meridiem = input;
44188    });
44189    addParseToken(['h', 'hh'], function (input, array, config) {
44190        array[HOUR] = toInt(input);
44191        getParsingFlags(config).bigHour = true;
44192    });
44193    addParseToken('hmm', function (input, array, config) {
44194        var pos = input.length - 2;
44195        array[HOUR] = toInt(input.substr(0, pos));
44196        array[MINUTE] = toInt(input.substr(pos));
44197        getParsingFlags(config).bigHour = true;
44198    });
44199    addParseToken('hmmss', function (input, array, config) {
44200        var pos1 = input.length - 4;
44201        var pos2 = input.length - 2;
44202        array[HOUR] = toInt(input.substr(0, pos1));
44203        array[MINUTE] = toInt(input.substr(pos1, 2));
44204        array[SECOND] = toInt(input
vendor: 14,721 bytes, lines 44204-44618
44204.substr(pos2));
44205        getParsingFlags(config).bigHour = true;
44206    });
44207    addParseToken('Hmm', function (input, array, config) {
44208        var pos = input.length - 2;
44209        array[HOUR] = toInt(input.substr(0, pos));
44210        array[MINUTE] = toInt(input.substr(pos));
44211    });
44212    addParseToken('Hmmss', function (input, array, config) {
44213        var pos1 = input.length - 4;
44214        var pos2 = input.length - 2;
44215        array[HOUR] = toInt(input.substr(0, pos1));
44216        array[MINUTE] = toInt(input.substr(pos1, 2));
44217        array[SECOND] = toInt(input.substr(pos2));
44218    });
44219
44220    // LOCALES
44221
44222    function localeIsPM (input) {
44223        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
44224        // Using charAt should be more compatible.
44225        return ((input + '').toLowerCase().charAt(0) === 'p');
44226    }
44227
44228    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
44229    function localeMeridiem (hours, minutes, isLower) {
44230        if (hours > 11) {
44231            return isLower ? 'pm' : 'PM';
44232        } else {
44233            return isLower ? 'am' : 'AM';
44234        }
44235    }
44236
44237
44238    // MOMENTS
44239
44240    // Setting the hour should keep the time, because the user explicitly
44241    // specified which hour they want. So trying to maintain the same hour (in
44242    // a new timezone) makes sense. Adding/subtracting hours does not follow
44243    // this rule.
44244    var getSetHour = makeGetSet('Hours', true);
44245
44246    var baseConfig = {
44247        calendar: defaultCalendar,
44248        longDateFormat: defaultLongDateFormat,
44249        invalidDate: defaultInvalidDate,
44250        ordinal: defaultOrdinal,
44251        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
44252        relativeTime: defaultRelativeTime,
44253
44254        months: defaultLocaleMonths,
44255        monthsShort: defaultLocaleMonthsShort,
44256
44257        week: defaultLocaleWeek,
44258
44259        weekdays: defaultLocaleWeekdays,
44260        weekdaysMin: defaultLocaleWeekdaysMin,
44261        weekdaysShort: defaultLocaleWeekdaysShort,
44262
44263        meridiemParse: defaultLocaleMeridiemParse
44264    };
44265
44266    // internal storage for locale config files
44267    var locales = {};
44268    var localeFamilies = {};
44269    var globalLocale;
44270
44271    function normalizeLocale(key) {
44272        return key ? key.toLowerCase().replace('_', '-') : key;
44273    }
44274
44275    // pick the locale from the array
44276    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
44277    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
44278    function chooseLocale(names) {
44279        var i = 0, j, next, locale, split;
44280
44281        while (i < names.length) {
44282            split = normalizeLocale(names[i]).split('-');
44283            j = split.length;
44284            next = normalizeLocale(names[i + 1]);
44285            next = next ? next.split('-') : null;
44286            while (j > 0) {
44287                locale = loadLocale(split.slice(0, j).join('-'));
44288                if (locale) {
44289                    return locale;
44290                }
44291                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
44292                    //the next array item is better than a shallower substring of this one
44293                    break;
44294                }
44295                j--;
44296            }
44297            i++;
44298        }
44299        return globalLocale;
44300    }
44301
44302    function loadLocale(name) {
44303        var oldLocale = null;
44304        // TODO: Find a better way to register and load all the locales in Node
44305        if (!locales[name] && (typeof module !== 'undefined') &&
44306                module && module.exports) {
44307            try {
44308                oldLocale = globalLocale._abbr;
44309                var aliasedRequire = require;
44310                aliasedRequire('./locale/' + name);
44311                getSetGlobalLocale(oldLocale);
44312            } catch (e) {}
44313        }
44314        return locales[name];
44315    }
44316
44317    // This function will load locale and then set the global locale.  If
44318    // no arguments are passed in, it will simply return the current global
44319    // locale key.
44320    function getSetGlobalLocale (key, values) {
44321        var data;
44322        if (key) {
44323            if (isUndefined(values)) {
44324                data = getLocale(key);
44325            }
44326            else {
44327                data = defineLocale(key, values);
44328            }
44329
44330            if (data) {
44331                // moment.duration._locale = moment._locale = data;
44332                globalLocale = data;
44333            }
44334            else {
44335                if ((typeof console !==  'undefined') && console.warn) {
44336                    //warn user if arguments are passed but the locale could not be set
44337                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');
44338                }
44339            }
44340        }
44341
44342        return globalLocale._abbr;
44343    }
44344
44345    function defineLocale (name, config) {
44346        if (config !== null) {
44347            var locale, parentConfig = baseConfig;
44348            config.abbr = name;
44349            if (locales[name] != null) {
44350                deprecateSimple('defineLocaleOverride',
44351                        'use moment.updateLocale(localeName, config) to change ' +
44352                        'an existing locale. moment.defineLocale(localeName, ' +
44353                        'config) should only be used for creating a new locale ' +
44354                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
44355                parentConfig = locales[name]._config;
44356            } else if (config.parentLocale != null) {
44357                if (locales[config.parentLocale] != null) {
44358                    parentConfig = locales[config.parentLocale]._config;
44359                } else {
44360                    locale = loadLocale(config.parentLocale);
44361                    if (locale != null) {
44362                        parentConfig = locale._config;
44363                    } else {
44364                        if (!localeFamilies[config.parentLocale]) {
44365                            localeFamilies[config.parentLocale] = [];
44366                        }
44367                        localeFamilies[config.parentLocale].push({
44368                            name: name,
44369                            config: config
44370                        });
44371                        return null;
44372                    }
44373                }
44374            }
44375            locales[name] = new Locale(mergeConfigs(parentConfig, config));
44376
44377            if (localeFamilies[name]) {
44378                localeFamilies[name].forEach(function (x) {
44379                    defineLocale(x.name, x.config);
44380                });
44381            }
44382
44383            // backwards compat for now: also set the locale
44384            // make sure we set the locale AFTER all child locales have been
44385            // created, so we won't end up with the child locale set.
44386            getSetGlobalLocale(name);
44387
44388
44389            return locales[name];
44390        } else {
44391            // useful for testing
44392            delete locales[name];
44393            return null;
44394        }
44395    }
44396
44397    function updateLocale(name, config) {
44398        if (config != null) {
44399            var locale, tmpLocale, parentConfig = baseConfig;
44400            // MERGE
44401            tmpLocale = loadLocale(name);
44402            if (tmpLocale != null) {
44403                parentConfig = tmpLocale._config;
44404            }
44405            config = mergeConfigs(parentConfig, config);
44406            locale = new Locale(config);
44407            locale.parentLocale = locales[name];
44408            locales[name] = locale;
44409
44410            // backwards compat for now: also set the locale
44411            getSetGlobalLocale(name);
44412        } else {
44413            // pass null for config to unupdate, useful for tests
44414            if (locales[name] != null) {
44415                if (locales[name].parentLocale != null) {
44416                    locales[name] = locales[name].parentLocale;
44417                } else if (locales[name] != null) {
44418                    delete locales[name];
44419                }
44420            }
44421        }
44422        return locales[name];
44423    }
44424
44425    // returns locale data
44426    function getLocale (key) {
44427        var locale;
44428
44429        if (key && key._locale && key._locale._abbr) {
44430            key = key._locale._abbr;
44431        }
44432
44433        if (!key) {
44434            return globalLocale;
44435        }
44436
44437        if (!isArray(key)) {
44438            //short-circuit everything else
44439            locale = loadLocale(key);
44440            if (locale) {
44441                return locale;
44442            }
44443            key = [key];
44444        }
44445
44446        return chooseLocale(key);
44447    }
44448
44449    function listLocales() {
44450        return keys(locales);
44451    }
44452
44453    function checkOverflow (m) {
44454        var overflow;
44455        var a = m._a;
44456
44457        if (a && getParsingFlags(m).overflow === -2) {
44458            overflow =
44459                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
44460                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
44461                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
44462                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
44463                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
44464                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
44465                -1;
44466
44467            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
44468                overflow = DATE;
44469            }
44470            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
44471                overflow = WEEK;
44472            }
44473            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
44474                overflow = WEEKDAY;
44475            }
44476
44477            getParsingFlags(m).overflow = overflow;
44478        }
44479
44480        return m;
44481    }
44482
44483    // Pick the first defined of two or three arguments.
44484    function defaults(a, b, c) {
44485        if (a != null) {
44486            return a;
44487        }
44488        if (b != null) {
44489            return b;
44490        }
44491        return c;
44492    }
44493
44494    function currentDateArray(config) {
44495        // hooks is actually the exported moment object
44496        var nowValue = new Date(hooks.now());
44497        if (config._useUTC) {
44498            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
44499        }
44500        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
44501    }
44502
44503    // convert an array to a date.
44504    // the array should mirror the parameters below
44505    // note: all values past the year are optional and will default to the lowest possible value.
44506    // [year, month, day , hour, minute, second, millisecond]
44507    function configFromArray (config) {
44508        var i, date, input = [], currentDate, expectedWeekday, yearToUse;
44509
44510        if (config._d) {
44511            return;
44512        }
44513
44514        currentDate = currentDateArray(config);
44515
44516        //compute day of the year from weeks and weekdays
44517        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
44518            dayOfYearFromWeekInfo(config);
44519        }
44520
44521        //if the day of the year is set, figure out what it is
44522        if (config._dayOfYear != null) {
44523            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
44524
44525            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
44526                getParsingFlags(config)._overflowDayOfYear = true;
44527            }
44528
44529            date = createUTCDate(yearToUse, 0, config._dayOfYear);
44530            config._a[MONTH] = date.getUTCMonth();
44531            config._a[DATE] = date.getUTCDate();
44532        }
44533
44534        // Default to current date.
44535        // * if no year, month, day of month are given, default to today
44536        // * if day of month is given, default month and year
44537        // * if month is given, default only year
44538        // * if year is given, don't default anything
44539        for (i = 0; i < 3 && config._a[i] == null; ++i) {
44540            config._a[i] = input[i] = currentDate[i];
44541        }
44542
44543        // Zero out whatever was not defaulted, including time
44544        for (; i < 7; i++) {
44545            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
44546        }
44547
44548        // Check for 24:00:00.000
44549        if (config._a[HOUR] === 24 &&
44550                config._a[MINUTE] === 0 &&
44551                config._a[SECOND] === 0 &&
44552                config._a[MILLISECOND] === 0) {
44553            config._nextDay = true;
44554            config._a[HOUR] = 0;
44555        }
44556
44557        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
44558        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
44559
44560        // Apply timezone offset from input. The actual utcOffset can be changed
44561        // with parseZone.
44562        if (config._tzm != null) {
44563            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
44564        }
44565
44566        if (config._nextDay) {
44567            config._a[HOUR] = 24;
44568        }
44569
44570        // check for mismatching day of week
44571        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
44572            getParsingFlags(config).weekdayMismatch = true;
44573        }
44574    }
44575
44576    function dayOfYearFromWeekInfo(config) {
44577        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
44578
44579        w = config._w;
44580        if (w.GG != null || w.W != null || w.E != null) {
44581            dow = 1;
44582            doy = 4;
44583
44584            // TODO: We need to take the current isoWeekYear, but that depends on
44585            // how we interpret now (local, utc, fixed offset). So create
44586            // a now version of current config (take local/utc/offset flags, and
44587            // create now).
44588            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
44589            week = defaults(w.W, 1);
44590            weekday = defaults(w.E, 1);
44591            if (weekday < 1 || weekday > 7) {
44592                weekdayOverflow = true;
44593            }
44594        } else {
44595            dow = config._locale._week.dow;
44596            doy = config._locale._week.doy;
44597
44598            var curWeek = weekOfYear(createLocal(), dow, doy);
44599
44600            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
44601
44602            // Default to current week.
44603            week = defaults(w.w, curWeek.week);
44604
44605            if (w.d != null) {
44606                // weekday -- low day numbers are considered next week
44607                weekday = w.d;
44608                if (weekday < 0 || weekday > 6) {
44609                    weekdayOverflow = true;
44610                }
44611            } else if (w.e != null) {
44612                // local weekday -- counting starts from begining of week
44613                weekday = w.e + dow;
44614                if (w.e < 0 || w.e > 6) {
44615                    weekdayOverflow = true;
44616                }
44617            } else {
44618                // default to begi
vendor: 19,665 bytes, lines 44618-45212
44618ning of week
44619                weekday = dow;
44620            }
44621        }
44622        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
44623            getParsingFlags(config)._overflowWeeks = true;
44624        } else if (weekdayOverflow != null) {
44625            getParsingFlags(config)._overflowWeekday = true;
44626        } else {
44627            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
44628            config._a[YEAR] = temp.year;
44629            config._dayOfYear = temp.dayOfYear;
44630        }
44631    }
44632
44633    // iso 8601 regex
44634    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
44635    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
44636    var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
44637
44638    var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
44639
44640    var isoDates = [
44641        ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
44642        ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
44643        ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
44644        ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
44645        ['YYYY-DDD', /\d{4}-\d{3}/],
44646        ['YYYY-MM', /\d{4}-\d\d/, false],
44647        ['YYYYYYMMDD', /[+-]\d{10}/],
44648        ['YYYYMMDD', /\d{8}/],
44649        // YYYYMM is NOT allowed by the standard
44650        ['GGGG[W]WWE', /\d{4}W\d{3}/],
44651        ['GGGG[W]WW', /\d{4}W\d{2}/, false],
44652        ['YYYYDDD', /\d{7}/]
44653    ];
44654
44655    // iso time formats and regexes
44656    var isoTimes = [
44657        ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
44658        ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
44659        ['HH:mm:ss', /\d\d:\d\d:\d\d/],
44660        ['HH:mm', /\d\d:\d\d/],
44661        ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
44662        ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
44663        ['HHmmss', /\d\d\d\d\d\d/],
44664        ['HHmm', /\d\d\d\d/],
44665        ['HH', /\d\d/]
44666    ];
44667
44668    var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
44669
44670    // date from iso format
44671    function configFromISO(config) {
44672        var i, l,
44673            string = config._i,
44674            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
44675            allowTime, dateFormat, timeFormat, tzFormat;
44676
44677        if (match) {
44678            getParsingFlags(config).iso = true;
44679
44680            for (i = 0, l = isoDates.length; i < l; i++) {
44681                if (isoDates[i][1].exec(match[1])) {
44682                    dateFormat = isoDates[i][0];
44683                    allowTime = isoDates[i][2] !== false;
44684                    break;
44685                }
44686            }
44687            if (dateFormat == null) {
44688                config._isValid = false;
44689                return;
44690            }
44691            if (match[3]) {
44692                for (i = 0, l = isoTimes.length; i < l; i++) {
44693                    if (isoTimes[i][1].exec(match[3])) {
44694                        // match[2] should be 'T' or space
44695                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
44696                        break;
44697                    }
44698                }
44699                if (timeFormat == null) {
44700                    config._isValid = false;
44701                    return;
44702                }
44703            }
44704            if (!allowTime && timeFormat != null) {
44705                config._isValid = false;
44706                return;
44707            }
44708            if (match[4]) {
44709                if (tzRegex.exec(match[4])) {
44710                    tzFormat = 'Z';
44711                } else {
44712                    config._isValid = false;
44713                    return;
44714                }
44715            }
44716            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
44717            configFromStringAndFormat(config);
44718        } else {
44719            config._isValid = false;
44720        }
44721    }
44722
44723    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
44724    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;
44725
44726    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
44727        var result = [
44728            untruncateYear(yearStr),
44729            defaultLocaleMonthsShort.indexOf(monthStr),
44730            parseInt(dayStr, 10),
44731            parseInt(hourStr, 10),
44732            parseInt(minuteStr, 10)
44733        ];
44734
44735        if (secondStr) {
44736            result.push(parseInt(secondStr, 10));
44737        }
44738
44739        return result;
44740    }
44741
44742    function untruncateYear(yearStr) {
44743        var year = parseInt(yearStr, 10);
44744        if (year <= 49) {
44745            return 2000 + year;
44746        } else if (year <= 999) {
44747            return 1900 + year;
44748        }
44749        return year;
44750    }
44751
44752    function preprocessRFC2822(s) {
44753        // Remove comments and folding whitespace and replace multiple-spaces with a single space
44754        return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
44755    }
44756
44757    function checkWeekday(weekdayStr, parsedInput, config) {
44758        if (weekdayStr) {
44759            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
44760            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
44761                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
44762            if (weekdayProvided !== weekdayActual) {
44763                getParsingFlags(config).weekdayMismatch = true;
44764                config._isValid = false;
44765                return false;
44766            }
44767        }
44768        return true;
44769    }
44770
44771    var obsOffsets = {
44772        UT: 0,
44773        GMT: 0,
44774        EDT: -4 * 60,
44775        EST: -5 * 60,
44776        CDT: -5 * 60,
44777        CST: -6 * 60,
44778        MDT: -6 * 60,
44779        MST: -7 * 60,
44780        PDT: -7 * 60,
44781        PST: -8 * 60
44782    };
44783
44784    function calculateOffset(obsOffset, militaryOffset, numOffset) {
44785        if (obsOffset) {
44786            return obsOffsets[obsOffset];
44787        } else if (militaryOffset) {
44788            // the only allowed military tz is Z
44789            return 0;
44790        } else {
44791            var hm = parseInt(numOffset, 10);
44792            var m = hm % 100, h = (hm - m) / 100;
44793            return h * 60 + m;
44794        }
44795    }
44796
44797    // date and time from ref 2822 format
44798    function configFromRFC2822(config) {
44799        var match = rfc2822.exec(preprocessRFC2822(config._i));
44800        if (match) {
44801            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
44802            if (!checkWeekday(match[1], parsedArray, config)) {
44803                return;
44804            }
44805
44806            config._a = parsedArray;
44807            config._tzm = calculateOffset(match[8], match[9], match[10]);
44808
44809            config._d = createUTCDate.apply(null, config._a);
44810            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
44811
44812            getParsingFlags(config).rfc2822 = true;
44813        } else {
44814            config._isValid = false;
44815        }
44816    }
44817
44818    // date from iso format or fallback
44819    function configFromString(config) {
44820        var matched = aspNetJsonRegex.exec(config._i);
44821
44822        if (matched !== null) {
44823            config._d = new Date(+matched[1]);
44824            return;
44825        }
44826
44827        configFromISO(config);
44828        if (config._isValid === false) {
44829            delete config._isValid;
44830        } else {
44831            return;
44832        }
44833
44834        configFromRFC2822(config);
44835        if (config._isValid === false) {
44836            delete config._isValid;
44837        } else {
44838            return;
44839        }
44840
44841        // Final attempt, use Input Fallback
44842        hooks.createFromInputFallback(config);
44843    }
44844
44845    hooks.createFromInputFallback = deprecate(
44846        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
44847        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
44848        'discouraged and will be removed in an upcoming major release. Please refer to ' +
44849        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
44850        function (config) {
44851            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
44852        }
44853    );
44854
44855    // constant that refers to the ISO standard
44856    hooks.ISO_8601 = function () {};
44857
44858    // constant that refers to the RFC 2822 form
44859    hooks.RFC_2822 = function () {};
44860
44861    // date from string and format string
44862    function configFromStringAndFormat(config) {
44863        // TODO: Move this to another part of the creation flow to prevent circular deps
44864        if (config._f === hooks.ISO_8601) {
44865            configFromISO(config);
44866            return;
44867        }
44868        if (config._f === hooks.RFC_2822) {
44869            configFromRFC2822(config);
44870            return;
44871        }
44872        config._a = [];
44873        getParsingFlags(config).empty = true;
44874
44875        // This array is used to make a Date, either with `new Date` or `Date.UTC`
44876        var string = '' + config._i,
44877            i, parsedInput, tokens, token, skipped,
44878            stringLength = string.length,
44879            totalParsedInputLength = 0;
44880
44881        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
44882
44883        for (i = 0; i < tokens.length; i++) {
44884            token = tokens[i];
44885            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
44886            // console.log('token', token, 'parsedInput', parsedInput,
44887            //         'regex', getParseRegexForToken(token, config));
44888            if (parsedInput) {
44889                skipped = string.substr(0, string.indexOf(parsedInput));
44890                if (skipped.length > 0) {
44891                    getParsingFlags(config).unusedInput.push(skipped);
44892                }
44893                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
44894                totalParsedInputLength += parsedInput.length;
44895            }
44896            // don't parse if it's not a known token
44897            if (formatTokenFunctions[token]) {
44898                if (parsedInput) {
44899                    getParsingFlags(config).empty = false;
44900                }
44901                else {
44902                    getParsingFlags(config).unusedTokens.push(token);
44903                }
44904                addTimeToArrayFromToken(token, parsedInput, config);
44905            }
44906            else if (config._strict && !parsedInput) {
44907                getParsingFlags(config).unusedTokens.push(token);
44908            }
44909        }
44910
44911        // add remaining unparsed input length to the string
44912        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
44913        if (string.length > 0) {
44914            getParsingFlags(config).unusedInput.push(string);
44915        }
44916
44917        // clear _12h flag if hour is <= 12
44918        if (config._a[HOUR] <= 12 &&
44919            getParsingFlags(config).bigHour === true &&
44920            config._a[HOUR] > 0) {
44921            getParsingFlags(config).bigHour = undefined;
44922        }
44923
44924        getParsingFlags(config).parsedDateParts = config._a.slice(0);
44925        getParsingFlags(config).meridiem = config._meridiem;
44926        // handle meridiem
44927        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
44928
44929        configFromArray(config);
44930        checkOverflow(config);
44931    }
44932
44933
44934    function meridiemFixWrap (locale, hour, meridiem) {
44935        var isPm;
44936
44937        if (meridiem == null) {
44938            // nothing to do
44939            return hour;
44940        }
44941        if (locale.meridiemHour != null) {
44942            return locale.meridiemHour(hour, meridiem);
44943        } else if (locale.isPM != null) {
44944            // Fallback
44945            isPm = locale.isPM(meridiem);
44946            if (isPm && hour < 12) {
44947                hour += 12;
44948            }
44949            if (!isPm && hour === 12) {
44950                hour = 0;
44951            }
44952            return hour;
44953        } else {
44954            // this is not supposed to happen
44955            return hour;
44956        }
44957    }
44958
44959    // date from string and array of format strings
44960    function configFromStringAndArray(config) {
44961        var tempConfig,
44962            bestMoment,
44963
44964            scoreToBeat,
44965            i,
44966            currentScore;
44967
44968        if (config._f.length === 0) {
44969            getParsingFlags(config).invalidFormat = true;
44970            config._d = new Date(NaN);
44971            return;
44972        }
44973
44974        for (i = 0; i < config._f.length; i++) {
44975            currentScore = 0;
44976            tempConfig = copyConfig({}, config);
44977            if (config._useUTC != null) {
44978                tempConfig._useUTC = config._useUTC;
44979            }
44980            tempConfig._f = config._f[i];
44981            configFromStringAndFormat(tempConfig);
44982
44983            if (!isValid(tempConfig)) {
44984                continue;
44985            }
44986
44987            // if there is any input that was not parsed add a penalty for that format
44988            currentScore += getParsingFlags(tempConfig).charsLeftOver;
44989
44990            //or tokens
44991            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
44992
44993            getParsingFlags(tempConfig).score = currentScore;
44994
44995            if (scoreToBeat == null || currentScore < scoreToBeat) {
44996                scoreToBeat = currentScore;
44997                bestMoment = tempConfig;
44998            }
44999        }
45000
45001        extend(config, bestMoment || tempConfig);
45002    }
45003
45004    function configFromObject(config) {
45005        if (config._d) {
45006            return;
45007        }
45008
45009        var i = normalizeObjectUnits(config._i);
45010        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
45011            return obj && parseInt(obj, 10);
45012        });
45013
45014        configFromArray(config);
45015    }
45016
45017    function createFromConfig (config) {
45018        var res = new Moment(checkOverflow(prepareConfig(config)));
45019        if (res._nextDay) {
45020            // Adding is smart enough around DST
45021            res.add(1, 'd');
45022            res._nextDay = undefined;
45023        }
45024
45025        return res;
45026    }
45027
45028    function prepareConfig (config) {
45029        var input = config._i,
45030            format = config._f;
45031
45032        config._locale = config._locale || getLocale(config._l);
45033
45034        if (input === null || (format === undefined && input === '')) {
45035            return createInvalid({nullInput: true});
45036        }
45037
45038        if (typeof input === 'string') {
45039            config._i = input = config._locale.preparse(input);
45040        }
45041
45042        if (isMoment(input)) {
45043            return new Moment(checkOverflow(input));
45044        } else if (isDate(input)) {
45045            config._d = input;
45046        } else if (isArray(format)) {
45047            configFromStringAndArray(config);
45048        } else if (format) {
45049            configFromStringAndFormat(config);
45050        }  else {
45051            configFromInput(config);
45052        }
45053
45054        if (!isValid(config)) {
45055            config._d = null;
45056        }
45057
45058        return config;
45059    }
45060
45061    function configFromInput(config) {
45062        var input = config._i;
45063        if (isUndefined(input)) {
45064            config._d = new Date(hooks.now());
45065        } else if (isDate(input)) {
45066            config._d = new Date(input.valueOf());
45067        } else if (typeof input === 'string') {
45068            configFromString(config);
45069        } else if (isArray(input)) {
45070            config._a = map(input.slice(0), function (obj) {
45071                return parseInt(obj, 10);
45072            });
45073            configFromArray(config);
45074        } else if (isObject(input)) {
45075            configFromObject(config);
45076        } else if (isNumber(input)) {
45077            // from milliseconds
45078            config._d = new Date(input);
45079        } else {
45080            hooks.createFromInputFallback(config);
45081        }
45082    }
45083
45084    function createLocalOrUTC (input, format, locale, strict, isUTC) {
45085        var c = {};
45086
45087        if (locale === true || locale === false) {
45088            strict = locale;
45089            locale = undefined;
45090        }
45091
45092        if ((isObject(input) && isObjectEmpty(input)) ||
45093                (isArray(input) && input.length === 0)) {
45094            input = undefined;
45095        }
45096        // object construction must be done this way.
45097        // https://github.com/moment/moment/issues/1423
45098        c._isAMomentObject = true;
45099        c._useUTC = c._isUTC = isUTC;
45100        c._l = locale;
45101        c._i = input;
45102        c._f = format;
45103        c._strict = strict;
45104
45105        return createFromConfig(c);
45106    }
45107
45108    function createLocal (input, format, locale, strict) {
45109        return createLocalOrUTC(input, format, locale, strict, false);
45110    }
45111
45112    var prototypeMin = deprecate(
45113        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
45114        function () {
45115            var other = createLocal.apply(null, arguments);
45116            if (this.isValid() && other.isValid()) {
45117                return other < this ? this : other;
45118            } else {
45119                return createInvalid();
45120            }
45121        }
45122    );
45123
45124    var prototypeMax = deprecate(
45125        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
45126        function () {
45127            var other = createLocal.apply(null, arguments);
45128            if (this.isValid() && other.isValid()) {
45129                return other > this ? this : other;
45130            } else {
45131                return createInvalid();
45132            }
45133        }
45134    );
45135
45136    // Pick a moment m from moments so that m[fn](other) is true for all
45137    // other. This relies on the function fn to be transitive.
45138    //
45139    // moments should either be an array of moment objects or an array, whose
45140    // first element is an array of moment objects.
45141    function pickBy(fn, moments) {
45142        var res, i;
45143        if (moments.length === 1 && isArray(moments[0])) {
45144            moments = moments[0];
45145        }
45146        if (!moments.length) {
45147            return createLocal();
45148        }
45149        res = moments[0];
45150        for (i = 1; i < moments.length; ++i) {
45151            if (!moments[i].isValid() || moments[i][fn](res)) {
45152                res = moments[i];
45153            }
45154        }
45155        return res;
45156    }
45157
45158    // TODO: Use [].sort instead?
45159    function min () {
45160        var args = [].slice.call(arguments, 0);
45161
45162        return pickBy('isBefore', args);
45163    }
45164
45165    function max () {
45166        var args = [].slice.call(arguments, 0);
45167
45168        return pickBy('isAfter', args);
45169    }
45170
45171    var now = function () {
45172        return Date.now ? Date.now() : +(new Date());
45173    };
45174
45175    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
45176
45177    function isDurationValid(m) {
45178        for (var key in m) {
45179            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
45180                return false;
45181            }
45182        }
45183
45184        var unitHasDecimal = false;
45185        for (var i = 0; i < ordering.length; ++i) {
45186            if (m[ordering[i]]) {
45187                if (unitHasDecimal) {
45188                    return false; // only allow non-integers for smallest unit
45189                }
45190                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
45191                    unitHasDecimal = true;
45192                }
45193            }
45194        }
45195
45196        return true;
45197    }
45198
45199    function isValid$1() {
45200        return this._isValid;
45201    }
45202
45203    function createInvalid$1() {
45204        return createDuration(NaN);
45205    }
45206
45207    function Duration (duration) {
45208        var normalizedInput = normalizeObjectUnits(duration),
45209            years = normalizedInput.year || 0,
45210            quarters = normalizedInput.quarter || 0,
45211            months = normalizedInput.month || 0,
45212            weeks = normalizedInput.week || 
vendor: 4,158 bytes, lines 45212-45339
452120,
45213            days = normalizedInput.day || 0,
45214            hours = normalizedInput.hour || 0,
45215            minutes = normalizedInput.minute || 0,
45216            seconds = normalizedInput.second || 0,
45217            milliseconds = normalizedInput.millisecond || 0;
45218
45219        this._isValid = isDurationValid(normalizedInput);
45220
45221        // representation for dateAddRemove
45222        this._milliseconds = +milliseconds +
45223            seconds * 1e3 + // 1000
45224            minutes * 6e4 + // 1000 * 60
45225            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
45226        // Because of dateAddRemove treats 24 hours as different from a
45227        // day when working around DST, we need to store them separately
45228        this._days = +days +
45229            weeks * 7;
45230        // It is impossible to translate months into days without knowing
45231        // which months you are are talking about, so we have to store
45232        // it separately.
45233        this._months = +months +
45234            quarters * 3 +
45235            years * 12;
45236
45237        this._data = {};
45238
45239        this._locale = getLocale();
45240
45241        this._bubble();
45242    }
45243
45244    function isDuration (obj) {
45245        return obj instanceof Duration;
45246    }
45247
45248    function absRound (number) {
45249        if (number < 0) {
45250            return Math.round(-1 * number) * -1;
45251        } else {
45252            return Math.round(number);
45253        }
45254    }
45255
45256    // FORMATTING
45257
45258    function offset (token, separator) {
45259        addFormatToken(token, 0, 0, function () {
45260            var offset = this.utcOffset();
45261            var sign = '+';
45262            if (offset < 0) {
45263                offset = -offset;
45264                sign = '-';
45265            }
45266            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
45267        });
45268    }
45269
45270    offset('Z', ':');
45271    offset('ZZ', '');
45272
45273    // PARSING
45274
45275    addRegexToken('Z',  matchShortOffset);
45276    addRegexToken('ZZ', matchShortOffset);
45277    addParseToken(['Z', 'ZZ'], function (input, array, config) {
45278        config._useUTC = true;
45279        config._tzm = offsetFromString(matchShortOffset, input);
45280    });
45281
45282    // HELPERS
45283
45284    // timezone chunker
45285    // '+10:00' > ['10',  '00']
45286    // '-1530'  > ['-15', '30']
45287    var chunkOffset = /([\+\-]|\d\d)/gi;
45288
45289    function offsetFromString(matcher, string) {
45290        var matches = (string || '').match(matcher);
45291
45292        if (matches === null) {
45293            return null;
45294        }
45295
45296        var chunk   = matches[matches.length - 1] || [];
45297        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
45298        var minutes = +(parts[1] * 60) + toInt(parts[2]);
45299
45300        return minutes === 0 ?
45301          0 :
45302          parts[0] === '+' ? minutes : -minutes;
45303    }
45304
45305    // Return a moment from input, that is local/utc/zone equivalent to model.
45306    function cloneWithOffset(input, model) {
45307        var res, diff;
45308        if (model._isUTC) {
45309            res = model.clone();
45310            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
45311            // Use low-level api, because this fn is low-level api.
45312            res._d.setTime(res._d.valueOf() + diff);
45313            hooks.updateOffset(res, false);
45314            return res;
45315        } else {
45316            return createLocal(input).local();
45317        }
45318    }
45319
45320    function getDateOffset (m) {
45321        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
45322        // https://github.com/moment/moment/pull/1871
45323        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
45324    }
45325
45326    // HOOKS
45327
45328    // This function will be called whenever a moment is mutated.
45329    // It is intended to keep the offset in sync with the timezone.
45330    hooks.updateOffset = function () {};
45331
45332    // MOMENTS
45333
45334    // keepLocalTime = true means only change the timezone, without
45335    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
45336    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
45337    // +0200, so we adjust the time as needed, to be valid.
45338    //
45339    // Keeping the time actually adds/subtracts (one hour)
vendor: 20,735 bytes, lines 45340-45946
45340    // from the actual represented time. That is why we call updateOffset
45341    // a second time. In case it wants us to change the offset again
45342    // _changeInProgress == true case, then we have to adjust, because
45343    // there is no such time in the given timezone.
45344    function getSetOffset (input, keepLocalTime, keepMinutes) {
45345        var offset = this._offset || 0,
45346            localAdjust;
45347        if (!this.isValid()) {
45348            return input != null ? this : NaN;
45349        }
45350        if (input != null) {
45351            if (typeof input === 'string') {
45352                input = offsetFromString(matchShortOffset, input);
45353                if (input === null) {
45354                    return this;
45355                }
45356            } else if (Math.abs(input) < 16 && !keepMinutes) {
45357                input = input * 60;
45358            }
45359            if (!this._isUTC && keepLocalTime) {
45360                localAdjust = getDateOffset(this);
45361            }
45362            this._offset = input;
45363            this._isUTC = true;
45364            if (localAdjust != null) {
45365                this.add(localAdjust, 'm');
45366            }
45367            if (offset !== input) {
45368                if (!keepLocalTime || this._changeInProgress) {
45369                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);
45370                } else if (!this._changeInProgress) {
45371                    this._changeInProgress = true;
45372                    hooks.updateOffset(this, true);
45373                    this._changeInProgress = null;
45374                }
45375            }
45376            return this;
45377        } else {
45378            return this._isUTC ? offset : getDateOffset(this);
45379        }
45380    }
45381
45382    function getSetZone (input, keepLocalTime) {
45383        if (input != null) {
45384            if (typeof input !== 'string') {
45385                input = -input;
45386            }
45387
45388            this.utcOffset(input, keepLocalTime);
45389
45390            return this;
45391        } else {
45392            return -this.utcOffset();
45393        }
45394    }
45395
45396    function setOffsetToUTC (keepLocalTime) {
45397        return this.utcOffset(0, keepLocalTime);
45398    }
45399
45400    function setOffsetToLocal (keepLocalTime) {
45401        if (this._isUTC) {
45402            this.utcOffset(0, keepLocalTime);
45403            this._isUTC = false;
45404
45405            if (keepLocalTime) {
45406                this.subtract(getDateOffset(this), 'm');
45407            }
45408        }
45409        return this;
45410    }
45411
45412    function setOffsetToParsedOffset () {
45413        if (this._tzm != null) {
45414            this.utcOffset(this._tzm, false, true);
45415        } else if (typeof this._i === 'string') {
45416            var tZone = offsetFromString(matchOffset, this._i);
45417            if (tZone != null) {
45418                this.utcOffset(tZone);
45419            }
45420            else {
45421                this.utcOffset(0, true);
45422            }
45423        }
45424        return this;
45425    }
45426
45427    function hasAlignedHourOffset (input) {
45428        if (!this.isValid()) {
45429            return false;
45430        }
45431        input = input ? createLocal(input).utcOffset() : 0;
45432
45433        return (this.utcOffset() - input) % 60 === 0;
45434    }
45435
45436    function isDaylightSavingTime () {
45437        return (
45438            this.utcOffset() > this.clone().month(0).utcOffset() ||
45439            this.utcOffset() > this.clone().month(5).utcOffset()
45440        );
45441    }
45442
45443    function isDaylightSavingTimeShifted () {
45444        if (!isUndefined(this._isDSTShifted)) {
45445            return this._isDSTShifted;
45446        }
45447
45448        var c = {};
45449
45450        copyConfig(c, this);
45451        c = prepareConfig(c);
45452
45453        if (c._a) {
45454            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
45455            this._isDSTShifted = this.isValid() &&
45456                compareArrays(c._a, other.toArray()) > 0;
45457        } else {
45458            this._isDSTShifted = false;
45459        }
45460
45461        return this._isDSTShifted;
45462    }
45463
45464    function isLocal () {
45465        return this.isValid() ? !this._isUTC : false;
45466    }
45467
45468    function isUtcOffset () {
45469        return this.isValid() ? this._isUTC : false;
45470    }
45471
45472    function isUtc () {
45473        return this.isValid() ? this._isUTC && this._offset === 0 : false;
45474    }
45475
45476    // ASP.NET json date format regex
45477    var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
45478
45479    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
45480    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
45481    // and further modified to allow for strings containing both week and day
45482    var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
45483
45484    function createDuration (input, key) {
45485        var duration = input,
45486            // matching against regexp is expensive, do it on demand
45487            match = null,
45488            sign,
45489            ret,
45490            diffRes;
45491
45492        if (isDuration(input)) {
45493            duration = {
45494                ms : input._milliseconds,
45495                d  : input._days,
45496                M  : input._months
45497            };
45498        } else if (isNumber(input)) {
45499            duration = {};
45500            if (key) {
45501                duration[key] = input;
45502            } else {
45503                duration.milliseconds = input;
45504            }
45505        } else if (!!(match = aspNetRegex.exec(input))) {
45506            sign = (match[1] === '-') ? -1 : 1;
45507            duration = {
45508                y  : 0,
45509                d  : toInt(match[DATE])                         * sign,
45510                h  : toInt(match[HOUR])                         * sign,
45511                m  : toInt(match[MINUTE])                       * sign,
45512                s  : toInt(match[SECOND])                       * sign,
45513                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
45514            };
45515        } else if (!!(match = isoRegex.exec(input))) {
45516            sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;
45517            duration = {
45518                y : parseIso(match[2], sign),
45519                M : parseIso(match[3], sign),
45520                w : parseIso(match[4], sign),
45521                d : parseIso(match[5], sign),
45522                h : parseIso(match[6], sign),
45523                m : parseIso(match[7], sign),
45524                s : parseIso(match[8], sign)
45525            };
45526        } else if (duration == null) {// checks for null or undefined
45527            duration = {};
45528        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
45529            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
45530
45531            duration = {};
45532            duration.ms = diffRes.milliseconds;
45533            duration.M = diffRes.months;
45534        }
45535
45536        ret = new Duration(duration);
45537
45538        if (isDuration(input) && hasOwnProp(input, '_locale')) {
45539            ret._locale = input._locale;
45540        }
45541
45542        return ret;
45543    }
45544
45545    createDuration.fn = Duration.prototype;
45546    createDuration.invalid = createInvalid$1;
45547
45548    function parseIso (inp, sign) {
45549        // We'd normally use ~~inp for this, but unfortunately it also
45550        // converts floats to ints.
45551        // inp may be undefined, so careful calling replace on it.
45552        var res = inp && parseFloat(inp.replace(',', '.'));
45553        // apply sign while we're at it
45554        return (isNaN(res) ? 0 : res) * sign;
45555    }
45556
45557    function positiveMomentsDifference(base, other) {
45558        var res = {milliseconds: 0, months: 0};
45559
45560        res.months = other.month() - base.month() +
45561            (other.year() - base.year()) * 12;
45562        if (base.clone().add(res.months, 'M').isAfter(other)) {
45563            --res.months;
45564        }
45565
45566        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
45567
45568        return res;
45569    }
45570
45571    function momentsDifference(base, other) {
45572        var res;
45573        if (!(base.isValid() && other.isValid())) {
45574            return {milliseconds: 0, months: 0};
45575        }
45576
45577        other = cloneWithOffset(other, base);
45578        if (base.isBefore(other)) {
45579            res = positiveMomentsDifference(base, other);
45580        } else {
45581            res = positiveMomentsDifference(other, base);
45582            res.milliseconds = -res.milliseconds;
45583            res.months = -res.months;
45584        }
45585
45586        return res;
45587    }
45588
45589    // TODO: remove 'name' arg after deprecation is removed
45590    function createAdder(direction, name) {
45591        return function (val, period) {
45592            var dur, tmp;
45593            //invert the arguments, but complain about it
45594            if (period !== null && !isNaN(+period)) {
45595                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
45596                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
45597                tmp = val; val = period; period = tmp;
45598            }
45599
45600            val = typeof val === 'string' ? +val : val;
45601            dur = createDuration(val, period);
45602            addSubtract(this, dur, direction);
45603            return this;
45604        };
45605    }
45606
45607    function addSubtract (mom, duration, isAdding, updateOffset) {
45608        var milliseconds = duration._milliseconds,
45609            days = absRound(duration._days),
45610            months = absRound(duration._months);
45611
45612        if (!mom.isValid()) {
45613            // No op
45614            return;
45615        }
45616
45617        updateOffset = updateOffset == null ? true : updateOffset;
45618
45619        if (months) {
45620            setMonth(mom, get(mom, 'Month') + months * isAdding);
45621        }
45622        if (days) {
45623            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
45624        }
45625        if (milliseconds) {
45626            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
45627        }
45628        if (updateOffset) {
45629            hooks.updateOffset(mom, days || months);
45630        }
45631    }
45632
45633    var add      = createAdder(1, 'add');
45634    var subtract = createAdder(-1, 'subtract');
45635
45636    function getCalendarFormat(myMoment, now) {
45637        var diff = myMoment.diff(now, 'days', true);
45638        return diff < -6 ? 'sameElse' :
45639                diff < -1 ? 'lastWeek' :
45640                diff < 0 ? 'lastDay' :
45641                diff < 1 ? 'sameDay' :
45642                diff < 2 ? 'nextDay' :
45643                diff < 7 ? 'nextWeek' : 'sameElse';
45644    }
45645
45646    function calendar$1 (time, formats) {
45647        // We want to compare the start of today, vs this.
45648        // Getting start-of-today depends on whether we're local/utc/offset or not.
45649        var now = time || createLocal(),
45650            sod = cloneWithOffset(now, this).startOf('day'),
45651            format = hooks.calendarFormat(this, sod) || 'sameElse';
45652
45653        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
45654
45655        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
45656    }
45657
45658    function clone () {
45659        return new Moment(this);
45660    }
45661
45662    function isAfter (input, units) {
45663        var localInput = isMoment(input) ? input : createLocal(input);
45664        if (!(this.isValid() && localInput.isValid())) {
45665            return false;
45666        }
45667        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
45668        if (units === 'millisecond') {
45669            return this.valueOf() > localInput.valueOf();
45670        } else {
45671            return localInput.valueOf() < this.clone().startOf(units).valueOf();
45672        }
45673    }
45674
45675    function isBefore (input, units) {
45676        var localInput = isMoment(input) ? input : createLocal(input);
45677        if (!(this.isValid() && localInput.isValid())) {
45678            return false;
45679        }
45680        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
45681        if (units === 'millisecond') {
45682            return this.valueOf() < localInput.valueOf();
45683        } else {
45684            return this.clone().endOf(units).valueOf() < localInput.valueOf();
45685        }
45686    }
45687
45688    function isBetween (from, to, units, inclusivity) {
45689        inclusivity = inclusivity || '()';
45690        return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
45691            (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
45692    }
45693
45694    function isSame (input, units) {
45695        var localInput = isMoment(input) ? input : createLocal(input),
45696            inputMs;
45697        if (!(this.isValid() && localInput.isValid())) {
45698            return false;
45699        }
45700        units = normalizeUnits(units || 'millisecond');
45701        if (units === 'millisecond') {
45702            return this.valueOf() === localInput.valueOf();
45703        } else {
45704            inputMs = localInput.valueOf();
45705            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
45706        }
45707    }
45708
45709    function isSameOrAfter (input, units) {
45710        return this.isSame(input, units) || this.isAfter(input,units);
45711    }
45712
45713    function isSameOrBefore (input, units) {
45714        return this.isSame(input, units) || this.isBefore(input,units);
45715    }
45716
45717    function diff (input, units, asFloat) {
45718        var that,
45719            zoneDelta,
45720            output;
45721
45722        if (!this.isValid()) {
45723            return NaN;
45724        }
45725
45726        that = cloneWithOffset(input, this);
45727
45728        if (!that.isValid()) {
45729            return NaN;
45730        }
45731
45732        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
45733
45734        units = normalizeUnits(units);
45735
45736        switch (units) {
45737            case 'year': output = monthDiff(this, that) / 12; break;
45738            case 'month': output = monthDiff(this, that); break;
45739            case 'quarter': output = monthDiff(this, that) / 3; break;
45740            case 'second': output = (this - that) / 1e3; break; // 1000
45741            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60
45742            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60
45743            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst
45744            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst
45745            default: output = this - that;
45746        }
45747
45748        return asFloat ? output : absFloor(output);
45749    }
45750
45751    function monthDiff (a, b) {
45752        // difference in months
45753        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
45754            // b is in (anchor - 1 month, anchor + 1 month)
45755            anchor = a.clone().add(wholeMonthDiff, 'months'),
45756            anchor2, adjust;
45757
45758        if (b - anchor < 0) {
45759            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
45760            // linear across the month
45761            adjust = (b - anchor) / (anchor - anchor2);
45762        } else {
45763            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
45764            // linear across the month
45765            adjust = (b - anchor) / (anchor2 - anchor);
45766        }
45767
45768        //check for negative zero, return zero if negative zero
45769        return -(wholeMonthDiff + adjust) || 0;
45770    }
45771
45772    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
45773    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
45774
45775    function toString () {
45776        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
45777    }
45778
45779    function toISOString(keepOffset) {
45780        if (!this.isValid()) {
45781            return null;
45782        }
45783        var utc = keepOffset !== true;
45784        var m = utc ? this.clone().utc() : this;
45785        if (m.year() < 0 || m.year() > 9999) {
45786            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
45787        }
45788        if (isFunction(Date.prototype.toISOString)) {
45789            // native implementation is ~50x faster, use it when we can
45790            if (utc) {
45791                return this.toDate().toISOString();
45792            } else {
45793                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));
45794            }
45795        }
45796        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
45797    }
45798
45799    /**
45800     * Return a human readable representation of a moment that can
45801     * also be evaluated to get a new moment which is the same
45802     *
45803     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
45804     */
45805    function inspect () {
45806        if (!this.isValid()) {
45807            return 'moment.invalid(/* ' + this._i + ' */)';
45808        }
45809        var func = 'moment';
45810        var zone = '';
45811        if (!this.isLocal()) {
45812            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
45813            zone = 'Z';
45814        }
45815        var prefix = '[' + func + '("]';
45816        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
45817        var datetime = '-MM-DD[T]HH:mm:ss.SSS';
45818        var suffix = zone + '[")]';
45819
45820        return this.format(prefix + year + datetime + suffix);
45821    }
45822
45823    function format (inputString) {
45824        if (!inputString) {
45825            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
45826        }
45827        var output = formatMoment(this, inputString);
45828        return this.localeData().postformat(output);
45829    }
45830
45831    function from (time, withoutSuffix) {
45832        if (this.isValid() &&
45833                ((isMoment(time) && time.isValid()) ||
45834                 createLocal(time).isValid())) {
45835            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
45836        } else {
45837            return this.localeData().invalidDate();
45838        }
45839    }
45840
45841    function fromNow (withoutSuffix) {
45842        return this.from(createLocal(), withoutSuffix);
45843    }
45844
45845    function to (time, withoutSuffix) {
45846        if (this.isValid() &&
45847                ((isMoment(time) && time.isValid()) ||
45848                 createLocal(time).isValid())) {
45849            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
45850        } else {
45851            return this.localeData().invalidDate();
45852        }
45853    }
45854
45855    function toNow (withoutSuffix) {
45856        return this.to(createLocal(), withoutSuffix);
45857    }
45858
45859    // If passed a locale key, it will set the locale for this
45860    // instance.  Otherwise, it will return the locale configuration
45861    // variables for this instance.
45862    function locale (key) {
45863        var newLocaleData;
45864
45865        if (key === undefined) {
45866            return this._locale._abbr;
45867        } else {
45868            newLocaleData = getLocale(key);
45869            if (newLocaleData != null) {
45870                this._locale = newLocaleData;
45871            }
45872            return this;
45873        }
45874    }
45875
45876    var lang = deprecate(
45877        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
45878        function (key) {
45879            if (key === undefined) {
45880                return this.localeData();
45881            } else {
45882                return this.locale(key);
45883            }
45884        }
45885    );
45886
45887    function localeData () {
45888        return this._locale;
45889    }
45890
45891    function startOf (units) {
45892        units = normalizeUnits(units);
45893        // the following switch intentionally omits break keywords
45894        // to utilize falling through the cases.
45895        switch (units) {
45896            case 'year':
45897                this.month(0);
45898                /* falls through */
45899            case 'quarter':
45900            case 'month':
45901                this.date(1);
45902                /* falls through */
45903            case 'week':
45904            case 'isoWeek':
45905            case 'day':
45906            case 'date':
45907                this.hours(0);
45908                /* falls through */
45909            case 'hour':
45910                this.minutes(0);
45911                /* falls through */
45912            case 'minute':
45913                this.seconds(0);
45914                /* falls through */
45915            case 'second':
45916                this.milliseconds(0);
45917        }
45918
45919        // weeks are a special case
45920        if (units === 'week') {
45921            this.weekday(0);
45922        }
45923        if (units === 'isoWeek') {
45924            this.isoWeekday(1);
45925        }
45926
45927        // quarters are also special
45928        if (units === 'quarter') {
45929            this.month(Math.floor(this.month() / 3) * 3);
45930        }
45931
45932        return this;
45933    }
45934
45935    function endOf (units) {
45936        units = normalizeUnits(units);
45937        if (units === undefined || units === 'millisecond') {
45938            return this;
45939        }
45940
45941        // 'date' is an alias for 'day', so it should be considered as such.
45942        if (units === 'date') {
45943            units = 'day';
45944        }
45945
45946        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms')
vendor: 20,515 bytes, lines 45946-46652
45946;
45947    }
45948
45949    function valueOf () {
45950        return this._d.valueOf() - ((this._offset || 0) * 60000);
45951    }
45952
45953    function unix () {
45954        return Math.floor(this.valueOf() / 1000);
45955    }
45956
45957    function toDate () {
45958        return new Date(this.valueOf());
45959    }
45960
45961    function toArray () {
45962        var m = this;
45963        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
45964    }
45965
45966    function toObject () {
45967        var m = this;
45968        return {
45969            years: m.year(),
45970            months: m.month(),
45971            date: m.date(),
45972            hours: m.hours(),
45973            minutes: m.minutes(),
45974            seconds: m.seconds(),
45975            milliseconds: m.milliseconds()
45976        };
45977    }
45978
45979    function toJSON () {
45980        // new Date(NaN).toJSON() === null
45981        return this.isValid() ? this.toISOString() : null;
45982    }
45983
45984    function isValid$2 () {
45985        return isValid(this);
45986    }
45987
45988    function parsingFlags () {
45989        return extend({}, getParsingFlags(this));
45990    }
45991
45992    function invalidAt () {
45993        return getParsingFlags(this).overflow;
45994    }
45995
45996    function creationData() {
45997        return {
45998            input: this._i,
45999            format: this._f,
46000            locale: this._locale,
46001            isUTC: this._isUTC,
46002            strict: this._strict
46003        };
46004    }
46005
46006    // FORMATTING
46007
46008    addFormatToken(0, ['gg', 2], 0, function () {
46009        return this.weekYear() % 100;
46010    });
46011
46012    addFormatToken(0, ['GG', 2], 0, function () {
46013        return this.isoWeekYear() % 100;
46014    });
46015
46016    function addWeekYearFormatToken (token, getter) {
46017        addFormatToken(0, [token, token.length], 0, getter);
46018    }
46019
46020    addWeekYearFormatToken('gggg',     'weekYear');
46021    addWeekYearFormatToken('ggggg',    'weekYear');
46022    addWeekYearFormatToken('GGGG',  'isoWeekYear');
46023    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
46024
46025    // ALIASES
46026
46027    addUnitAlias('weekYear', 'gg');
46028    addUnitAlias('isoWeekYear', 'GG');
46029
46030    // PRIORITY
46031
46032    addUnitPriority('weekYear', 1);
46033    addUnitPriority('isoWeekYear', 1);
46034
46035
46036    // PARSING
46037
46038    addRegexToken('G',      matchSigned);
46039    addRegexToken('g',      matchSigned);
46040    addRegexToken('GG',     match1to2, match2);
46041    addRegexToken('gg',     match1to2, match2);
46042    addRegexToken('GGGG',   match1to4, match4);
46043    addRegexToken('gggg',   match1to4, match4);
46044    addRegexToken('GGGGG',  match1to6, match6);
46045    addRegexToken('ggggg',  match1to6, match6);
46046
46047    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
46048        week[token.substr(0, 2)] = toInt(input);
46049    });
46050
46051    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
46052        week[token] = hooks.parseTwoDigitYear(input);
46053    });
46054
46055    // MOMENTS
46056
46057    function getSetWeekYear (input) {
46058        return getSetWeekYearHelper.call(this,
46059                input,
46060                this.week(),
46061                this.weekday(),
46062                this.localeData()._week.dow,
46063                this.localeData()._week.doy);
46064    }
46065
46066    function getSetISOWeekYear (input) {
46067        return getSetWeekYearHelper.call(this,
46068                input, this.isoWeek(), this.isoWeekday(), 1, 4);
46069    }
46070
46071    function getISOWeeksInYear () {
46072        return weeksInYear(this.year(), 1, 4);
46073    }
46074
46075    function getWeeksInYear () {
46076        var weekInfo = this.localeData()._week;
46077        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
46078    }
46079
46080    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
46081        var weeksTarget;
46082        if (input == null) {
46083            return weekOfYear(this, dow, doy).year;
46084        } else {
46085            weeksTarget = weeksInYear(input, dow, doy);
46086            if (week > weeksTarget) {
46087                week = weeksTarget;
46088            }
46089            return setWeekAll.call(this, input, week, weekday, dow, doy);
46090        }
46091    }
46092
46093    function setWeekAll(weekYear, week, weekday, dow, doy) {
46094        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
46095            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
46096
46097        this.year(date.getUTCFullYear());
46098        this.month(date.getUTCMonth());
46099        this.date(date.getUTCDate());
46100        return this;
46101    }
46102
46103    // FORMATTING
46104
46105    addFormatToken('Q', 0, 'Qo', 'quarter');
46106
46107    // ALIASES
46108
46109    addUnitAlias('quarter', 'Q');
46110
46111    // PRIORITY
46112
46113    addUnitPriority('quarter', 7);
46114
46115    // PARSING
46116
46117    addRegexToken('Q', match1);
46118    addParseToken('Q', function (input, array) {
46119        array[MONTH] = (toInt(input) - 1) * 3;
46120    });
46121
46122    // MOMENTS
46123
46124    function getSetQuarter (input) {
46125        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
46126    }
46127
46128    // FORMATTING
46129
46130    addFormatToken('D', ['DD', 2], 'Do', 'date');
46131
46132    // ALIASES
46133
46134    addUnitAlias('date', 'D');
46135
46136    // PRIORITY
46137    addUnitPriority('date', 9);
46138
46139    // PARSING
46140
46141    addRegexToken('D',  match1to2);
46142    addRegexToken('DD', match1to2, match2);
46143    addRegexToken('Do', function (isStrict, locale) {
46144        // TODO: Remove "ordinalParse" fallback in next major release.
46145        return isStrict ?
46146          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
46147          locale._dayOfMonthOrdinalParseLenient;
46148    });
46149
46150    addParseToken(['D', 'DD'], DATE);
46151    addParseToken('Do', function (input, array) {
46152        array[DATE] = toInt(input.match(match1to2)[0]);
46153    });
46154
46155    // MOMENTS
46156
46157    var getSetDayOfMonth = makeGetSet('Date', true);
46158
46159    // FORMATTING
46160
46161    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
46162
46163    // ALIASES
46164
46165    addUnitAlias('dayOfYear', 'DDD');
46166
46167    // PRIORITY
46168    addUnitPriority('dayOfYear', 4);
46169
46170    // PARSING
46171
46172    addRegexToken('DDD',  match1to3);
46173    addRegexToken('DDDD', match3);
46174    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
46175        config._dayOfYear = toInt(input);
46176    });
46177
46178    // HELPERS
46179
46180    // MOMENTS
46181
46182    function getSetDayOfYear (input) {
46183        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
46184        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
46185    }
46186
46187    // FORMATTING
46188
46189    addFormatToken('m', ['mm', 2], 0, 'minute');
46190
46191    // ALIASES
46192
46193    addUnitAlias('minute', 'm');
46194
46195    // PRIORITY
46196
46197    addUnitPriority('minute', 14);
46198
46199    // PARSING
46200
46201    addRegexToken('m',  match1to2);
46202    addRegexToken('mm', match1to2, match2);
46203    addParseToken(['m', 'mm'], MINUTE);
46204
46205    // MOMENTS
46206
46207    var getSetMinute = makeGetSet('Minutes', false);
46208
46209    // FORMATTING
46210
46211    addFormatToken('s', ['ss', 2], 0, 'second');
46212
46213    // ALIASES
46214
46215    addUnitAlias('second', 's');
46216
46217    // PRIORITY
46218
46219    addUnitPriority('second', 15);
46220
46221    // PARSING
46222
46223    addRegexToken('s',  match1to2);
46224    addRegexToken('ss', match1to2, match2);
46225    addParseToken(['s', 'ss'], SECOND);
46226
46227    // MOMENTS
46228
46229    var getSetSecond = makeGetSet('Seconds', false);
46230
46231    // FORMATTING
46232
46233    addFormatToken('S', 0, 0, function () {
46234        return ~~(this.millisecond() / 100);
46235    });
46236
46237    addFormatToken(0, ['SS', 2], 0, function () {
46238        return ~~(this.millisecond() / 10);
46239    });
46240
46241    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
46242    addFormatToken(0, ['SSSS', 4], 0, function () {
46243        return this.millisecond() * 10;
46244    });
46245    addFormatToken(0, ['SSSSS', 5], 0, function () {
46246        return this.millisecond() * 100;
46247    });
46248    addFormatToken(0, ['SSSSSS', 6], 0, function () {
46249        return this.millisecond() * 1000;
46250    });
46251    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
46252        return this.millisecond() * 10000;
46253    });
46254    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
46255        return this.millisecond() * 100000;
46256    });
46257    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
46258        return this.millisecond() * 1000000;
46259    });
46260
46261
46262    // ALIASES
46263
46264    addUnitAlias('millisecond', 'ms');
46265
46266    // PRIORITY
46267
46268    addUnitPriority('millisecond', 16);
46269
46270    // PARSING
46271
46272    addRegexToken('S',    match1to3, match1);
46273    addRegexToken('SS',   match1to3, match2);
46274    addRegexToken('SSS',  match1to3, match3);
46275
46276    var token;
46277    for (token = 'SSSS'; token.length <= 9; token += 'S') {
46278        addRegexToken(token, matchUnsigned);
46279    }
46280
46281    function parseMs(input, array) {
46282        array[MILLISECOND] = toInt(('0.' + input) * 1000);
46283    }
46284
46285    for (token = 'S'; token.length <= 9; token += 'S') {
46286        addParseToken(token, parseMs);
46287    }
46288    // MOMENTS
46289
46290    var getSetMillisecond = makeGetSet('Milliseconds', false);
46291
46292    // FORMATTING
46293
46294    addFormatToken('z',  0, 0, 'zoneAbbr');
46295    addFormatToken('zz', 0, 0, 'zoneName');
46296
46297    // MOMENTS
46298
46299    function getZoneAbbr () {
46300        return this._isUTC ? 'UTC' : '';
46301    }
46302
46303    function getZoneName () {
46304        return this._isUTC ? 'Coordinated Universal Time' : '';
46305    }
46306
46307    var proto = Moment.prototype;
46308
46309    proto.add               = add;
46310    proto.calendar          = calendar$1;
46311    proto.clone             = clone;
46312    proto.diff              = diff;
46313    proto.endOf             = endOf;
46314    proto.format            = format;
46315    proto.from              = from;
46316    proto.fromNow           = fromNow;
46317    proto.to                = to;
46318    proto.toNow             = toNow;
46319    proto.get               = stringGet;
46320    proto.invalidAt         = invalidAt;
46321    proto.isAfter           = isAfter;
46322    proto.isBefore          = isBefore;
46323    proto.isBetween         = isBetween;
46324    proto.isSame            = isSame;
46325    proto.isSameOrAfter     = isSameOrAfter;
46326    proto.isSameOrBefore    = isSameOrBefore;
46327    proto.isValid           = isValid$2;
46328    proto.lang              = lang;
46329    proto.locale            = locale;
46330    proto.localeData        = localeData;
46331    proto.max               = prototypeMax;
46332    proto.min               = prototypeMin;
46333    proto.parsingFlags      = parsingFlags;
46334    proto.set               = stringSet;
46335    proto.startOf           = startOf;
46336    proto.subtract          = subtract;
46337    proto.toArray           = toArray;
46338    proto.toObject          = toObject;
46339    proto.toDate            = toDate;
46340    proto.toISOString       = toISOString;
46341    proto.inspect           = inspect;
46342    proto.toJSON            = toJSON;
46343    proto.toString          = toString;
46344    proto.unix              = unix;
46345    proto.valueOf           = valueOf;
46346    proto.creationData      = creationData;
46347    proto.year       = getSetYear;
46348    proto.isLeapYear = getIsLeapYear;
46349    proto.weekYear    = getSetWeekYear;
46350    proto.isoWeekYear = getSetISOWeekYear;
46351    proto.quarter = proto.quarters = getSetQuarter;
46352    proto.month       = getSetMonth;
46353    proto.daysInMonth = getDaysInMonth;
46354    proto.week           = proto.weeks        = getSetWeek;
46355    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;
46356    proto.weeksInYear    = getWeeksInYear;
46357    proto.isoWeeksInYear = getISOWeeksInYear;
46358    proto.date       = getSetDayOfMonth;
46359    proto.day        = proto.days             = getSetDayOfWeek;
46360    proto.weekday    = getSetLocaleDayOfWeek;
46361    proto.isoWeekday = getSetISODayOfWeek;
46362    proto.dayOfYear  = getSetDayOfYear;
46363    proto.hour = proto.hours = getSetHour;
46364    proto.minute = proto.minutes = getSetMinute;
46365    proto.second = proto.seconds = getSetSecond;
46366    proto.millisecond = proto.milliseconds = getSetMillisecond;
46367    proto.utcOffset            = getSetOffset;
46368    proto.utc                  = setOffsetToUTC;
46369    proto.local                = setOffsetToLocal;
46370    proto.parseZone            = setOffsetToParsedOffset;
46371    proto.hasAlignedHourOffset = hasAlignedHourOffset;
46372    proto.isDST                = isDaylightSavingTime;
46373    proto.isLocal              = isLocal;
46374    proto.isUtcOffset          = isUtcOffset;
46375    proto.isUtc                = isUtc;
46376    proto.isUTC                = isUtc;
46377    proto.zoneAbbr = getZoneAbbr;
46378    proto.zoneName = getZoneName;
46379    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
46380    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
46381    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
46382    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
46383    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
46384
46385    function createUnix (input) {
46386        return createLocal(input * 1000);
46387    }
46388
46389    function createInZone () {
46390        return createLocal.apply(null, arguments).parseZone();
46391    }
46392
46393    function preParsePostFormat (string) {
46394        return string;
46395    }
46396
46397    var proto$1 = Locale.prototype;
46398
46399    proto$1.calendar        = calendar;
46400    proto$1.longDateFormat  = longDateFormat;
46401    proto$1.invalidDate     = invalidDate;
46402    proto$1.ordinal         = ordinal;
46403    proto$1.preparse        = preParsePostFormat;
46404    proto$1.postformat      = preParsePostFormat;
46405    proto$1.relativeTime    = relativeTime;
46406    proto$1.pastFuture      = pastFuture;
46407    proto$1.set             = set;
46408
46409    proto$1.months            =        localeMonths;
46410    proto$1.monthsShort       =        localeMonthsShort;
46411    proto$1.monthsParse       =        localeMonthsParse;
46412    proto$1.monthsRegex       = monthsRegex;
46413    proto$1.monthsShortRegex  = monthsShortRegex;
46414    proto$1.week = localeWeek;
46415    proto$1.firstDayOfYear = localeFirstDayOfYear;
46416    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
46417
46418    proto$1.weekdays       =        localeWeekdays;
46419    proto$1.weekdaysMin    =        localeWeekdaysMin;
46420    proto$1.weekdaysShort  =        localeWeekdaysShort;
46421    proto$1.weekdaysParse  =        localeWeekdaysParse;
46422
46423    proto$1.weekdaysRegex       =        weekdaysRegex;
46424    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;
46425    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;
46426
46427    proto$1.isPM = localeIsPM;
46428    proto$1.meridiem = localeMeridiem;
46429
46430    function get$1 (format, index, field, setter) {
46431        var locale = getLocale();
46432        var utc = createUTC().set(setter, index);
46433        return locale[field](utc, format);
46434    }
46435
46436    function listMonthsImpl (format, index, field) {
46437        if (isNumber(format)) {
46438            index = format;
46439            format = undefined;
46440        }
46441
46442        format = format || '';
46443
46444        if (index != null) {
46445            return get$1(format, index, field, 'month');
46446        }
46447
46448        var i;
46449        var out = [];
46450        for (i = 0; i < 12; i++) {
46451            out[i] = get$1(format, i, field, 'month');
46452        }
46453        return out;
46454    }
46455
46456    // ()
46457    // (5)
46458    // (fmt, 5)
46459    // (fmt)
46460    // (true)
46461    // (true, 5)
46462    // (true, fmt, 5)
46463    // (true, fmt)
46464    function listWeekdaysImpl (localeSorted, format, index, field) {
46465        if (typeof localeSorted === 'boolean') {
46466            if (isNumber(format)) {
46467                index = format;
46468                format = undefined;
46469            }
46470
46471            format = format || '';
46472        } else {
46473            format = localeSorted;
46474            index = format;
46475            localeSorted = false;
46476
46477            if (isNumber(format)) {
46478                index = format;
46479                format = undefined;
46480            }
46481
46482            format = format || '';
46483        }
46484
46485        var locale = getLocale(),
46486            shift = localeSorted ? locale._week.dow : 0;
46487
46488        if (index != null) {
46489            return get$1(format, (index + shift) % 7, field, 'day');
46490        }
46491
46492        var i;
46493        var out = [];
46494        for (i = 0; i < 7; i++) {
46495            out[i] = get$1(format, (i + shift) % 7, field, 'day');
46496        }
46497        return out;
46498    }
46499
46500    function listMonths (format, index) {
46501        return listMonthsImpl(format, index, 'months');
46502    }
46503
46504    function listMonthsShort (format, index) {
46505        return listMonthsImpl(format, index, 'monthsShort');
46506    }
46507
46508    function listWeekdays (localeSorted, format, index) {
46509        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
46510    }
46511
46512    function listWeekdaysShort (localeSorted, format, index) {
46513        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
46514    }
46515
46516    function listWeekdaysMin (localeSorted, format, index) {
46517        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
46518    }
46519
46520    getSetGlobalLocale('en', {
46521        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
46522        ordinal : function (number) {
46523            var b = number % 10,
46524                output = (toInt(number % 100 / 10) === 1) ? 'th' :
46525                (b === 1) ? 'st' :
46526                (b === 2) ? 'nd' :
46527                (b === 3) ? 'rd' : 'th';
46528            return number + output;
46529        }
46530    });
46531
46532    // Side effect imports
46533
46534    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
46535    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
46536
46537    var mathAbs = Math.abs;
46538
46539    function abs () {
46540        var data           = this._data;
46541
46542        this._milliseconds = mathAbs(this._milliseconds);
46543        this._days         = mathAbs(this._days);
46544        this._months       = mathAbs(this._months);
46545
46546        data.milliseconds  = mathAbs(data.milliseconds);
46547        data.seconds       = mathAbs(data.seconds);
46548        data.minutes       = mathAbs(data.minutes);
46549        data.hours         = mathAbs(data.hours);
46550        data.months        = mathAbs(data.months);
46551        data.years         = mathAbs(data.years);
46552
46553        return this;
46554    }
46555
46556    function addSubtract$1 (duration, input, value, direction) {
46557        var other = createDuration(input, value);
46558
46559        duration._milliseconds += direction * other._milliseconds;
46560        duration._days         += direction * other._days;
46561        duration._months       += direction * other._months;
46562
46563        return duration._bubble();
46564    }
46565
46566    // supports only 2.0-style add(1, 's') or add(duration)
46567    function add$1 (input, value) {
46568        return addSubtract$1(this, input, value, 1);
46569    }
46570
46571    // supports only 2.0-style subtract(1, 's') or subtract(duration)
46572    function subtract$1 (input, value) {
46573        return addSubtract$1(this, input, value, -1);
46574    }
46575
46576    function absCeil (number) {
46577        if (number < 0) {
46578            return Math.floor(number);
46579        } else {
46580            return Math.ceil(number);
46581        }
46582    }
46583
46584    function bubble () {
46585        var milliseconds = this._milliseconds;
46586        var days         = this._days;
46587        var months       = this._months;
46588        var data         = this._data;
46589        var seconds, minutes, hours, years, monthsFromDays;
46590
46591        // if we have a mix of positive and negative values, bubble down first
46592        // check: https://github.com/moment/moment/issues/2166
46593        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
46594                (milliseconds <= 0 && days <= 0 && months <= 0))) {
46595            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
46596            days = 0;
46597            months = 0;
46598        }
46599
46600        // The following code bubbles up values, see the tests for
46601        // examples of what that means.
46602        data.milliseconds = milliseconds % 1000;
46603
46604        seconds           = absFloor(milliseconds / 1000);
46605        data.seconds      = seconds % 60;
46606
46607        minutes           = absFloor(seconds / 60);
46608        data.minutes      = minutes % 60;
46609
46610        hours             = absFloor(minutes / 60);
46611        data.hours        = hours % 24;
46612
46613        days += absFloor(hours / 24);
46614
46615        // convert days to months
46616        monthsFromDays = absFloor(daysToMonths(days));
46617        months += monthsFromDays;
46618        days -= absCeil(monthsToDays(monthsFromDays));
46619
46620        // 12 months -> 1 year
46621        years = absFloor(months / 12);
46622        months %= 12;
46623
46624        data.days   = days;
46625        data.months = months;
46626        data.years  = years;
46627
46628        return this;
46629    }
46630
46631    function daysToMonths (days) {
46632        // 400 years have 146097 days (taking into account leap year rules)
46633        // 400 years have 12 months === 4800
46634        return days * 4800 / 146097;
46635    }
46636
46637    function monthsToDays (months) {
46638        // the reverse of daysToMonths
46639        return months * 146097 / 4800;
46640    }
46641
46642    function as (units) {
46643        if (!this.isValid()) {
46644            return NaN;
46645        }
46646        var days;
46647        var months;
46648        var milliseconds = this._milliseconds;
46649
46650        units = normalizeUnits(units);
46651
46652        if (units === 'month' || units === '
vendor: 1,721 bytes, lines 46652-46697
46652year') {
46653            days   = this._days   + milliseconds / 864e5;
46654            months = this._months + daysToMonths(days);
46655            return units === 'month' ? months : months / 12;
46656        } else {
46657            // handle milliseconds separately because of floating point math errors (issue #1867)
46658            days = this._days + Math.round(monthsToDays(this._months));
46659            switch (units) {
46660                case 'week'   : return days / 7     + milliseconds / 6048e5;
46661                case 'day'    : return days         + milliseconds / 864e5;
46662                case 'hour'   : return days * 24    + milliseconds / 36e5;
46663                case 'minute' : return days * 1440  + milliseconds / 6e4;
46664                case 'second' : return days * 86400 + milliseconds / 1000;
46665                // Math.floor prevents floating point math errors here
46666                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
46667                default: throw new Error('Unknown unit ' + units);
46668            }
46669        }
46670    }
46671
46672    // TODO: Use this.as('ms')?
46673    function valueOf$1 () {
46674        if (!this.isValid()) {
46675            return NaN;
46676        }
46677        return (
46678            this._milliseconds +
46679            this._days * 864e5 +
46680            (this._months % 12) * 2592e6 +
46681            toInt(this._months / 12) * 31536e6
46682        );
46683    }
46684
46685    function makeAs (alias) {
46686        return function () {
46687            return this.as(alias);
46688        };
46689    }
46690
46691    var asMilliseconds = makeAs('ms');
46692    var asSeconds      = makeAs('s');
46693    var asMinutes      = makeAs('m');
46694    var asHours        = makeAs('h');
46695    var asDays         = makeAs('d');
46696    var asWeeks        = makeAs('w');
46697    var asMonths       = makeAs('M
vendor: 6,605 bytes, lines 46697-46889
46697');
46698    var asYears        = makeAs('y');
46699
46700    function clone$1 () {
46701        return createDuration(this);
46702    }
46703
46704    function get$2 (units) {
46705        units = normalizeUnits(units);
46706        return this.isValid() ? this[units + 's']() : NaN;
46707    }
46708
46709    function makeGetter(name) {
46710        return function () {
46711            return this.isValid() ? this._data[name] : NaN;
46712        };
46713    }
46714
46715    var milliseconds = makeGetter('milliseconds');
46716    var seconds      = makeGetter('seconds');
46717    var minutes      = makeGetter('minutes');
46718    var hours        = makeGetter('hours');
46719    var days         = makeGetter('days');
46720    var months       = makeGetter('months');
46721    var years        = makeGetter('years');
46722
46723    function weeks () {
46724        return absFloor(this.days() / 7);
46725    }
46726
46727    var round = Math.round;
46728    var thresholds = {
46729        ss: 44,         // a few seconds to seconds
46730        s : 45,         // seconds to minute
46731        m : 45,         // minutes to hour
46732        h : 22,         // hours to day
46733        d : 26,         // days to month
46734        M : 11          // months to year
46735    };
46736
46737    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
46738    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
46739        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
46740    }
46741
46742    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
46743        var duration = createDuration(posNegDuration).abs();
46744        var seconds  = round(duration.as('s'));
46745        var minutes  = round(duration.as('m'));
46746        var hours    = round(duration.as('h'));
46747        var days     = round(duration.as('d'));
46748        var months   = round(duration.as('M'));
46749        var years    = round(duration.as('y'));
46750
46751        var a = seconds <= thresholds.ss && ['s', seconds]  ||
46752                seconds < thresholds.s   && ['ss', seconds] ||
46753                minutes <= 1             && ['m']           ||
46754                minutes < thresholds.m   && ['mm', minutes] ||
46755                hours   <= 1             && ['h']           ||
46756                hours   < thresholds.h   && ['hh', hours]   ||
46757                days    <= 1             && ['d']           ||
46758                days    < thresholds.d   && ['dd', days]    ||
46759                months  <= 1             && ['M']           ||
46760                months  < thresholds.M   && ['MM', months]  ||
46761                years   <= 1             && ['y']           || ['yy', years];
46762
46763        a[2] = withoutSuffix;
46764        a[3] = +posNegDuration > 0;
46765        a[4] = locale;
46766        return substituteTimeAgo.apply(null, a);
46767    }
46768
46769    // This function allows you to set the rounding function for relative time strings
46770    function getSetRelativeTimeRounding (roundingFunction) {
46771        if (roundingFunction === undefined) {
46772            return round;
46773        }
46774        if (typeof(roundingFunction) === 'function') {
46775            round = roundingFunction;
46776            return true;
46777        }
46778        return false;
46779    }
46780
46781    // This function allows you to set a threshold for relative time strings
46782    function getSetRelativeTimeThreshold (threshold, limit) {
46783        if (thresholds[threshold] === undefined) {
46784            return false;
46785        }
46786        if (limit === undefined) {
46787            return thresholds[threshold];
46788        }
46789        thresholds[threshold] = limit;
46790        if (threshold === 's') {
46791            thresholds.ss = limit - 1;
46792        }
46793        return true;
46794    }
46795
46796    function humanize (withSuffix) {
46797        if (!this.isValid()) {
46798            return this.localeData().invalidDate();
46799        }
46800
46801        var locale = this.localeData();
46802        var output = relativeTime$1(this, !withSuffix, locale);
46803
46804        if (withSuffix) {
46805            output = locale.pastFuture(+this, output);
46806        }
46807
46808        return locale.postformat(output);
46809    }
46810
46811    var abs$1 = Math.abs;
46812
46813    function sign(x) {
46814        return ((x > 0) - (x < 0)) || +x;
46815    }
46816
46817    function toISOString$1() {
46818        // for ISO strings we do not use the normal bubbling rules:
46819        //  * milliseconds bubble up until they become hours
46820        //  * days do not bubble at all
46821        //  * months bubble up until they become years
46822        // This is because there is no context-free conversion between hours and days
46823        // (think of clock changes)
46824        // and also not between days and months (28-31 days per month)
46825        if (!this.isValid()) {
46826            return this.localeData().invalidDate();
46827        }
46828
46829        var seconds = abs$1(this._milliseconds) / 1000;
46830        var days         = abs$1(this._days);
46831        var months       = abs$1(this._months);
46832        var minutes, hours, years;
46833
46834        // 3600 seconds -> 60 minutes -> 1 hour
46835        minutes           = absFloor(seconds / 60);
46836        hours             = absFloor(minutes / 60);
46837        seconds %= 60;
46838        minutes %= 60;
46839
46840        // 12 months -> 1 year
46841        years  = absFloor(months / 12);
46842        months %= 12;
46843
46844
46845        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
46846        var Y = years;
46847        var M = months;
46848        var D = days;
46849        var h = hours;
46850        var m = minutes;
46851        var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
46852        var total = this.asSeconds();
46853
46854        if (!total) {
46855            // this is the same as C#'s (Noda) and python (isodate)...
46856            // but not other JS (goog.date)
46857            return 'P0D';
46858        }
46859
46860        var totalSign = total < 0 ? '-' : '';
46861        var ymSign = sign(this._months) !== sign(total) ? '-' : '';
46862        var daysSign = sign(this._days) !== sign(total) ? '-' : '';
46863        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
46864
46865        return totalSign + 'P' +
46866            (Y ? ymSign + Y + 'Y' : '') +
46867            (M ? ymSign + M + 'M' : '') +
46868            (D ? daysSign + D + 'D' : '') +
46869            ((h || m || s) ? 'T' : '') +
46870            (h ? hmsSign + h + 'H' : '') +
46871            (m ? hmsSign + m + 'M' : '') +
46872            (s ? hmsSign + s + 'S' : '');
46873    }
46874
46875    var proto$2 = Duration.prototype;
46876
46877    proto$2.isValid        = isValid$1;
46878    proto$2.abs            = abs;
46879    proto$2.add            = add$1;
46880    proto$2.subtract       = subtract$1;
46881    proto$2.as             = as;
46882    proto$2.asMilliseconds = asMilliseconds;
46883    proto$2.asSeconds      = asSeconds;
46884    proto$2.asMinutes      = asMinutes;
46885    proto$2.asHours        = asHours;
46886    proto$2.asDays         = asDays;
46887    proto$2.asWeeks        = asWeeks;
46888    proto$2.asMonths       = asMonths;
46889    proto$2.as
46889Years        = asYears;
46890    proto$2.valueOf        = valueOf$1;
46891    proto$2._bubble        = bubble;
46892    proto$2.clone          = clone$1;
46893    proto$2.get            = get$2;
46894    proto$2.milliseconds   = milliseconds;
46895    proto$2.seconds        = seconds;
46896    proto$2.minutes        = minutes;
46897    proto$2.hours          = hours;
46898    proto$2.days           = days;
46899    proto$2.weeks          = weeks;
46900    proto$2.months         = months;
46901    proto$2.years          = years;
46902    proto$2.humanize       = humanize;
46903    proto$2.toISOString    = toISOString$1;
46904    proto$2.toString       = toISOString$1;
46905    proto$2.toJSON         = toISOString$1;
46906    proto$2.locale         = locale;
46907    proto$2.localeData     = localeData;
46908
46909    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
46910    proto$2.lang = lang;
46911
46912    // Side effect imports
46913
46914    // FORMATTING
46915
46916    addFormatToken('X', 0, 0, 'unix');
46917    addFormatToken('x', 0, 0, 'valueOf');
46918
46919    // PARSING
46920
46921    addRegexToken('x', matchSigned);
46922    addRegexToken('X', matchTimestamp);
46923    addParseToken('X', function (input, array, config) {
46924        config._d = new Date(parseFloat(input, 10) * 1000);
46925    });
46926    addParseToken('x', function (input, array, config) {
46927        config._d = new Date(toInt(input));
46928    });
46929
46930    // Side effect imports
46931
46932
46933    hooks.version = '2.22.2';
46934
46935    setHookCallback(createLocal);
46936
46937    hooks.fn                    = proto;
46938    hooks.min                   = min;
46939    hooks.max                   = max;
46940    hooks.now                   = now;
46941    hooks.utc                   = createUTC;
46942    hooks.unix                  = createUnix;
46943    hooks.months                = listMonths;
46944    hooks.isDate                = isDate;
46945    hooks.locale                = getSetGlobalLocale;
46946    hooks.invalid               = createInvalid;
46947    hooks.duration              = createDuration;
46948    hooks.isMoment              = isMoment;
46949    hooks.weekdays              = listWeekdays;
46950    hooks.parseZone             = createInZone;
46951    hooks.localeData            = getLocale;
46952    hooks.isDuration            = isDuration;
46953    hooks.monthsShort           = listMonthsShort;
46954    hooks.weekdaysMin           = listWeekdaysMin;
46955    hooks.defineLocale          = defineLocale;
46956    hooks.updateLocale          = updateLocale;
46957    hooks.locales               = listLocales;
46958    hooks.weekdaysShort         = listWeekdaysShort;
46959    hooks.normalizeUnits        = normalizeUnits;
46960    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;
46961    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
46962    hooks.calendarFormat        = getCalendarFormat;
46963    hooks.prototype             = proto;
46964
46965    // currently HTML5 input type only supports 24-hour formats
46966    hooks.HTML5_FMT = {
46967        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type="datetime-local" />
46968        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type="datetime-local" step="1" />
46969        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type="datetime-local" step="0.001" />
46970        DATE: 'YYYY-MM-DD',                             // <input type="date" />
46971        TIME: 'HH:mm',                                  // <input type="time" />
46972        TIME_SECONDS: 'HH:mm:ss',                       // <input type="time" step="1" />
46973        TIME_MS: 'HH:mm:ss.SSS',                        // <input type="time" step="0.001" />
46974        WEEK: 'YYYY-[W]WW',                             // <input type="week" />
46975        MONTH: 'YYYY-MM'                                // <input type="month" />
46976    };
46977
46978    return hooks;
46979
46980})));
46981
46982function AfagForm($form, formName) {
46983    function toggleDisplayBasedOfValue($select, $elementToShow, showValue) {
46984        $select.on('change', function() {
46985            var doShow = $select.val() === showValue;
46986            $elementToShow.toggle(doShow);
46987        });
46988
46989        $elementToShow.toggle($select.val() === showValue);
46990    }
46991
46992    function removeGlobalErrors() {
46993        $globalFormErrors.html('');
46994    }
46995
46996    function showGlobalErrors(formErrors) {
46997        removeGlobalErrors();
46998
46999        $.each(formErrors, function(fieldName, fieldErrors) {
47000            var $fieldErrors = $('<div/>', { class: 'alert alert-danger'});
47001            $fieldErrors.append($('<strong/>', { class: 'field-label' }).text(fieldErrors.label + ':'));
47002
47003            $.each(fieldErrors.errors, function(index, fieldError) {
47004                $fieldErrors.append($('<div/>', { class: 'error-message' }).text(fieldError));
47005            });
47006
47007            $globalFormErrors.append($fieldErrors);
47008        });
47009    }
47010
47011
47012    function submit($submitButton, url, onValid) {
47013        var formData = $form.serialize() + '&--' + formName + '[__currentPage]=1';
47014        $submitButton.addClass('loading');
47015        $globalFormErrors.html('');
47016
47017        $.ajax({
47018            url: url,
47019            type: 'POST',
47020            data: formData,
47021            dataType: 'json',
47022            success: function(result) {
47023                if (result.valid) {
47024                    if (typeof onValid === 'function') {
47025                        onValid();
47026                    }
47027                } else {
47028                    showGlobalErrors(result.errors);
47029                }
47030            },
47031            complete: function() {
47032                $submitButton.removeClass('loading');
47033            }
47034        });
47035    }
47036
47037    function addValidators(fieldKey, validators) {
47038        var $field = $('#' + formName + '-' + fieldKey);
47039        var fieldOptions = formValidation.getOptions($field);
47040        var isNewField = false;
47041
47042        if (!fieldOptions) {
47043            console.log('AfagForm.addValidators: Creating new validation field: ' + fieldKey);
47044            isNewField = true;
47045            fieldOptions = {};
47046        }
47047
47048        if (!fieldOptions.hasOwnProperty('validators')) {
47049            fieldOptions.validators = {};
47050        }
47051
47052        for(var key in validators) {
47053            if (validators.hasOwnProperty(key)) {
47054                fieldOptions.validators[key] = validators[key];
47055            }
47056        }
47057
47058        console.log('Setting new field options for field [' + fieldKey + '] to: ', fieldOptions);
47059
47060        if (!isNewField) {
47061            formValidation.removeField($field);
47062        }
47063
47064        formValidation.addField($field, fieldOptions);
47065    }
47066
47067    function addPhonePrefixValidator(fieldKey) {
47068        addValidators(fieldKey, {
47069            regexp: {
47070                regexp: /^\+\d+$/i,
47071                message: 'Vennligst oppgi et gyldig internasjonalt forvalg, f.eks +47'
47072            }
47073        });
47074    }
47075
47076    function addPhoneNumberValidator(fieldKey) {
47077        addValidators(fieldKey, {
47078            regexp: {
47079                regexp: /^[\d ]+$/,
47080                message: 'Vennligst benytt kun tall og mellomrom'
47081            }
47082        });
47083    }
47084
47085    function addGraduationYearValidator(fieldKey) {
47086        addValidators(fieldKey, {
47087            callback: {
47088                callback: function(value, validator, $field) {
47089                    if (value === '') {
47090                        // The NotEmptyValidator will handle this case
47091                        return true;
47092                    }
47093
47094                    var year = parseInt(value);
47095                    return year >= 1900 && year <= moment().year() + 20;
47096                },
47097                message: 'Vennligst oppgi et gyldig årstall (fire siffer)'
47098            }
47099        });
47100    }
47101
47102
47103
47104    var $globalFormErrors = $('#global-form-errors');
47105    var formValidation = $form.data('formValidation');
47106
47107    if ($globalFormErrors.length === 0) {
47108        console.error('AfagForm: Required HTML element not found: #global-form-errors');
47109    }
47110
47111    if (!formName) {
47112        console.error('AfagForm: Missing required parameter: formName');
47113    }
47114
47115    $form.skInitForm();
47116
47117    return {
47118        submit: submit,
47119        toggleDisplayBasedOfValue: toggleDisplayBasedOfValue,
47120        addValidators: addValidators,
47121        addPhonePrefixValidator: addPhonePrefixValidator,
47122        addPhoneNumberValidator: addPhoneNumberValidator,
47123        addGraduationYearValidator: addGraduationYearValidator
47124    };
47125}
47126
47127(function ($) {
47128    function AfagMap($container, options) {
47129
47130
47131        function onMapsApiLoaded() {
47132            console.log('Init map:', $map.get(0));
47133
47134            geocoder = new google.maps.Geocoder();
47135
47136            map = new google.maps.Map($map.get(0), {
47137                zoom: 15,
47138                center: new google.maps.LatLng(options.latitude, options.longitude),
47139                mapTypeId: google.maps.MapTypeId.ROADMAP,
47140                mapTypeControl: true,
47141                mapTypeControlOptions: {
47142                    position: google.maps.ControlPosition.TOP_RIGHT,
47143                    mapTypeIds: ['styled_map', google.maps.MapTypeId.HYBRID]
47144                }
47145            });
47146            var mapStyles = options.styles ? options.styles : afagMapStyle;
47147            map.mapTypes.set('styled_map', new google.maps.StyledMapType(mapStyles, { name: 'Map' }));
47148            map.setMapTypeId('styled_map');
47149
47150            markerIcon = new google.maps.MarkerImage(options.markerUrl, null, null, null, new google.maps.Size(22, 31));
47151            var marker = new google.maps.Marker({
47152                position: new google.maps.LatLng(options.latitude, options.longitude),
47153                icon: markerIcon,
47154                map: map
47155            });
47156        }
47157
47158
47159        var $map = $container.find('.map');
47160
47161        var map;
47162        var markerIcon;
47163
47164        var geocoder;
47165
47166        window.googleMapsInitFunctions.push(onMapsApiLoaded);
47167        window.loadGoogleMaps(options.apiKey);
47168    }
47169
47170    $.fn.afagMap = function(options) {
47171
47172        var opts = $.extend({}, $.fn.afagMap.defaults, options);
47173
47174        this.each(function() {
47175            new AfagMap($(this), $.extend({}, opts, $(this).data()));
47176        });
47177    };
47178
47179    var afagMapStyle = [
47180        {
47181            "featureType": "administrative.country",
47182            "elementType": "all",
47183            "stylers": [
47184                {"visibility": "off"},{"saturation": 52},{"lightness": 43},{"gamma": 9.99}]
47185        }, {
47186            "featureType": "water",
47187            "elementType": "all",
47188            "stylers": [{"visibility": "simplified"},{"hue": "#e9ebed"},{"saturation": -78},{"lightness": 67}]
47189        }, {
47190            "featureType": "landscape",
47191            "elementType": "all",
47192            "stylers": [{"visibility": "simplified"},{"hue": "#ffffff"},{"saturation": -100},{"lightness": 100}]
47193        }, {
47194            "featureType": "road",
47195            "elementType": "geometry",
47196            "stylers": [{"visibility": "simplified"}, {"hue": "#bbc0c4"}
47196, {"saturation": -93}, {"lightness": 31}]
47197        }, {
47198            "featureType": "poi",
47199            "elementType": "all",
47200            "stylers": [{"visibility": "off"}, {"hue": "#ffffff"}, {"saturation": -100}, {"lightness": 100}]
47201        }, {
47202            "featureType": "road.local",
47203            "elementType": "geometry",
47204            "stylers": [{"visibility": "simplified"}, {"hue": "#e9ebed"}, {"saturation": -90}, {"lightness": -8}]
47205        }, {
47206            "featureType": "administrative.locality",
47207            "elementType": "all",
47208            "stylers": [{"visibility": "on"}, {"hue": "#2c2e33"}, {"saturation": 7}, {"lightness": 19}]
47209        }, {
47210            "featureType": "road",
47211            "elementType": "labels",
47212            "stylers": [{"visibility": "on"}, {"hue": "#bbc0c4"}, {"saturation": -93}, {"lightness": 31}]
47213        }, {
47214            "featureType": "road.arterial",
47215            "elementType": "labels",
47216            "stylers": [{"visibility": "simplified"}, {"hue": "#bbc0c4"}, {"saturation": -93}, {"lightness": -2}]
47217        }, {
47218            "featureType": "transit.line",
47219            "elementType": "all",
47220            "stylers": [{"lightness": 67}]
47221        }, {
47222            "featureType": "transit",
47223            "elementType": "labels",
47224            "stylers": [{"weight": 1}, {"hue": "#ffffff"}, {"saturation": -100}, {"lightness": -5}]
47225        }];
47226
47227    $.fn.afagMap.defaults = {
47228        styles: afagMapStyle,
47229        markerUrl: null,
47230        apiKey: null,
47231        latitude: 59.9196829,
47232        longitude: 10.7280745
47233    };
47234}(jQuery));
47235
47236
47237function isValidBirthNumber(birthNumber) {
47238    function error(message) {
47239        console.log('Invalid birth number: ' + message);
47240    }
47241
47242    if (birthNumber.length !== 11) {
47243        error('Not 11 digits long');
47244        return false;
47245    }
47246
47247    if (!/^\d+$/.test(birthNumber)) {
47248        error('Does not contain digits only');
47249        return false;
47250    }
47251
47252    var day = birthNumber.substring(0, 2);
47253    var dayNumber = parseFloat(day);
47254    if (dayNumber > 31) {
47255        // D-numbers
47256        dayNumber = dayNumber - 40;
47257        if (dayNumber < 1) {
47258            error('[D-Number] Day [' + dayNumber + '] is less than 1');
47259            return false;
47260        }
47261
47262        if (dayNumber >= 10) {
47263            day = '' + dayNumber;
47264        } else {
47265            day = '0' + dayNumber;
47266        }
47267    }
47268
47269    var month = birthNumber.substring(2, 4);
47270    var year = birthNumber.substring(4, 6);
47271
47272    var fullDate = year + '-' + month + '-' + day;
47273    if (!moment(fullDate, 'YY-MM-DD').isValid()) {
47274        error('Invalid date: ' + fullDate);
47275        return false;
47276    }
47277
47278    var personNumber = birthNumber.substring(6, 11);
47279    if (personNumber === '00100' || personNumber === '00200') {
47280        return true;
47281    }
47282
47283    var d1 = parseInt(birthNumber.substring(0, 1));
47284    var d2 = parseInt(birthNumber.substring(1, 2));
47285    var m1 = parseInt(birthNumber.substring(2, 3));
47286    var m2 = parseInt(birthNumber.substring(3, 4));
47287    var y1 = parseInt(birthNumber.substring(4, 5));
47288    var y2 = parseInt(birthNumber.substring(5, 6));
47289    var i1 = parseInt(birthNumber.substring(6, 7));
47290    var i2 = parseInt(birthNumber.substring(7, 8));
47291    var i3 = parseInt(birthNumber.substring(8, 9));
47292
47293    var k1 = parseInt(birthNumber.substring(9, 10));
47294    var k2 = parseInt(birthNumber.substring(10, 11));
47295
47296    var controlValue1 = 11 - (((3 * d1) + (7 * d2) + (6 * m1) + m2 + (8 * y1) + (9 * y2) + (4 * i1) + (5 * i2) + (2 * i3)) % 11);
47297
47298    if (controlValue1 === 11) {
47299        controlValue1 = 0;
47300    }
47301
47302    if (k1 !== controlValue1) {
47303        error('Control 1 is wrong');
47304        return false;
47305    }
47306
47307    var controlValue2 = 11 - (((5 * d1) + (4 * d2) + (3 * m1) + (2 * m2) + (7 * y1) + (6 * y2) + (5 * i1) + (4 * i2) + (3 * i3) + (2 * controlValue1)) % 11);
47308
47309    if (controlValue2 === 11) {
47310        controlValue2 = 0;
47311    }
47312
47313    if (k2 !== controlValue2) {
47314        error('Control 2 is wrong');
47315        return false;
47316    }
47317
47318    return true;
47319}
47320
47321(function ($) {
47322    function Calendar($container, options) {
47323       
47324        var $calendar = $container.find('.calendar-datepicker');
47325
47326        $calendar.datepicker({
47327            changeYear: true,
47328            defaultDate:new Date(setDatePicker),
47329            monthNames: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "
47329November", "Desember"],
47330            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
47331            dayNames: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
47332            dayNamesMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
47333            dayNamesShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
47334            firstDay: 1,
47335            beforeShowDay: function( date ) {
47336                var dateCal = new Date(date);
47337                var highlight = eventDates[dateCal.toLocaleDateString()];
47338                if( highlight ) {
47339                     return [true, "has-event", ''];
47340                } else {
47341                     return [true, '', ''];
47342                }
47343            },
47344            onChangeMonthYear: function(year, month) {
47345                var selectedYear = new Date(year+"").getTime();
47346                var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime();
47347                $('#filter-year').val(selectedYear);
47348                $('#filter-month').val(selectedMonth);
47349                $('#filter-day').val('');
47350                $("#calendar-form").trigger('submit');
47351            },
47352            onSelect: function(dateText) {
47353                var date = $(this).datepicker('getDate'),
47354                    day  = date.getDate(),  
47355                    month = date.getMonth() + 1,              
47356                    year =  date.getFullYear();
47357
47358                var selectedYear = new Date(year+"").getTime();
47359                var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime();
47360                var selectedDay = new Date(1970,month-1,day,08,0,0).getTime();
47361                $('#filter-year').val(selectedYear);
47362                $('#filter-month').val(selectedMonth);
47363                $('#filter-day').val(selectedDay);
47364                $("#calendar-form").trigger('submit');
47365            }
47366        });
47367    }
47368
47369    $.fn.siteCalendarList = function(options) {
47370        console.log('siteCalendarList');
47371        var opts = $.extend({}, $.fn.siteCalendarList.defaults, options);
47372
47373        this.each(function() {
47374            
47375            new Calendar($(this), $.extend({}, opts, $(this).data()));
47376        });
47377    };
47378
47379    $.fn.siteCalendarList.defaults = {
47380    };
47381}(jQuery));
47382
47383
47384
47385(function ($) {
47386    function CalendarEvent($container, options) {
47387        function loadNewContent(url) {
47388            console.log('Loading new content: ', url);
47389
47390            enableLoading();
47391
47392            url = url.replace(/https?:\/\/[^/]+\//, '/');
47393
47394            $.ajax({
47395                method: 'get',
47396                url: url,
47397                cache: true
47398            }).done(function(html) {
47399                var windowUrl = window.location.href.replace(/https?:\/\/[^/]+\//, '/');
47400
47401                if (windowUrl !== url) {
47402                    var stateObj = { url: url };
47403                    history.pushState(stateObj, '', url);
47404                }
47405
47406                var $html = $(html);
47407                var $newListContainer = $html.find('.list-container');
47408
47409                $listContainer.replaceWith($newListContainer);
47410                $listContainer = $newListContainer;
47411
47412                pagesChanged($html.find('.page-navigation'));
47413
47414                disableLoading();
47415            });
47416        }
47417
47418        function onPageClick(e) {
47419            e.preventDefault();
47420
47421            var offsetTop = $filterWrapper.offset().top;
47422            var scrollTop = $(window).scrollTop();
47423            var windowHeight = $(window).height();
47424            var topIsVisible = offsetTop >= scrollTop && offsetTop < windowHeight;
47425
47426            if (!topIsVisible) {
47427                $(window).scrollTop($filterWrapper.offset().top);
47428            }
47429
47430            loadNewContent($(this).attr('href'));
47431        }
47432
47433        function pagesChanged($pageNavigation) {
47434            currentPage = parseInt($pageNavigation.attr('data-current-page'));
47435            lastPage = parseInt($pageNavigation.attr('data-last-page'));
47436            console.log('Current page is: ', currentPage);
47437        }
47438
47439        function enableLoading() {
47440            $container.addClass('loading');
47441            $filterWrapper.find(':input').prop('disabled', true);
47442            $filterWrapper.addClass('loading');
47443            $loading.addClass('active');
47444        }
47445
47446        function disableLoading() {
47447            $loading.removeClass('active');
47448            $filterWrapper.removeClass('loading');
47449            $filterWrapper.find(':input').prop('disabled', false);
47450            $container.removeClass('loading');
47451        }
47452
47453        function onFilterFormSubmit(e) {
47454            e.preventDefault();
47455            var url = $(this).attr('action');
47456            var data = $(this).serialize();
47457            var newUrl = url;
47458
47459            if (url.indexOf('?') === -1) {
47460                newUrl += '?' + data;
47461            } else {
47462                newUrl += '&' + data;
47463            }
47464
47465            loadNewContent(newUrl);
47466        }
47467
47468        function onSelectChange() {
47469            console.log('Select change: ' + $(this).attr('name'));
47470            $(this.form).trigger('submit');
47471        }
47472
47473        function onFormResetClick(e) {
47474            e.preventDefault();
47475            loadNewContent($(this).attr('href'));
47476        }
47477
47478        function onPopState(e) {
47479            if (e.state && e.state.url.length > 0) {
47480                loadNewContent(e.state.url);
47481            }
47482        }
47483
47484        var $window = $(window);
47485        var $listContainer = $container.find('.list-container');
47486        var $filterWrapper = $container.find('.filter-wrapper');
47487        var $calendarEvent = $container.find('.calendar-datepicker');
47488        var $loading = $('#global-loading');
47489
47490        var currentPage;
47491        var lastPage;
47492        pagesChanged($listContainer.find('.pagination'));
47493
47494        $calendarEvent.datepicker({
47495            changeYear: true,
47496            defaultDate:new Date(setDatePicker),
47497            monthNames: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "
47497November", "Desember"],
47498            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
47499            dayNames: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
47500            dayNamesMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
47501            dayNamesShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
47502            firstDay: 1,
47503            beforeShowDay: function( date ) {
47504                var dateCal = new Date(date);
47505                var highlight = eventDates[dateCal.toLocaleDateString()];
47506                if( highlight ) {
47507                     return [true, "has-event", ''];
47508                } else {
47509                     return [true, '', ''];
47510                }
47511            },
47512            onChangeMonthYear: function(year, month) {
47513                var selectedYear = new Date(year+"").getTime();
47514                var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime();
47515                $('#filter-year').val(selectedYear);
47516                $('#filter-month').val(selectedMonth);
47517                $('#filter-day').val('');
47518                $("#calendar-form").trigger('submit');
47519            },
47520            onSelect: function(dateText) {
47521                var date = $(this).datepicker('getDate'),
47522                    day  = date.getDate(),  
47523                    month = date.getMonth() + 1,              
47524                    year =  date.getFullYear();
47525
47526                var selectedYear = new Date(year+"").getTime();
47527                var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime();
47528                var selectedDay = new Date(1970,month-1,day,08,0,0).getTime();
47529                $('#filter-year').val(selectedYear);
47530                $('#filter-month').val(selectedMonth);
47531                $('#filter-day').val(selectedDay);
47532                $("#calendar-form").trigger('submit');
47533            }
47534        });
47535
47536
47537        $filterWrapper.on('submit', '.filter-form', onFilterFormSubmit);
47538        $filterWrapper.on('change', 'select', onSelectChange);
47539        $filterWrapper.on('click', '.form-reset', onFormResetClick);
47540        $container.on('click', '.pagination a', onPageClick);
47541        window.onpopstate = onPopState;
47542    }
47543
47544    $.fn.siteCalendarEventList = function(options) {
47545        var opts = $.extend({}, $.fn.siteCalendarEventList.defaults, options);
47546
47547        this.each(function() {
47548            
47549            new CalendarEvent($(this), $.extend({}, opts, $(this).data()));
47550        });
47551    };
47552
47553    $.fn.siteCalendarEventList.defaults = {
47554    };
47555}(jQuery));
47556
47557
47558
47559(function ($) {
47560    function FilterList($container, options) {
47561        function loadNewContent(url) {
47562            console.log('Loading new content: ', url);
47563
47564            enableLoading();
47565
47566            url = url.replace(/https?:\/\/[^/]+\//, '/');
47567
47568            $.ajax({
47569                method: 'get',
47570                url: url,
47571                cache: true
47572            }).done(function(html) {
47573                var windowUrl = window.location.href.replace(/https?:\/\/[^/]+\//, '/');
47574
47575                if (windowUrl !== url) {
47576                    var stateObj = { url: url };
47577                    history.pushState(stateObj, '', url);
47578                }
47579
47580                var $html = $(html);
47581                var $newListContainer = $html.find('.list-container');
47582
47583                $listContainer.replaceWith($newListContainer);
47584                $listContainer = $newListContainer;
47585
47586                $filterWrapper.html('').append($html.find('#filter-wrapper').find('.filter'));
47587                $filterWrapper.find('select').skStyleSelect();
47588
47589                pagesChanged($html.find('.page-navigation'));
47590
47591                disableLoading();
47592            });
47593        }
47594
47595        function onPageClick(e) {
47596            e.preventDefault();
47597
47598            var offsetTop = $filterWrapper.offset().top;
47599            var scrollTop = $(window).scrollTop();
47600            var windowHeight = $(window).height();
47601            var topIsVisible = offsetTop >= scrollTop && offsetTop < windowHeight;
47602
47603            if (!topIsVisible) {
47604                $(window).scrollTop($filterWrapper.offset().top);
47605            }
47606
47607            loadNewContent($(this).attr('href'));
47608        }
47609
47610        function pagesChanged($pageNavigation) {
47611            currentPage = parseInt($pageNavigation.attr('data-current-page'));
47612            lastPage = parseInt($pageNavigation.attr('data-last-page'));
47613            console.log('Current page is: ', currentPage);
47614        }
47615
47616        function enableLoading() {
47617            $container.addClass('loading');
47618            $filterWrapper.find(':input').prop('disabled', true);
47619            $filterWrapper.addClass('loading');
47620            $loading.addClass('active');
47621        }
47622
47623        function disableLoading() {
47624            $loading.removeClass('active');
47625            $filterWrapper.removeClass('loading');
47626            $filterWrapper.find(':input').prop('disabled', false);
47627            $container.removeClass('loading');
47628        }
47629
47630        function onFilterFormSubmit(e) {
47631            e.preventDefault();
47632
47633            var url = $(this).attr('action');
47634            var data = $(this).serialize();
47635            var newUrl = url;
47636
47637            if (url.indexOf('?') === -1) {
47638                newUrl += '?' + data;
47639            } else {
47640                newUrl += '&' + data;
47641            }
47642
47643            loadNewContent(newUrl);
47644        }
47645
47646        function onSelectChange() {
47647            console.log('Select change: ' + $(this).attr('name'));
47648            $(this.form).trigger('submit');
47649        }
47650
47651        function onFormResetClick(e) {
47652            e.preventDefault();
47653            loadNewContent($(this).attr('href'));
47654        }
47655
47656        function onPopState(e) {
47657            if (e.state && e.state.url.length > 0) {
47658                loadNewContent(e.state.url);
47659            }
47660        }
47661
47662        var $window = $(window);
47663        var $listContainer = $container.find('.list-container');
47664        var $filterWrapper = $container.find('.filter-wrapper');
47665        var $loading = $('#global-loading');
47666
47667        var currentPage;
47668        var lastPage;
47669
47670        pagesChanged($listContainer.find('.pagination'));
47671
47672        $filterWrapper.on('submit', '.filter-form', onFilterFormSubmit);
47673        $filterWrapper.on('change', 'select', onSelectChange);
47674        $filterWrapper.on('click', '.form-reset', onFormResetClick);
47675        $container.on('click', '.pagination a', onPageClick);
47676        window.onpopstate = onPopState;
47677    }
47678
47679    $.fn.siteFilterList = function(options) {
47680        var opts = $.extend({}, $.fn.siteFilterList.defaults, options);
47681
47682        this.each(function() {
47683            new FilterList($(this), $.extend({}, opts, $(this).data()));
47684        });
47685    };
47686
47687    $.fn.siteFilterList.defaults = {
47688    };
47689}(jQuery));
47690
47691
47692
47693(function ($) {
47694    window.googleMapsInitFunctions = [];
47695
47696    window.loadGoogleMaps = function(apiKey) {
47697        var scriptId = 'sk-google-maps-script';
47698        var $script = $('#' + scriptId);
47699        if ($script.length > 0) {
47700            console.log('Google Maps script element has already been created');
47701            return;
47702        }
47703
47704        var url = 'https://maps.googleapis.com/maps/api/js?key=' + apiKey + '&libraries=geometry,places&callback=skInitAllGoogleMaps';
47705        console.log('Creating Google Maps script element with url: ' + url);
47706        $script = $('<script/>')
47707            .prop('async', true)
47708            .prop('defer', true)
47709            .attr('src', url)
47710            .attr('id', scriptId)
47711            .appendTo($('body'));
47712    };
47713
47714    window.skInitAllGoogleMaps = function() {
47715        window.googleMapsInitialized = true;
47716
47717        google.maps.Map.prototype.setCenterWithOffset = function(latlng, offsetX, offsetY) {
47718            var map = this;
47719            var ov = new google.maps.OverlayView();
47720            ov.onAdd = function() {
47721                var proj = this.getProjection();
47722                var aPoint = proj.fromLatLngToContainerPixel(latlng);
47723                aPoint.x = aPoint.x+offsetX;
47724                aPoint.y = aPoint.y+offsetY;
47725                map.setCenter(proj.fromContainerPixelToLatLng(aPoint));
47726            };
47727            ov.draw = function() {};
47728            ov.setMap(this);
47729        };
47730
47731        $.each(window.googleMapsInitFunctions, function(index, callback) {
47732            callback();
47733        });
47734    };
47735
47736    function initSingleGoogleMap($map) {
47737        console.log('Initializing Google Map [' + $map.attr('id') + ']');
47738
47739        var styleString = $map.attr('data-map-style');
47740        var style = null;
47741        if (styleString.trim() !== '') {
47742            style = JSON.parse(styleString.trim());
47743        }
47744
47745
47746        var zoom = $map.attr('data-zoom') ? parseInt($map.attr('data-zoom')) : 16;
47747        var map = new google.maps.Map($map.get(0), {
47748            zoom: zoom,
47749            styles: style
47750        });
47751
47752        $map.removeClass('loading');
47753    }
47754
47755    $.fn.skGoogleMaps = function () {
47756        return this.each(function() {
47757            var $map = $(this);
47758            console.log('Creating Google Map initialization for element [#' + $map.attr('id') + ']');
47759
47760            window.googleMapsInitFunctions.push(function() {
47761                initSingleGoogleMap($map);
47762            });
47763
47764            window.loadGoogleMaps($map.attr('data-api-key'));
47765        });
47766    };
47767}(jQuery));
47768
47769(function ($) {
47770    function toggleLabelVisibility($input) {
47771        var $formGroup = $input.parents('.form-group');
47772
47773        if ($formGroup.length > 0) {
47774            var showLabel = $input.val() !== '' || $input.is(":focus");
47775            $formGroup.toggleClass('label-shown', showLabel);
47776
47777            if (showLabel) {
47778                $input.attr('placeholder', '');
47779            } else {
47780                $input.attr('placeholder', $input.attr('data-placeholder'));
47781            }
47782        }
47783    }
47784
47785    function updateStyledSelectBox($input) {
47786        var $formGroup = $input.parents('.form-group');
47787
47788        if ($formGroup.length > 0) {
47789            var showLabel = $input.val() !== '';
47790            $formGroup.toggleClass('label-shown', showLabel);
47791        }
47792    }
47793
47794    $.fn.labelPlaceholder = function(options) {
47795        this.each(function() {
47796            $(this).find('input').each(function() {
47797                $(this).attr('data-placeholder', $(this).attr('placeholder'));
47798                toggleLabelVisibility($(this));
47799            }).on('keyup focus blur change', function() {
47800                toggleLabelVisibility($(this));
47801            });
47802
47803            $(this).find('select').on('sk.style-select.updated', function() {
47804                updateStyledSelectBox($(this));
47805            });
47806        });
47807    };
47808}(jQuery));
47809
47810
47811function initMemberEditForm($form) {
47812    var formName = 'teha-site-member-edit-form';
47813    var idPrefix = formName + '-';
47814    var afagForm = new AfagForm($form, formName);
47815    var $validation = $form.data('formValidation');
47816    var $submitButton = $form.find('button[type=submit]');
47817    var $successMessage = $form.find('.success-message');
47818    var $isTillitsvalgt = $('#' + idPrefix + 'isTillitsvalgt');
47819    var $isTillitsvalgtVara = $('#' + idPrefix + 'isTillitsvalgtVara');
47820    var $hasTillitsvalgtopplaring = $('#' + idPrefix + 'hasTillitsvalgtopplaring');
47821
47822    var $memberShipType  = $('#' + idPrefix + 'membershipType');
47823
47824    $isTillitsvalgt.on('click', function() {
47825        uncheckCheckBox('isTillitsvalgtVara');
47826    });
47827
47828    $isTillitsvalgtVara.on('click', function() {
47829        uncheckCheckBox('isTillitsvalgt');
47830    });
47831
47832    $form
47833        .on('err.field.fv success.field.fv', function(e, data) {
47834        // Always enable submit button
47835        if (data.fv.getSubmitButton()) {
47836            data.fv.disableSubmitButtons(false);
47837        }
47838    }).on('success.form.fv', function(e) {
47839        e.preventDefault();
47840
47841        afagForm.submit($submitButton, '/_afag/member/edit-submit', function() {
47842            $successMessage.show();
47843            $form.find('.form-content').hide();
47844        });
47845    });
47846
47847    afagForm.addPhonePrefixValidator('prefixMobile');
47848    afagForm.addPhonePrefixValidator('prefixPhonePrivate');
47849    afagForm.addPhonePrefixValidator('prefixPhoneWork');
47850
47851    afagForm.addPhoneNumberValidator('mobile');
47852    afagForm.addPhoneNumberValidator('phonePrivate');
47853    afagForm.addPhoneNumberValidator('phoneWork');
47854
47855    afagForm.addGraduationYearValidator('graduationYear');
47856
47857    function uncheckCheckBox($ident) {
47858        if ($ident == 'isTillitsvalgt') {
47859            $isTillitsvalgt.prop('checked', false);
47860        }
47861
47862        if ($ident == 'isTillitsvalgtVara') {
47863            $isTillitsvalgtVara.prop('checked', false);
47864        }
47865
47866        if ($ident == 'hasTillitsvalgtopplaring') {
47867            $hasTillitsvalgtopplaring.prop('checked', false);
47868        }
47869    }
47870}
47871
47872function initMemberRegistrationForm($form) {
47873    function createSummaryRow(label, value) {
47874        label = label.replace(/\s*\*$/, '') + ':';
47875
47876        console.log('Creating summary row: ', label, value);
47877
47878        var $value = $('<div/>', { 'class': 'summary-label col-6 col-md-8 col-lg-8'});
47879        $value.text(value);
47880        var htmlValue = $value.html();
47881        $value.html(value.replace(/\n/g, '<br/>'));
47882
47883        return $('<div/>', { 'class': 'row summary-row' })
47884            .append($('<div/>', { 'class': 'summary-value col-6 col-md-4 col-lg-4'}).text(label))
47885            .append($value);
47886    }
47887
47888    function createSummaryRowByKey(key, label) {
47889        var id = idPrefix + key;
47890        var $input = $('#' + id);
47891        var value = $input.val();
47892        var $label = $input.parents('.form-group').find('label[for="' + id + '"]');
47893
47894        if (typeof label === 'undefined' && $label.length === 1) {
47895            label = $label.text();
47896        }
47897
47898        if (typeof label === 'undefined') {
47899            console.error('Could not find label for field #' + id);
47900        }
47901
47902        return createSummaryRow(label, value);
47903    }
47904
47905    function createSummaryRowByKeyAndValue(key, value) {
47906        var id = idPrefix + key;
47907        var $input = $('#' + id);
47908        var label;
47909
47910        var $label = $input.parents('.form-group').find('label[for="' + id + '"]');
47911
47912        if (typeof label === 'undefined' && $label.length === 1) {
47913            label = $label.text();
47914        }
47915
47916        if (typeof label === 'undefined') {
47917            console.error('Could not find label for field #' + id);
47918        }
47919
47920        return createSummaryRow(label, value);
47921    }
47922
47923    function createPhoneSummaryRow(key) {
47924        var id = idPrefix + key;
47925        var $input = $('#' + id);
47926        var $label = $input.parents('.form-group').find('label[for="' + id + '"]');
47927
47928        var prefixId = idPrefix + 'prefix' + key[0].toUpperCase() + key.substring(1);
47929        var $prefixInput = $('#' + prefixId);
47930
47931        var value = $prefixInput.val() + ' ' + $input.val();
47932
47933        return createSummaryRow($label.text(), value);
47934    }
47935
47936    function createDependantSummaryRow(key, otherValue) {
47937        var id = idPrefix + key;
47938        var $input = $('#' + id);
47939        var $label = $input.parents('.form-group').find('label[for="' + id + '"]');
47940        var value = $input.val();
47941
47942        if (value === otherValue) {
47943            var otherValueId = idPrefix + key + 'Other';
47944            var $otherValue = $('#' + otherValueId);
47945            value += ': ' + $otherValue.val();
47946        }
47947
47948        return createSummaryRow($label.text(), value);
47949    }
47950
47951    function createMultiCheckboxSummaryRow(key) {
47952        var $mainLabel = $form.find('label[for="' + idPrefix + key + '"]');
47953        var $formGroup = $mainLabel.parents('.form-group');
47954        var values = [];
47955
47956        $formGroup.find('.form-check').each(function() {
47957            var $formCheck = $(this);
47958            var $label = $formCheck.find('label');
47959            var $input = $formCheck.find('#' + $label.attr('for'));
47960
47961            if ($input.prop('checked')) {
47962                values.push($label.text().trim());
47963            }
47964        });
47965
47966        return createSummaryRow($mainLabel.text().trim(), values.join(', '));
47967    }
47968
47969
47970    function createSummaryHeader(label) {
47971        return $('<div/>', { 'class': 'summary-header' }).html(label);
47972    }
47973
47974    function updateFieldSummary() {
47975        $fieldSummary.html('');
47976
47977        $fieldSummary.append(createSummaryHeader('Om Meg'));
47978        $fieldSummary.append(createSummaryRowByKey('membershipType', 'Medlemskap'));
47979        $fieldSummary.append(createSummaryRowByKey('firstName'));
47980        $fieldSummary.append(createSummaryRowByKey('lastName'));
47981        $fieldSummary.append(createSummaryRowByKey('birthNumber'));
47982        $fieldSummary.append(createSummaryRowByKey('address'));
47983
47984        if ($country.val() === defaultCountry) {
47985            $fieldSummary.append(createSummaryRowByKey('zipCode'));
47986        }
47987        $fieldSummary.append(createSummaryRowByKey('country'));
47988
47989        $fieldSummary.append(createSummaryHeader('Kontaktinfo'));
47990        $fieldSummary.append(createPhoneSummaryRow('mobile'));
47991        $fieldSummary.append(createPhoneSummaryRow('phonePrivate'));
47992        $fieldSummary.append(createPhoneSummaryRow('phoneWork'));
47993        $fieldSummary.append(createSummaryRowByKey('email'));
47994
47995        if ($memberShipType.val() === employeeValue) {
47996            $fieldSummary.append(createSummaryHeader('Jobb'));
47997            $fieldSummary.append(createSummaryRowByKey('employer'));
47998
47999            if (!$nonNorwegianEmployer.prop('checked')) {
48000                $fieldSummary.append(createSummaryRowByKey('employerAddress'));
48001                $fieldSummary.append(createSummaryRowByKey('employerZipCode'));
48002            }
48003        }
48004
48005        $fieldSummary.append(createSummaryHeader('Utdanning'));
48006        $fieldSummary.append(createDependantSummaryRow('educationDegree', 'Annet'));
48007        $fieldSummary.append(createDependantSummaryRow('education', 'Annet'));
48008        $fieldSummary.append(createDependantSummaryRow('educationLocation', 'Annet'));
48009        $fieldSummary.append(createSummaryRowByKey('graduationYear'));
48010        
48011        if ($memberShipType.val() === differentApplicantValue) {
48012            $fieldSummary.append(createSummaryRowByKey('differentApplicantComment'));
48013        }
48014        if ($isTillitsvalgt.prop('checked')) {
48015            $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgt', 'Ja'));
48016        } else {
48017            $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgt','Nei'));
48018        }
48019        if ($isTillitsvalgtVara.prop('checked')) {
48020            $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgtVara','Ja'));
48021        } else {
48022            $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgtVara','Nei'));
48023        }
48024        if ($hasTillitsvalgtopplaring.prop('checked')) {
48025            $fieldSummary.append(createSummaryRowByKeyAndValue('hasTillitsvalgtopplaring','Ja'));
48026        } else {
48027            $fieldSummary.append(createSummaryRowByKeyAndValue('hasTillitsvalgtopplaring','Nei'));
48028        }
48029        $fieldSummary.append(createMultiCheckboxSummaryRow('memberOfOtherOrganizations'));
48030        
48031    }
48032
48033    function switchToStep2IfValid() {
48034        $validation.validateContainer($step1);
48035        var isValid = $validation.isValidContainer($step1);
48036        console.log('Step 1 valid? ', isValid);
48037
48038        if (!isValid) {
48039            var firstInvalidTop = $form.find('[data-fv-result=INVALID]:first').offset().top  - 120;
48040
48041            console.log('Scroll?', $(window).scrollTop(), $(window).height(), firstInvalidTop);
48042
48043            if (firstInvalidTop < $(window).scrollTop() || firstInvalidTop > $(window).height()) {
48044                scrollTo(firstInvalidTop);
48045            }
48046        } else {
48047            switchToStep2();
48048        }
48049    }
48050
48051    function switchToStep1() {
48052        $step1.show();
48053        $step2.hide();
48054        currentStep = 1;
48055        scrollTo($form.offset().top - 50);
48056    }
48057
48058    function switchToStep2() {
48059        updateFieldSummary();
48060        $step2.show();
48061        $step1.hide();
48062        currentStep = 2;
48063        scrollTo($form.offset().top - 50);
48064    }
48065
48066    function showSuccessMessage() {
48067        $step1.hide();
48068        $step2.hide();
48069        $successMessage.show();
48070    }
48071
48072    function updateCountryBasedFieldsDisplay() {
48073        if ($nonNorwegianResident.prop('checked')) {
48074            $country.val('').trigger('change');
48075            $country.parents('.display-container').show();
48076            $zipCode.val('').trigger('change');
48077            $zipCode.parents('.display-container').hide();
48078            $cityName.text('');
48079        } else {
48080            $country.val(defaultCountry).trigger('change');
48081            $country.parents('.display-container').hide();
48082            $zipCode.parents('.display-container').show();
48083        }
48084    }
48085
48086    function uncheckCheckBox($ident) {
48087        if ($ident == 'isTillitsvalgt') {
48088            $isTillitsvalgt.prop('checked', false);
48089        }
48090
48091        if ($ident == 'isTillitsvalgtVara') {
48092            $isTillitsvalgtVara.prop('checked', false);
48093        }
48094
48095        if ($ident == 'hasTillitsvalgtopplaring') {
48096            $hasTillitsvalgtopplaring.prop('checked', false);
48097        }
48098    }
48099
48100    function updateEmployeeCountryBasedFieldsDisplay() {
48101        console.log('update employee country based fields');
48102        if ($nonNorwegianEmployer.prop('checked')) {
48103            $zipCodeEmployer.val('').trigger('change');
48104            $zipCodeEmployer.parents('.display-container').hide();
48105            $cityNameEmployer.text('');
48106            $addressEmployer.val('').trigger('change');
48107            $addressEmployer.parents('.display-container').hide();
48108        } else {
48109            $zipCodeEmployer.parents('.display-container').show();
48110            $addressEmployer.parents('.display-container').show();
48111        }
48112    }
48113
48114    function scrollTo(px) {
48115        $('html, body').animate({
48116            scrollTop: px
48117        });
48118    }
48119
48120    function loadZipCodes() {
48121        $zipCode.prop('readonly', true);
48122
48123        var url = '/_Resources/Static/Packages/Teha.Site/ZipCodes/ZipCodes.json';
48124        console.log('Loading zip codes from:', url);
48125
48126        $.getJSON(url, function(result) {
48127            zipCodes = result;
48128
48129            $zipCode.prop('readonly', false);
48130
48131            updateNameCityFromZipCode($zipCode.val(), $cityName);
48132            updateNameCityFromZipCode($zipCodeEmployer.val(), $cityNameEmployer);
48133        });
48134    }
48135
48136    function updateNameCityFromZipCode(value, $cityName) {
48137        if (zipCodes === null || !zipCodes.hasOwnProperty(value)) {
48138            $cityName.text('');
48139            $cityName.parent().hide();
48140        }
48141
48142        var city = zipCodes[value];
48143        console.log('Found city [' + city + '] for zip code [' + value + ']');
48144        $cityName.text(city);
48145        $cityName.parent().show();
48146    }
48147
48148    var formName = 'teha-site-member-registration-form';
48149    var afagForm = new AfagForm($form, formName);
48150    var $validation = $form.data('formValidation');
48151    var $step1 = $form.find('.wizard-step[data-step=1]');
48152    var $step2 = $form.find('.wizard-step[data-step=2]');
48153    var $nextButton = $form.find('#next-button');
48154    var $prevButton = $form.find('#prev-button');
48155    var $fieldSummary = $form.find('.field-summary');
48156    var $successMessage = $form.find('#success-message');
48157    var $submitButton = $form.find('button[type="submit"]');
48158    var idPrefix = formName + '-';
48159    var $nonNorwegianResident = $('#' + idPrefix + 'nonNorwegianResident');
48160    var $nonNorwegianEmployer = $('#' + idPrefix + 'nonNorwegianEmployer');
48161    var $isTillitsvalgt = $('#' + idPrefix + 'isTillitsvalgt');
48162    var $isTillitsvalgtVara = $('#' + idPrefix + 'isTillitsvalgtVara');
48163    var $hasTillitsvalgtopplaring = $('#' + idPrefix + 'hasTillitsvalgtopplaring');
48164    var $educationDegree = $('#' + idPrefix + 'educationDegree');
48165    var $memberShipType  = $('#' + idPrefix + 'membershipType');
48166    var $zipCode = $('#' + idPrefix + 'zipCode');
48167    var $country = $('#' + idPrefix + 'country');
48168    var $cityName = $('#city-name');
48169    var $zipCodeEmployer = $('#' + idPrefix + 'employerZipCode');
48170    var $addressEmployer = $('#' + idPrefix + 'employerAddress');
48171    var $cityNameEmployer = $('#city-name-employer');
48172    var currentStep = 1;
48173    var defaultCountry = 'Norge';
48174    var differentApplicantValue = 'Særskilt søker';
48175    var employeeValue = 'Ansatt';
48176    var studentValue = 'Student';
48177    var zipCodes = null;
48178    var fv = $form.data('formValidation');
48179
48180    loadZipCodes();
48181
48182    $zipCode
48183        .attr('maxlength', 4)
48184        .attr('pattern', '\\d*')
48185    ;
48186    $zipCodeEmployer
48187        .attr('maxlength', 4)
48188        .attr('pattern', '\\d*')
48189    ;
48190
48191    $('#' + idPrefix + 'birthNumber').attr('pattern', '\\d*');
48192
48193    window.createDummyData = function() {
48194        var dummyData = {
48195            'membershipType': 'Pensjonist',
48196            'differentApplicantComment': "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat vehicula tempus. Morbi posuere justo tortor, eget interdum eros egestas a. Fusce laoreet arcu ac neque tincidunt, in posuere dolor varius. Phasellus sed volutpat dui. Nunc aliquam ornare leo sit amet tristique. Proin tristique lacinia ullamcorper. Donec augue est, malesuada nec lobortis eget, ultrices ut tortor.\nAenean tempor luctus ullamcorper. Quisque porttitor fermentum eros non fringilla.\nMorbi ac erat non velit blandit ultrices a id urna.\n\nInteger tempor tortor vel magna posuere gravida.",
48197            'firstName': 'Marina',
48198            'lastName': 'Testhødi-Schmidt',
48199            'birthNumber': '12128800200',
48200            'address': 'Some street 123',
48201            'zipCode': '0308',
48202            'email': '[email protected]',
48203            'prefixMobile': '+47',
48204            'mobile': '666777888',
48205            'prefixPhoneWork': '+46',
48206            'phoneWork': '222111',
48207            'prefixPhonePrivate': '+49',
48208            'phonePrivate': '444555',
48209            'educationDegree': 'Master',
48210            'education': 'Arkitektur',
48211            'educationLocation': 'Annet',
48212            'educationLocationOther': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
48213            'graduationYear': '2011',
48214            'memberOfOtherOrganizations-option-0': true,
48215            'memberOfOtherOrganizations-option-2': true
48216        };
48217
48218        $.each(dummyData, function(key, value) {
48219            var selector = '#' + idPrefix + key;
48220            console.log(selector, value);
48221            if (value === true) {
48222                $(selector).prop('checked', true);
48223            } else {
48224                $(selector).val(value).trigger('change');
48225            }
48226        });
48227
48228        $form.find('select').skStyleSelect('updateLabel');
48229    };
48230
48231    if (window.location.href.match(/[?&]createDummyData/)) {
48232        createDummyData();
48233
48234        if (window.location.href.match(/[?&]switchToStep2/)) {
48235            $nextButton.trigger('click');
48236        }
48237    }
48238
48239    afagForm.toggleDisplayBasedOfValue($educationDegree, $('#' + idPrefix + 'educationDegreeOther'), 'Annet');
48240    afagForm.toggleDisplayBasedOfValue($educationDegree, $('#different-applicant-fields'), differentApplicantValue);
48241    afagForm.toggleDisplayBasedOfValue($('#' + idPrefix + 'education'), $('#' + idPrefix + 'educationOther'), 'Annet');
48242    afagForm.toggleDisplayBasedOfValue($('#' + idPrefix + 'educationLocation'), $('#' + idPrefix + 'educationLocationOther'), 'Annet');
48243    afagForm.toggleDisplayBasedOfValue($memberShipType, $('#employer-fields'), employee
48243Value);
48244    afagForm.toggleDisplayBasedOfValue($memberShipType, $('#employee-union-representative'), employeeValue);
48245    afagForm.toggleDisplayBasedOfValue($memberShipType, $('#insurance-field'), studentValue);
48246
48247    $nextButton.on('click', function() {
48248        switchToStep2IfValid();
48249    });
48250
48251    $prevButton.on('click', function() {
48252        switchToStep1();
48253    });
48254
48255    $nonNorwegianResident.on('click', function() {
48256        updateCountryBasedFieldsDisplay();
48257    });
48258    updateCountryBasedFieldsDisplay();
48259
48260    $nonNorwegianEmployer.on('click', function() {
48261        updateEmployeeCountryBasedFieldsDisplay();
48262    });
48263    updateEmployeeCountryBasedFieldsDisplay();
48264
48265    $isTillitsvalgt.on('click', function() {
48266        uncheckCheckBox('isTillitsvalgtVara');
48267		updateTrainingCourseDisplay();
48268    });
48269
48270    $isTillitsvalgtVara.on('click', function() {
48271        uncheckCheckBox('isTillitsvalgt');
48272		updateTrainingCourseDisplay();
48273    });
48274
48275    $form.on('submit', function(e) {
48276        if (currentStep === 1) {
48277            e.preventDefault();
48278            switchToStep2IfValid();
48279        }
48280    }).on('err.field.fv success.field.fv', function(e, data) {
48281        // Always enable submit button
48282        if (data.fv.getSubmitButton()) {
48283			grecaptcha.reset();
48284            data.fv.disableSubmitButtons(false);
48285        }
48286    }).on('success.form.fv', function(e) {
48287        e.preventDefault();
48288
48289		window.memberFormSubmit = function(token) {
48290			disableSubmitButtons(true);
48291			afagForm.submit($submitButton, '/_afag/member/registration-submit', function() {
48292				showSuccessMessage();
48293			});
48294		};
48295		
48296		grecaptcha.execute();
48297		disableSubmitButtons(false);
48298    });
48299
48300    afagForm.addValidators('birthNumber', {
48301        callback: {
48302            callback: function(value, validator, $field) {
48303                if (value === '') {
48304                    // The NotEmptyValidator will handle this case
48305                    return true;
48306                }
48307
48308                var normalizedValue = value.replace(/\s/g, '');
48309                if (normalizedValue !== value) {
48310                    $field.val(normalizedValue);
48311                }
48312
48313                return isValidBirthNumber(normalizedValue);
48314            },
48315            message: 'Ugyldig Fødselsnummer'
48316        }
48317    });
48318
48319
48320
48321	function updateTrainingCourseDisplay() {
48322		if ($isTillitsvalgt.prop('checked') || $isTillitsvalgtVara.prop('checked')) {
48323			$('#training-course').show();
48324		} else {
48325			uncheckCheckBox('hasTillitsvalgtopplaring');
48326			$('#training-course').hide();
48327		}
48328	}
48329
48330	function disableSubmitButtons(disabled) {
48331		var selector = '[type="submit"]:not([formnovalidate])';
48332		var buttonDisabled = 'disabled';
48333		if (!disabled) {
48334			$form
48335				.find(selector)
48336					.removeAttr('disabled')
48337					.removeClass(buttonDisabled);
48338		} else {
48339			// Don't disable if the live validating mode is disabled
48340			$form
48341				.find(selector)
48342					.attr('disabled', 'disabled')
48343					.addClass(buttonDisabled);
48344		}
48345	}
48346
48347    function validateZipCode(value, validator, $field) {
48348        var $cityName = $field.parents('.zip-container').find('.city');
48349        $cityName.text('');
48350
48351        if (value === '') {
48352            // The NotEmptyValidator will handle this case
48353            return true;
48354        }
48355
48356        if (('' + value).match(/^\d{4}$/) === null) {
48357            fv.updateMessage($field, 'callback', 'Oppgi korrekt postnummer, fire siffer.');
48358            return false;
48359        }
48360
48361        console.log('Looking up city for zip code [' + value + ']');
48362
48363        if (zipCodes === null || !zipCodes.hasOwnProperty(value)) {
48364            fv.updateMessage($field, 'callback', 'Ukjent postnummer');
48365            return false;
48366        }
48367
48368        updateNameCityFromZipCode(value, $cityName);
48369
48370        return true;
48371    }
48372
48373    afagForm.addValidators('zipCode', {
48374        callback: {
48375            callback: validateZipCode
48376        }
48377    });
48378    afagForm.addValidators('employerZipCode', {
48379        callback: {
48380            callback: validateZipCode
48381        }
48382    });
48383
48384    afagForm.addPhonePrefixValidator('prefixMobile');
48385    afagForm.addPhonePrefixValidator('prefixPhonePrivate');
48386    afagForm.addPhonePrefixValidator('prefixPhoneWork');
48387
48388    afagForm.addPhoneNumberValidator('mobile');
48389    afagForm.addPhoneNumberValidator('phonePrivate');
48390    afagForm.addPhoneNumberValidator('phoneWork');
48391
48392    afagForm.addGraduationYearValidator('graduationYear');
48393}
48394
48395/*!
48396 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com
48397 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
48398 */
48399(function () {
48400'use strict';
48401
48402var _WINDOW = {};
48403try {
48404  if (typeof window !== 'undefined') _WINDOW = window;
48405
48406} catch (e) {}
48407
48408var _ref = _WINDOW.navigator || {};
48409var _ref$userAgent = _ref.userAgent;
48410var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent;
48411
48412var WINDOW = _WINDOW;
48413
48414
48415
48416
48417
48418var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
48419
48420var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
48421
48422
48423
48424
48425
48426
48427
48428
48429
48430var PRODUCTION = function () {
48431  try {
48432    return "production" === 'production';
48433  } catch (e) {
48434    return false;
48435  }
48436}();
48437
48438var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
48439var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
48440
48441
48442
48443var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {
48444  return n + 'x';
48445})).concat(oneToTwenty.map(function (n) {
48446  return 'w-' + n;
48447}));
48448
48449function bunker(fn) {
48450  try {
48451    fn();
48452  } catch (e) {
48453    if (!PRODUCTION) {
48454      throw e;
48455    }
48456  }
48457}
48458
48459var w = WINDOW || {};
48460
48461if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
48462if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
48463if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
48464if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
48465
48466var namespace = w[NAMESPACE_IDENTIFIER];
48467
48468var _extends = Object.assign || function (target) {
48469  for (var i = 1; i < arguments.length; i++) {
48470    var source = arguments[i];
48471
48472    for (var key in source) {
48473      if (Object.prototype.hasOwnProperty.call(source, key)) {
48474        target[key] = source[key];
48475      }
48476    }
48477  }
48478
48479  return target;
48480};
48481
48482function define(prefix, icons) {
48483  var normalized = Object.keys(icons).reduce(function (acc, iconName) {
48484    var icon = icons[iconName];
48485    var expanded = !!icon.icon;
48486
48487    if (expanded) {
48488      acc[icon.iconName] = icon.icon;
48489    } else {
48490      acc[iconName] = icon;
48491    }
48492    return acc;
48493  }, {});
48494
48495  if (typeof namespace.hooks.addPack === 'function') {
48496    namespace.hooks.addPack(prefix, normalized);
48497  } else {
48498    namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized);
48499  }
48500
48501  /**
48502   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction
48503   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias
48504   * for `fas` so we'll easy the upgrade process for our users by automatically defining
48505   * this as well.
48506   */
48507  if (prefix === 'fas') {
48508    define('fa', icons);
48509  }
48510}
48511
48512var icons = {
48513  "address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"],
48514  "address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"],
48515  "adjust": [512, 512, [], "f042", "M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z"],
48516  "air-freshener": [384, 512, [], "f5d0", "M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z"],
48517  "align-center": [448, 512, [], "f037", "M352 44v40c0 8.837-7.163 16-16 16H112c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h224c8.837 0 16 7.163 16 16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm320-200H112c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z"],
48518  "align-justify": [448, 512, [], "f039", "M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm16 144h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0-128h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],
48519  "align-left": [448, 512, [], "f036", "M288 44v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16zM0 172v40c0 8.837 7.163 16 16 16h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16zm16 312h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm256-200H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z"],
48520  "align-right": [448, 512, [], "f038", "M160 84V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H176c-8.837 0-16-7.163-16-16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],
48521  "allergies": [448, 512, [], "f461", "M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"],
48522  "ambulance": [640, 512, [], "f0f9", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"],
48523  "american-sign-language-interpreting": [640, 512, [], "f2a3", "M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z"],
48524  "anchor": [576, 512, [], "f13d", "M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z"],
48525  "angle-double-down": [320, 512, [], "f103", "M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"],
48526  "angle-double-left": [448, 512, [], "f100", "M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"],
48527  "angle-double-right": [448, 512, [], "f101", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"],
48528  "angle-double-up": [320, 512, [], "f102", "M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"],
48529  "angle-down": [320, 512, [], "f107", "M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"],
48530  "angle-left": [256, 512, [], "f104", "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"],
48531  "angle-right": [256, 512, [], "f105", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"],
48532  "angle-up": [320, 512, [], "f106", "M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"],
48533  "angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z"],
48534  "apple-alt": [448, 512, [], "f5d1", "M351.18 129.15c-35.53-6.25-98.06 14.36-127.18 30.81-29.12-16.45-91.66-37.07-127.19-30.81-81.24 14.3-107.42 124.49-93.09 205.6C18.05 415.86 65.02 512 160.41 512c12.06 0 24.12-4.61 34.44-10.34 18.08-10.03 40.23-10.03 58.31 0 10.32 5.73 22.38 10.34 34.43 10.34 95.39 0 142.36-96.14 156.68-177.25 14.33-81.11-11.83-191.3-93.09-205.6zm-55.55-41.53C326.19 57.06 319.35.65 319.35.65s-56.41-6.85-86.97 23.72c-30.57 30.57-23.72 86.97-23.72 86.97s56.4 6.85 86.97-23.72z"],
48535  "archive": [512, 512, [], "f187", "M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"],
48536  "archway": [576, 512, [], "f557", "M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"],
48537  "arrow-alt-circle-down": [512, 512, [], "f358", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"],
48538  "arrow-alt-circle-left": [512, 512, [], "f359", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"],
48539  "arrow-alt-circle-right": [512, 512, [], "f35a", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"],
48540  "arrow-alt-circle-up": [512, 512, [], "f35b", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"],
48541  "arrow-circle-down": [512, 512, [], "f0ab", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4
48541-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"],
48542  "arrow-circle-left": [512, 512, [], "f0a8", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"],
48543  "arrow-circle-right": [512, 512, [], "f0a9", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"],
48544  "arrow-circle-up": [512, 512, [], "f0aa", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"],
48545  "arrow-down": [448, 512, [], "f063", "M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"],
48546  "arrow-left": [448, 512, [], "f060", "M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"],
48547  "arrow-right": [448, 512, [], "f061", "M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"],
48548  "arrow-up": [448, 512, [], "f062", "M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"],
48549  "arrows-alt": [512, 512, [], "f0b2", "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"],
48550  "arrows-alt-h": [512, 512, [], "f337", "M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"],
48551  "arrows-alt-v": [256, 512, [], "f338", "M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"],
48552  "assistive-listening-systems": [512, 512, [], "f2a2", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z"],
48553  "asterisk": [512, 512, [], "f069", "M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"],
48554  "at": [512, 512, [], "f1fa", "M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184
48554S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"],
48555  "atlas": [448, 512, [], "f558", "M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z"],
48556  "atom": [448, 512, [], "f5d2", "M413.03 256c40.13-54.89 41.51-98.62 25.14-128-10.91-19.52-40.54-50.73-116.33-41.88C300.36 34.89 267.64 0 224 0s-76.36 34.89-97.84 86.12C50.43 77.34 20.73 108.48 9.83 128c-16.38 29.4-15 73.09 25.14 128-40.13 54.89-41.51 98.62-25.14 128 29.21 52.34 101.68 43.58 116.33 41.88C147.63 477.1 180.36 512 224 512s76.37-34.9 97.84-86.12c14.64 1.7 87.11 10.46 116.33-41.88 16.38-29.4 15-73.09-25.14-128zM63.38 352c-4.03-7.21-.19-24.8 14.95-48.29 6.96 6.53 14.2 12.89 21.87 19.18 1.71 13.71 4 27.08 6.76 40.08-24.56.89-39.89-4.37-43.58-10.97zm36.82-162.88c-7.66 6.29-14.9 12.65-21.87 19.18-15.13-23.5-18.97-41.09-14.95-48.3 3.41-6.14 16.39-11.47 37.92-11.47 1.71 0 3.87.3 5.69.37a472.191 472.191 0 0 0-6.79 40.22zM224 64c9.47 0 22.2 13.52 33.86 37.26-11.19 3.7-22.44 8-33.86 12.86-11.42-4.86-22.67-9.16-33.86-12.86C201.8 77.52 214.53 64 224 64zm0 384c-9.47 0-22.2-13.52-33.86-37.26 11.19-3.7 22.44-8 33.86-12.86 11.42 4.86 22.67 9.16 33.86 12.86C246.2 434.48 233.47 448 224 448zm62.5-157.33c-26.7 19.08-46.14 29.33-62.5 37.48-16.35-8.14-35.8-18.41-62.5-37.48-1.99-27.79-1.99-41.54 0-69.33 26.67-19.05 46.13-29.32 62.5-37.48 16.39 8.17 35.86 18.44 62.5 37.48 1.98 27.78 1.99 41.53 0 69.33zM384.62 352c-3.67 6.62-19 11.82-43.58 10.95 2.76-13 5.05-26.37 6.76-40.06 7.66-6.29 14.9-12.65 21.87-19.18 15.13 23.49 18.97 41.08 14.95 48.29zm-14.95-143.71c-6.96-6.53-14.2-12.89-21.87-19.18a473.535 473.535 0 0 0-6.79-40.22c1.82-.07 3.97-.37 5.69-.37 21.52 0 34.51 5.34 37.92 11.47 4.02 7.22.18 24.81-14.95 48.3zM224 224c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"],
48557  "audio-description": [512, 512, [], "f29e", "M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z"],
48558  "award": [384, 512, [], "f559", "M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.
4855817-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z"],
48559  "backspace": [640, 512, [], "f55a", "M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z"],
48560  "backward": [512, 512, [], "f04a", "M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"],
48561  "balance-scale": [640, 512, [], "f24e", "M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"],
48562  "ban": [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"],
48563  "band-aid": [640, 512, [], "f462", "M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z"],
48564  "barcode": [512, 512, [], "f02a", "M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z"],
48565  "bars": [448, 512, [], "f0c9", "M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],
48566  "baseball-ball": [496, 512, [], "f433", "M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z"],
48567  "basketball-ball": [496, 512, [], "f434", "M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 3
485676-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z"],
48568  "bath": [512, 512, [], "f2cd", "M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"],
48569  "battery-empty": [640, 512, [], "f244", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"],
48570  "battery-full": [640, 512, [], "f240", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"],
48571  "battery-half": [640, 512, [], "f242", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"],
48572  "battery-quarter": [640, 512, [], "f243", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"],
48573  "battery-three-quarters": [640, 512, [], "f241", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"],
48574  "bed": [640, 512, [], "f236", "M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z"],
48575  "beer": [448, 512, [], "f0fc", "M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z"],
48576  "bell": [448, 512, [], "f0f3", "M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"],
48577  "bell-slash": [640, 512, [], "f1f6", "M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"],
48578  "bezier-curve": [640, 512, [], "f55b", "M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"],
48579  "bicycle": [640, 512, [], "f206", "M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 5
485797.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z"],
48580  "binoculars": [512, 512, [], "f1e5", "M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z"],
48581  "birthday-cake": [448, 512, [], "f1fd", "M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z"],
48582  "blender": [512, 512, [], "f517", "M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"],
48583  "blind": [384, 512, [], "f29d", "M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z"],
48584  "bold": [384, 512, [], "f032", "M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z"],
48585  "bolt": [320, 512, [], "f0e7", "M295.973 160H180.572L215.19 30.184C219.25 14.956 207.756 0 192 0H56C43.971 0 33.8 8.905 32.211 20.828l-31.996 240C-1.704 275.217 9.504 288 24.004 288h118.701L96.646 482.466C93.05 497.649 104.659 512 119.992 512c8.35 0 16.376-4.374 20.778-11.978l175.973-303.997c9.244-15.967-2.288-36.025-20.77-36.025z"],
48586  "bomb": [512, 512, [], "f1e2", "M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-
485867.2 16-16z"],
48587  "bone": [640, 512, [], "f5d7", "M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z"],
48588  "bong": [448, 512, [], "f55c", "M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z"],
48589  "book": [448, 512, [], "f02d", "M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"],
48590  "book-open": [576, 512, [], "f518", "M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"],
48591  "book-reader": [512, 512, [], "f5da", "M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z"],
48592  "bookmark": [384, 512, [], "f02e", "M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"],
48593  "bowling-ball": [496, 512, [], "f436", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48594  "box": [512, 512, [], "f466", "M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"],
48595  "box-open": [640, 512, [], "f49e", "M53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9zm585.1 102.8L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9z"],
48596  "boxes": [576, 512, [], "f468", "M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"],
48597  "braille": [640, 512, [], "f2a1", "M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"],
48598  "brain": [576, 512, [], "f5dc", "M208 0c-29.87 0-54.74 20.55-61.8 48.22-.75-.02-1.45-.22-2.2-.22-35.34 0-64 28.65-64 64 0 4.84.64 9.51 1.66 14.04C52.54 138 32 
48598166.57 32 200c0 12.58 3.16 24.32 8.34 34.91C16.34 248.72 0 274.33 0 304c0 33.34 20.42 61.88 49.42 73.89-.9 4.57-1.42 9.28-1.42 14.11 0 39.76 32.23 72 72 72 4.12 0 8.1-.55 12.03-1.21C141.61 491.31 168.25 512 200 512c39.77 0 72-32.24 72-72V205.45c-10.91 8.98-23.98 15.45-38.36 18.39-4.97 1.02-9.64-2.82-9.64-7.89v-16.18c0-3.57 2.35-6.78 5.8-7.66 24.2-6.16 42.2-27.95 42.2-54.04V64c0-35.35-28.66-64-64-64zm368 304c0-29.67-16.34-55.28-40.34-69.09 5.17-10.59 8.34-22.33 8.34-34.91 0-33.43-20.54-62-49.66-73.96 1.02-4.53 1.66-9.2 1.66-14.04 0-35.35-28.66-64-64-64-.75 0-1.45.2-2.2.22C422.74 20.55 397.87 0 368 0c-35.34 0-64 28.65-64 64v74.07c0 26.09 17.99 47.88 42.2 54.04 3.46.88 5.8 4.09 5.8 7.66v16.18c0 5.07-4.68 8.91-9.64 7.89-14.38-2.94-27.44-9.41-38.36-18.39V440c0 39.76 32.23 72 72 72 31.75 0 58.39-20.69 67.97-49.21 3.93.67 7.91 1.21 12.03 1.21 39.77 0 72-32.24 72-72 0-4.83-.52-9.54-1.42-14.11 29-12.01 49.42-40.55 49.42-73.89z"],
48599  "briefcase": [512, 512, [], "f0b1", "M320 288h192v144c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V288h192v20c0 6.627 5.373 12 12 12h104c6.627 0 12-5.373 12-12v-20zm192-112v80H0v-80c0-26.51 21.49-48 48-48h80V80c0-26.51 21.49-48 48-48h160c26.51 0 48 21.49 48 48v48h80c26.51 0 48 21.49 48 48zM320 96H192v32h128V96z"],
48600  "briefcase-medical": [512, 512, [], "f469", "M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z"],
48601  "broadcast-tower": [640, 512, [], "f519", "M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z"],
48602  "broom": [512, 512, [], "f51a", "M10.8 247.2C-.7 251.8-3.7 266.7 5 275.4l54.8 54.8 73.2-24.4-24.4 73.2 128 128c8.8 8.8 23.6 5.7 28.2-5.8l98.1-243.7-108.4-108.4-243.7 98.1zM507.3 27.3L484.7 4.7c-6.2-6.3-16.4-6.3-22.6 0L359.8 106.9l-40.4-40.4c-4.2-4.3-11.4-3-13.9 2.5l-27.2 58.6 106.1 106.1 58.6-27.2c5.4-2.5 6.7-9.7 2.5-13.9l-40.4-40.4L507.3 49.9c6.3-6.2 6.3-16.3 0-22.6z"],
48603  "brush": [384, 512, [], "f55d", "M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z"],
48604  "bug": [512, 512, [], "f188", "M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z"],
48605  "building": [448, 512, [], "f1ad", "M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.
48605627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z"],
48606  "bullhorn": [576, 512, [], "f0a1", "M576 224c0-20.896-13.36-38.666-32-45.258V64c0-35.346-28.654-64-64-64-64.985 56-142.031 128-272 128H48c-26.51 0-48 21.49-48 48v96c0 26.51 21.49 48 48 48h43.263c-18.742 64.65 2.479 116.379 18.814 167.44 1.702 5.32 5.203 9.893 9.922 12.88 20.78 13.155 68.355 15.657 93.773 5.151 16.046-6.633 19.96-27.423 7.522-39.537-18.508-18.026-30.136-36.91-19.795-60.858a12.278 12.278 0 0 0-1.045-11.673c-16.309-24.679-3.581-62.107 28.517-72.752C346.403 327.887 418.591 395.081 480 448c35.346 0 64-28.654 64-64V269.258c18.64-6.592 32-24.362 32-45.258zm-96 139.855c-54.609-44.979-125.033-92.94-224-104.982v-69.747c98.967-12.042 169.391-60.002 224-104.982v279.711z"],
48607  "bullseye": [512, 512, [], "f140", "M256 72c101.689 0 184 82.295 184 184 0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-101.689 82.295-184 184-184m0-64C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 184c35.29 0 64 28.71 64 64s-28.71 64-64 64-64-28.71-64-64 28.71-64 64-64m0-64c-70.692 0-128 57.308-128 128s57.308 128 128 128 128-57.308 128-128-57.308-128-128-128z"],
48608  "burn": [384, 512, [], "f46a", "M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z"],
48609  "bus": [512, 512, [], "f207", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48610  "bus-alt": [512, 512, [], "f55e", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48611  "calculator": [448, 512, [], "f1ec", "M0 464V48C0 21.49 21.49 0 48 0h352c26.51 0 48 21.49 48 48v416c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm384-284V76c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v104c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12zM128 308v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm256 128V268c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-256 0v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm128-128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm0 128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"],
48612  "calendar": [448, 512, [], "f133", "M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z"],
48613  "calendar-alt": [448, 512, [], "f073", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm116 204c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40z"],
48614  "calendar-check": [448, 512, [], "f274", "M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l
48614-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z"],
48615  "calendar-minus": [448, 512, [], "f272", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z"],
48616  "calendar-plus": [448, 512, [], "f271", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z"],
48617  "calendar-times": [448, 512, [], "f273", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z"],
48618  "camera": [512, 512, [], "f030", "M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"],
48619  "camera-retro": [512, 512, [], "f083", "M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z"],
48620  "cannabis": [512, 512, [], "f55f", "M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z"],
48621  "capsules": [576, 512, [], "f46b", "M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 
48621112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z"],
48622  "car": [512, 512, [], "f1b9", "M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"],
48623  "car-alt": [480, 512, [], "f5de", "M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"],
48624  "car-battery": [512, 512, [], "f5df", "M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z"],
48625  "car-crash": [640, 512, [], "f5e1", "M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z"],
48626  "car-side": [640, 512, [], "f5e4", "M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"],
48627  "caret-down": [320, 512, [], "f0d7", "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"],
48628  "caret-left": [192, 512, [], "f0d9", "M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"],
48629  "caret-right": [192, 512, [], "f0da", "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284
48629L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"],
48630  "caret-square-down": [448, 512, [], "f150", "M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z"],
48631  "caret-square-left": [448, 512, [], "f191", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z"],
48632  "caret-square-right": [448, 512, [], "f152", "M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z"],
48633  "caret-square-up": [448, 512, [], "f151", "M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z"],
48634  "caret-up": [320, 512, [], "f0d8", "M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"],
48635  "cart-arrow-down": [576, 512, [], "f218", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z"],
48636  "cart-plus": [576, 512, [], "f217", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z"],
48637  "certificate": [512, 512, [], "f0a3", "M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z"],
48638  "chalkboard": [640, 512, [], "f51b", "M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"],
48639  "chalkboard-teacher": [640, 512, [], "f51c", "M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z"],
48640  "charging-station": [576, 512, [], "f5e7", "M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"],
48641  "chart-area": [512, 512, [], "f1fe", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.
486416 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"],
48642  "chart-bar": [512, 512, [], "f080", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zm-308-44v-72c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V204c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V108c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"],
48643  "chart-line": [512, 512, [], "f201", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM456 96H344c-21.4 0-32.1 25.9-17 41l32.9 32.9-72 72.9-55.6-55.6c-4.7-4.7-12.2-4.7-16.9 0L96.4 305c-4.7 4.6-4.8 12.2-.2 16.9l28.5 29.4c4.7 4.8 12.4 4.9 17.1.1l82.1-82.1 55.5 55.5c4.7 4.7 12.3 4.7 17 0l109.2-109.2L439 249c15.1 15.1 41 4.4 41-17V120c0-13.3-10.7-24-24-24z"],
48644  "chart-pie": [576, 512, [], "f200", "M288 12.3V240h227.7c6.9 0 12.3-5.8 12-12.7-6.4-122.4-104.5-220.6-227-227-6.9-.3-12.7 5.1-12.7 12zM552.7 288c6.9 0 12.3 5.8 12 12.7-2.8 53.2-23.2 105.6-61.2 147.8-4.6 5.1-12.6 5.4-17.5.5L325 288h227.7zM401 433c4.8 4.8 4.7 12.8-.4 17.3-42.6 38.4-99 61.7-160.8 61.7C107.6 511.9-.2 403.8 0 271.5.2 143.4 100.8 38.9 227.3 32.3c6.9-.4 12.7 5.1 12.7 12V272l161 161z"],
48645  "check": [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"],
48646  "check-circle": [512, 512, [], "f058", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"],
48647  "check-double": [512, 512, [], "f560", "M504.5 171.95l-36.2-36.41c-10-10.05-26.21-10.05-36.2 0L192 377.02 79.9 264.28c-10-10.06-26.21-10.06-36.2 0L7.5 300.69c-10 10.05-10 26.36 0 36.41l166.4 167.36c10 10.06 26.21 10.06 36.2 0l294.4-296.09c10-10.06 10-26.36 0-36.42zM166.57 282.71c6.84 7.02 18.18 7.02 25.21.18L403.85 72.62c7.02-6.84 7.02-18.18.18-25.21L362.08 5.29c-6.84-7.02-18.18-7.02-25.21-.18L179.71 161.19l-68.23-68.77c-6.84-7.02-18.18-7.02-25.2-.18l-42.13 41.77c-7.02 6.84-7.02 18.18-.18 25.2l122.6 123.5z"],
48648  "check-square": [448, 512, [], "f14a", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z"],
48649  "chess": [512, 512, [], "f439", "M199.821 217.633a6 6 0 0 1 6 6l-.001 20.766a6 6 0 0 1-6 6h-25.805c0 31.715-2.153 96.201 17.398 153.229H64.597C84.54 345.452 82.02 279.245 82.02 250.399H56.183a6 6 0 0 1-6-6l.002-20.766a6 6 0 0 1 6-6h143.636zM41.554 115.088l34.58 95.071h103.734l34.572-95.072c2.846-7.826-2.95-16.101-11.278-16.101H152v-30.22h21.57a6 6 0 0 0 6-6V40.383a6 6 0 0 0-6-6h-28.367V6a6 6 0 0 0-6-6H116.82a6 6 0 0 0-6 6v28.383H82.421a6 6 0 0 0-6 6v22.383a6 6 0 0 0 6 6H104v30.219H52.831c-8.328.001-14.124 8.276-11.277 16.103zM222.678 445.17v-28.067a6 6 0 0 0-6-6H39.322a6 6 0 0 0-6 6v28.067l-22.148 14.164a6 6 0 0 0-2.767 5.055V506a6 6 0 0 0 6 6h227.187a6 6 0 0 0 6-6v-41.612a6 6 0 0 0-2.767-5.055l-22.149-14.163zm90.578-144.225l24.88 16.963c.09 18.124-.167 63.904-11.905 114.522h147.526c-11.713-50.475-11.969-96.324-11.882-114.537l24.859-16.949a3.856 3.856 0 0 0 1.684-3.187v-69.901a3.857 3.857 0 0 0-3.857-3.857h-27.655a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.858-3.857h-52.918a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.857-3.857H315.43a3.857 3.857 0 0 0-3.857 3.857v69.901a3.855 3.855 0 0 0 1.683 3.188zm71.585 51.906c0-8.372 6.787-15.158 15.159-15.158s15.158 6.787 15.158 15.158v30.318h-30.317v-30.318zM504.62 470.059l-13.664-10.639v-15.552a3.857 3.857 0 0 0-3.857-3.857H312.915a3.857 3.857 0 0 0-3.857 3.857v15.552l-13.677 10.639a3.857 3.857 0 0 0-1.488 3.044v35.039a3.857 3.857 0 0 0 3.857 3.857h204.5a3.857 3.857 0 0 0 3.857-3.857v-35.04a3.859 3.859 0 0 0-1.487-3.043z"],
48650  "chess-bishop": [320, 512, [], "f43a", "M123.158 77.881C107.369 72.53 96 57.597 96 40c0-22.091 17.909-40 40-40h47.796c22.091 0 40 17.909 40 40 0 17.541-11.295 32.434-27.005 37.829 23.993 16.657 48.577 46.839 68.703 82.05L144.929 280.443a6 6 0 0 0 0 8.485l14.142 14.142a6 6 0 0 0 8.485 0L280.9 189.726c17.758 38.297 29.371 79.443 29.371 114.273 0 53.786-22.897 75.788-58.446 86.033V448H68.174v-57.97C32.631 379.784 9.739 357.781 9.739 304c0-78.029 58.281-187.766 113.419-226.119zM320 500v-24c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12z"],
48651  "chess-board": [512, 512, [], "f43c", "M256 256v64h-64v-64h64zm0-256h-64v64h64V0zm0 256h64v-64h-64v64zM384 0h-64v64h64V0zm0 512h64v-64h-64v64zm128-64v-64h-64v64h64zm-384 64h64v-64h-64v64zm0-512H64v64h64V0zm384 192v-64h-64v64h64zm0 128v-64h-64v64h64zM0 512h64v-64H0v64zM0 64v64h64V64H0zm0 128v64h64v-64H0zm0 128v64h64v-64H0zm256 192h64v-64h-64v64zm-64-128v64h64v-64h-64zm64-192v-64h-64v64h64zM64 384v64h64v-64H64zm64-128H64v64h64v-64zm256 128h64v-64h-64v64zM512 0h-64v64h64V0zM384 256h64v-64h-64v64zm0-192v64h64V64h-64zm-64 320v64h64v-64h-64zm-192-64v64h64v-64h-64zm128 0v64h64v-64h-64zm-64-128h-64v64h64v-64zm-64-64H64v64h64v-64zm192 192h64v-64h-64v64zM192 128V64h-64v64h64zm128 0V64h-64v64h64zm0 64h64v-64h-64v64z"],
48652  "chess-king": [448, 512, [], "f43f", "M416 476v24c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12zm-8.033-324H248v-48h50a6 6 0 0 0 6-6V62a6 6 0 0 0-6-6h-50V6a6 6 0 0 0-6-6h-36a6 6 0 0 0-6 6v50h-50a6 6 0 0 0-6 6v36a6 6 0 0 0 6 6h50v48H40.033
48652c-27.574 0-46.879 27.244-37.738 53.259L87.582 448h272.836l85.287-242.741C454.846 179.244 435.541 152 407.967 152z"],
48653  "chess-knight": [384, 512, [], "f441", "M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"],
48654  "chess-pawn": [320, 512, [], "f443", "M264 448H56s60-42.743 60-176H84c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h40.209C95.721 210.56 76 181.588 76 148c0-46.392 37.608-84 84-84s84 37.608 84 84c0 33.588-19.721 62.56-48.209 76H236c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12h-32c0 133.257 60 176 60 176zm28 16H28c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h264c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12z"],
48655  "chess-queen": [512, 512, [], "f445", "M436 512H76c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12zM255.579 0c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zm204.568 154.634c-5.768-3.045-12.916-.932-16.082 4.77-8.616 15.516-22.747 37.801-44.065 37.801-28.714 0-30.625-19.804-31.686-57.542-.183-6.492-5.501-11.664-11.995-11.664h-41.006c-5.175 0-9.754 3.328-11.388 8.238-8.89 26.709-26.073 40.992-47.925 40.992s-39.034-14.283-47.925-40.992c-1.634-4.91-6.213-8.238-11.388-8.238h-41.005c-6.495 0-11.813 5.174-11.995 11.667-1.052 37.642-2.934 57.539-31.688 57.539-20.691 0-33.817-20.224-44.425-38.025-3.266-5.48-10.258-7.431-15.899-4.453l-39.179 20.679a12 12 0 0 0-5.51 15.145L112 448h288l105.014-257.448a12 12 0 0 0-5.51-15.145l-39.357-20.773z"],
48656  "chess-rook": [384, 512, [], "f447", "M81.241 215.027C80.957 258.92 77.411 348.076 48 448h287.982c-29.4-99.604-32.936-188.912-33.221-232.975l45.418-42.312a11.998 11.998 0 0 0 3.82-8.78V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v44h-48V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v44H96V44c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v119.932c0 3.33 1.384 6.51 3.82 8.78l45.421 42.315zM160 256c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v64.004h-64V256zm224 220v24c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12z"],
48657  "chevron-circle-down": [512, 512, [], "f13a", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z"],
48658  "chevron-circle-left": [512, 512, [], "f137", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z"],
48659  "chevron-circle-right": [512, 512, [], "f138", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z"],
48660  "chevron-circle-up": [512, 512, [], "f139", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z"],
48661  "chevron-down": [448, 512, [], "f078", "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"],
48662  "chevron-left": [320, 512, [], "f053", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"],
48663  "chevron-right": [320, 512, [], "f054", "M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522
48663-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"],
48664  "chevron-up": [448, 512, [], "f077", "M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z"],
48665  "child": [384, 512, [], "f1ae", "M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z"],
48666  "church": [640, 512, [], "f51d", "M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z"],
48667  "circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"],
48668  "circle-notch": [512, 512, [], "f1ce", "M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z"],
48669  "clipboard": [384, 512, [], "f328", "M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"],
48670  "clipboard-check": [384, 512, [], "f46c", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"],
48671  "clipboard-list": [384, 512, [], "f46d", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"],
48672  "clock": [512, 512, [], "f017", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z"],
48673  "clone": [512, 512, [], "f24d", "M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z"],
48674  "closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z"],
48675  "cloud": [640, 512, [], "f0c2", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"],
48676  "cloud-download-alt": [640, 512, [], "f381", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z"],
48677  "cloud-upload-alt": [640, 512, [], "f382", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z"],
48678  "cocktail": [576, 512, [], "f561", "M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z"],
48679  "code": [640, 512, [], "f121", "M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"],
48680  "code-branch": [384, 512, [], "f126", "M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"],
48681  "coffee": [640, 512, [], "f0f4", "M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z"],
48682  "cog": [512, 512, [], "f013", "M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],
48683  "cogs": [640, 512, [], "f085", "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"],
48684  "coins": [512, 512, [], "f51e", "M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z"],
48685  "columns": [512, 512, [], "f0db", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"],
48686  "comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z"],
48687  "comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"],
48688  "comment-dots": [512, 512, [], "f4ad", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48689  "comment-slash": [640, 512, [], "f4b3", "M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"],
48690  "comments": [576, 512, [], "f086", "M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z"],
48691  "compact-disc": [496, 512, [], "f51f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
48692  "compass": [496, 512, [], "f14e", "M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z"],
48693  "compress": [448, 512, [], "f066", "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm
486930 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"],
48694  "concierge-bell": [512, 512, [], "f562", "M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"],
48695  "cookie": [512, 512, [], "f563", "M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48696  "cookie-bite": [512, 512, [], "f564", "M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48697  "copy": [448, 512, [], "f0c5", "M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"],
48698  "copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.95
486987 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z"],
48699  "couch": [640, 512, [], "f4b8", "M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"],
48700  "credit-card": [576, 512, [], "f09d", "M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"],
48701  "crop": [512, 512, [], "f125", "M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"],
48702  "crop-alt": [512, 512, [], "f565", "M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z"],
48703  "crosshairs": [512, 512, [], "f05b", "M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z"],
48704  "crow": [640, 512, [], "f520", "M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"],
48705  "crown": [640, 512, [], "f521", "M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z"],
48706  "cube": [512, 512, [], "f1b2", "M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"],
48707  "cubes": [512, 512, [], "f1b3", "M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"],
48708  "cut": [448, 512, [], "f0c4", "M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"],
48709  "database": [448, 512, [], "f1c0", "M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"],
48710  "deaf": [512, 512, [], "f2a4", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z"],
48711  "desktop": [576, 512, [], "f108", "M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"],
48712  "diagnoses": [640, 512, [], "f470", "M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"],
48713  "dice": [640, 512, [], "f522", "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"],
48714  "dice-five": [448, 512, [], "f523", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48715  "dice-four": [448, 512, [], "f524", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48716  "dice-one": [448, 512, [], "f525", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48717  "dice-six": [448, 512, [], "f526", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48718  "dice-three": [448, 512, [], "f527", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48719  "dice-two": [448, 512, [], "f528", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48720  "digital-tachograph": [640, 512, [], "f566", "M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z"],
48721  "directions": [512, 512, [], "f5eb", "M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z"],
48722  "divide": [448, 512, [], "f529", "M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"],
48723  "dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z"],
48724  "dna": [448, 512, [], "f471", "M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z"],
48725  "dollar-sign": [288, 512, [], "f155", "M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 
487251.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z"],
48726  "dolly": [576, 512, [], "f472", "M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],
48727  "dolly-flatbed": [640, 512, [], "f474", "M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"],
48728  "donate": [512, 512, [], "f4b9", "M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z"],
48729  "door-closed": [640, 512, [], "f52a", "M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z"],
48730  "door-open": [640, 512, [], "f52b", "M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"],
48731  "dot-circle": [512, 512, [], "f192", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z"],
48732  "dove": [512, 512, [], "f4ba", "M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"],
48733  "download": [512, 512, [], "f019", "M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"],
48734  "drafting-compass": [512, 512, [], "f568", "M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.
4873463 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"],
48735  "draw-polygon": [448, 512, [], "f5ee", "M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z"],
48736  "drum": [576, 512, [], "f569", "M458.08 120.88l102.39-61.43c15.16-9.09 20.06-28.75 10.97-43.91C562.34.39 542.7-4.53 527.53 4.57l-160.69 96.41A629.32 629.32 0 0 0 288 96C128.94 96 0 153.31 0 224v160.83c0 30.46 24.03 58.4 64 80.37v-96.37c0-17.6 14.4-32 32-32s32 14.4 32 32v122.41c37.4 11.13 81 18.44 128 20.75V400.84c0-17.6 14.4-32 32-32s32 14.4 32 32V512c47-2.31 90.6-9.62 128-20.75V368.84c0-17.6 14.4-32 32-32s32 14.4 32 32v96.37c39.97-21.97 64-49.91 64-80.37V224.01c-.01-42.38-46.54-79.84-117.92-103.13zM288 304c-132.55 0-240-35.82-240-80s107.45-80 240-80c2.34 0 4.62.1 6.94.12l-87.41 52.44c-15.16 9.09-20.06 28.75-10.97 43.91 9.56 15.93 29.51 19.61 43.91 10.97l162.71-97.62C477.55 167.41 528 193.74 528 224.01 528 268.19 420.54 304 288 304z"],
48737  "drum-steelpan": [576, 512, [], "f56a", "M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z"],
48738  "dumbbell": [640, 512, [], "f44b", "M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"],
48739  "edit": [576, 512, [], "f044", "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"],
48740  "eject": [448, 512, [], "f052", "M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z"],
48741  "ellipsis-h": [512, 512, [], "f141", "M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"],
48742  "ellipsis-v": [192, 512, [], "f142", "M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"],
48743  "envelope": [512, 512, [], "f0e0", "M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.
487436-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"],
48744  "envelope-open": [512, 512, [], "f2b6", "M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z"],
48745  "envelope-square": [448, 512, [], "f199", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"],
48746  "equals": [448, 512, [], "f52c", "M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"],
48747  "eraser": [512, 512, [], "f12d", "M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z"],
48748  "euro-sign": [320, 512, [], "f153", "M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z"],
48749  "exchange-alt": [512, 512, [], "f362", "M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"],
48750  "exclamation": [192, 512, [], "f12a", "M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"],
48751  "exclamation-circle": [512, 512, [], "f06a", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418
48751-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],
48752  "exclamation-triangle": [576, 512, [], "f071", "M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],
48753  "expand": [448, 512, [], "f065", "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"],
48754  "expand-arrows-alt": [448, 512, [], "f31e", "M448.1 344v112c0 13.3-10.7 24-24 24h-112c-21.4 0-32.1-25.9-17-41l36.2-36.2L224 295.6 116.8 402.9 153 439c15.1 15.1 4.4 41-17 41H24c-13.3 0-24-10.7-24-24V344c0-21.4 25.9-32.1 41-17l36.2 36.2L184.5 256 77.2 148.7 41 185c-15.1 15.1-41 4.4-41-17V56c0-13.3 10.7-24 24-24h112c21.4 0 32.1 25.9 17 41l-36.2 36.2L224 216.4l107.3-107.3L295.1 73c-15.1-15.1-4.4-41 17-41h112c13.3 0 24 10.7 24 24v112c0 21.4-25.9 32.1-41 17l-36.2-36.2L263.6 256l107.3 107.3 36.2-36.2c15.1-15.2 41-4.5 41 16.9z"],
48755  "external-link-alt": [576, 512, [], "f35d", "M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z"],
48756  "external-link-square-alt": [448, 512, [], "f360", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z"],
48757  "eye": [576, 512, [], "f06e", "M569.354 231.631C512.969 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-75.162 0-136-60.827-136-136 0-75.162 60.826-136 136-136 75.162 0 136 60.826 136 136 0 75.162-60.826 136-136 136zm104-136c0 57.438-46.562 104-104 104s-104-46.562-104-104c0-17.708 4.431-34.379 12.236-48.973l-.001.032c0 23.651 19.173 42.823 42.824 42.823s42.824-19.173 42.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621 156.431 270.292 152 288 152c57.438 0 104 46.562 104 104z"],
48758  "eye-dropper": [512, 512, [], "f1fb", "M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z"],
48759  "eye-slash": [576, 512, [], "f070", "M286.693 391.984l32.579 46.542A333.958 333.958 0 0 1 288 440C168.19 440 63.031 376.051 6.646 280.369a47.999 47.999 0 0 1 0-48.739c24.023-40.766 56.913-75.775 96.024-102.537l57.077 81.539C154.736 224.82 152 240.087 152 256c0 74.736 60.135 135.282 134.693 135.984zm282.661-111.615c-31.667 53.737-
4875978.747 97.46-135.175 125.475l.011.015 41.47 59.2c7.6 10.86 4.96 25.82-5.9 33.42l-13.11 9.18c-10.86 7.6-25.82 4.96-33.42-5.9L100.34 46.94c-7.6-10.86-4.96-25.82 5.9-33.42l13.11-9.18c10.86-7.6 25.82-4.96 33.42 5.9l51.038 72.617C230.68 75.776 258.905 72 288 72c119.81 0 224.969 63.949 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM424 256c0-75.174-60.838-136-136-136-17.939 0-35.056 3.473-50.729 9.772l19.299 27.058c25.869-8.171 55.044-6.163 80.4 7.41h-.03c-23.65 0-42.82 19.17-42.82 42.82 0 23.626 19.147 42.82 42.82 42.82 23.65 0 42.82-19.17 42.82-42.82v-.03c18.462 34.49 16.312 77.914-8.25 110.95v.01l19.314 27.061C411.496 321.2 424 290.074 424 256zM262.014 356.727l-77.53-110.757c-5.014 52.387 29.314 98.354 77.53 110.757z"],
48760  "fast-backward": [512, 512, [], "f049", "M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z"],
48761  "fast-forward": [512, 512, [], "f050", "M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z"],
48762  "fax": [512, 512, [], "f1ac", "M128 144v320c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V144c0-26.51 21.49-48 48-48h32c26.51 0 48 21.49 48 48zm384 64v256c0 26.51-21.49 48-48 48H192c-26.51 0-48-21.49-48-48V40c0-22.091 17.909-40 40-40h207.432a39.996 39.996 0 0 1 28.284 11.716l48.569 48.569A39.999 39.999 0 0 1 480 88.568v74.174c18.641 6.591 32 24.36 32 45.258zm-320-16h240V96h-24c-13.203 0-24-10.797-24-24V48H192v144zm96 204c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm128 128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40z"],
48763  "feather": [512, 512, [], "f52d", "M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.5
487637-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z"],
48764  "feather-alt": [512, 512, [], "f56b", "M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"],
48765  "female": [256, 512, [], "f182", "M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z"],
48766  "fighter-jet": [640, 512, [], "f0fb", "M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z"],
48767  "file": [384, 512, [], "f15b", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48768  "file-alt": [384, 512, [], "f15c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48769  "file-archive": [384, 512, [], "f1c6", "M224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32V32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6zm32.7-53c0 14.9-14.5 27-32.4 27S96 378 96 363c0-14.9 14.5-27 32.4-27s32.5 12.1 32.5 27zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48770  "file-audio": [384, 512, [], "f1c7", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48771  "file-code": [384, 512, [], "f1c9", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z"],
48772  "file-contract": [384, 512, [], "f56c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"],
48773  "file-download": [384, 512, [], "f56d", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"],
48774  "file-excel": [384, 512, [], "f1c3", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48775  "file-export": [576, 512, [], "f56e", "M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zM192 336v-32c0-8.84 7.16-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.84 0-16-7.16-16-16zm379.05-28.02l-95.7-96.43c-10.06-10.14-27.36-3.01-27.36 11.27V288H384v64h63.99v65.18c0 14.28 17.29 21.41 27.36 11.27l95.7-96.42c6.6-6.66 6.6-17.4 0-24.05z"],
48776  "file-image": [384, 512, [], "f1c5", "M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z"],
48777  "file-import": [512, 512, [], "f56f", "M16 288c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h112v-64H16zm336-152V0H152c-13.3 0-24 10.7-24 24v264h127.99v-65.18c0-14.28 17.29-21.41 27.36-11.27l95.7 96.43c6.6 6.65 6.6 17.39 0 24.04l-95.7 96.42c-10.06 10.14-27.36 3.01-27.36-11.27V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24zm153-31L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"],
48778  "file-invoice": [384, 512, [], "f570", "M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z"],
48779  "file-invoice-dollar": [384, 512, [], "f571", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44
48779-42.67 45.07z"],
48780  "file-medical": [384, 512, [], "f477", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z"],
48781  "file-medical-alt": [448, 512, [], "f478", "M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"],
48782  "file-pdf": [384, 512, [], "f1c1", "M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"],
48783  "file-powerpoint": [384, 512, [], "f1c4", "M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z"],
48784  "file-prescription": [384, 512, [], "f572", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48785  "file-signature": [576, 512, [], "f573", "M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z"],
48786  "file-upload": [384, 512, [], "f574", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"],
48787  "file-video": [384, 512, [], "f1c8", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z"],
48788  "file-word": [384, 512, [], "f1c2", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],
48789  "fill": [512, 512, [], "f575", "M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z"],
48790  "fill-drip": [576, 512, [], "f576", "M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z"],
48791  "film": [512, 512, [], "f008", "M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"],
48792  "filter": [512, 512, [], "f0b0", "M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"],
48793  "fingerprint": [512, 512, [], "f577", "M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 
48793134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"],
48794  "fire": [384, 512, [], "f06d", "M216 23.858c0-23.802-30.653-32.765-44.149-13.038C48 191.851 224 200 224 288c0 35.629-29.114 64.458-64.85 63.994C123.98 351.538 96 322.22 96 287.046v-85.51c0-21.703-26.471-32.225-41.432-16.504C27.801 213.158 0 261.332 0 320c0 105.869 86.131 192 192 192s192-86.131 192-192c0-170.29-168-193.003-168-296.142z"],
48795  "fire-extinguisher": [448, 512, [], "f134", "M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"],
48796  "first-aid": [576, 512, [], "f479", "M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],
48797  "fish": [576, 512, [], "f578", "M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"],
48798  "flag": [512, 512, [], "f024", "M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"],
48799  "flag-checkered": [512, 512, [], "f11e", "M466.515 66.928C487.731 57.074 512 72.551 512 95.944v243.1c0 10.526-5.161 20.407-13.843 26.358-35.837 24.564-74.335 40.858-122.505 40.858-67.373 0-111.63-34.783-165.217-34.783-50.853 0-86.124 10.058-114.435 22.122V488c0 13.255-10.745 24-24 24H56c-13.255 0-24-10.745-24-24V101.945C17.497 91.825 8 75.026 8 56 8 24.296 34.345-1.254 66.338.048c28.468 1.158 51.779 23.968 53.551 52.404.52 8.342-.81 16.31-3.586 23.562C137.039 68.384 159.393 64 184.348 64c67.373 0 111.63 34.783 165.217 34.783 40.496 0 82.612-15.906 116.95-31.855zM96 134.63v70.49c29-10.67 51.18-17.83 73.6-20.91v-71.57c-23.5 2.17-40.44 9.79-73.6 21.99zm220.8 9.19c-26.417-4.672-49.886-13.979-73.6-21.34v67.42c24.175 6.706 47.566 16.444 73.6 22.31v-68.39zm-147.2 40.39v70.04c32.796-2.978 53.91-.635 73.6 3.8V189.9c-25.247-7.035-46.581-9.423-73.6-5.69zm73.6 142.23c26.338 4.652 49.732 13.927 73.6 21.34v-67.41c-24.277-6.746-47.54-16.45-73.6-22.32v68.39zM96 342.1c23.62-8.39 47.79-13.84 73.6-16.56v-71.29c-26.11 2.35-47.36 8.04-73.6 17.36v70.49zm368-221.6c-21.3 8.85-46.59 17.64-73.6 22.47v71.91c27.31-4.36 50.03-14.1 73.6-23.89V120.5zm0 209.96v-70.49c-22.19 14.2-48.78 22.61-73.6 26.02v71.58c25.07-2.38 48.49-11.04 73.6-27.11zM316.8 212.21v68.16c25.664 7.134 46.616 9.342 73.6 5.62v-71.11c-25.999 4.187-49.943 2.676-73.6-2.67z"],
48800  "flask": [448, 512, [], "f0c3", "M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"],
48801  "flushed": [496, 512, [], "f579", "M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z"],
48802  "folder": [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"],
48803  "folder-open": [576, 512, [], "f07c", "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"],
48804  "font": [448, 512, [], "f031", "M152 416h-24.013l26.586-80.782H292.8L319.386 416H296c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-26.739L275.495 42.746A16 16 0 0 0 260.382 32h-72.766a16 16 0 0 0-15.113 10.746L42.739 416H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm64.353-271.778c4.348-15.216 6.61-28.156 7.586-34.644.839 6.521 2.939 19.476 7.727 34.706l41.335 124.006h-98.619l41.971-124.068z"],
48805  "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 7
488057.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"],
48806  "football-ball": [496, 512, [], "f44e", "M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z"],
48807  "forward": [512, 512, [], "f04e", "M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"],
48808  "frog": [576, 512, [], "f52e", "M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"],
48809  "frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z"],
48810  "frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48811  "futbol": [512, 512, [], "f1e3", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 11
488117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z"],
48812  "gamepad": [640, 512, [], "f11b", "M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],
48813  "gas-pump": [512, 512, [], "f52f", "M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-
4881371.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z"],
48814  "gavel": [512, 512, [], "f0e3", "M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"],
48815  "gem": [576, 512, [], "f3a5", "M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z"],
48816  "genderless": [288, 512, [], "f22d", "M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z"],
48817  "gift": [512, 512, [], "f06b", "M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm448-288h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40zm-72 320h160c17.7 0 32-14.3 32-32V320H288v160z"],
48818  "glass-martini": [512, 512, [], "f000", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z"],
48819  "glass-martini-alt": [512, 512, [], "f57b", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z"],
48820  "glasses": [576, 512, [], "f530", "M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z"],
48821  "globe": [496, 512, [], "f0ac", "M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"],
48822  "globe-africa": [496, 512, [], "f57c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z"],
48823  "globe-americas": [496, 512, [], "f57d", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z"],
48824  "globe-asia": [496, 512, [], "f57e", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 
488240-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z"],
48825  "golf-ball": [416, 512, [], "f450", "M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z"],
48826  "graduation-cap": [640, 512, [], "f19d", "M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z"],
48827  "greater-than": [384, 512, [], "f531", "M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z"],
48828  "greater-than-equal": [448, 512, [], "f532", "M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"],
48829  "grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z"],
48830  "grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"],
48831  "grin-alt": [496, 512, [], "f581", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"],
48832  "grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"],
48833  "grin-beam-sweat": [504, 512, [], "f583", "M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"],
48834  "grin-hearts": [496, 512, [], "f584", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z"],
48835  "grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"],
48836  "grin-squint-tears": [512, 512, [], "f586", "M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z"],
48837  "grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z"],
48838  "grin-tears": [640, 512, [], "f588", "M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"],
48839  "grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"],
48840  "grin-tongue-squint": [496, 512, [], "f58a", "M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z"],
48841  "grin-tongue-wink": [496, 512, [], "f58b", "M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"],
48842  "grin-wink": [496, 512, [], "f58c", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z"],
48843  "grip-horizontal": [448, 512, [], "f58d", "M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"],
48844  "grip-vertical": [320, 512, [], "f58e", "M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"],
48845  "h-square": [448, 512, [], "f0fd", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z"],
48846  "hand-holding": [576, 512, [], "f4bd", "M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"],
48847  "hand-holding-heart": [576, 512, [], "f4be", "M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"],
48848  "hand-holding-usd": [544, 512, [], "f4c0", "M257.6 144.3l50 14.3c3.6 1 6.1 4.4 6.1 8.1 0 4.6-3.8 8.4-8.4 8.4h-32.8c-3.6 0-7.1-.8-10.3-2.2-4.8-2.2-10.4-1.7-14.1 2l-17.5 17.5c-5.3 5.3-4.7 14.3 1.5 18.4 9.5 6.3 20.3 10.1 31.8 11.5V240c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16v-1
488487.6c30.3-3.6 53.3-31 49.3-63-2.9-23-20.7-41.3-42.9-47.7l-50-14.3c-3.6-1-6.1-4.4-6.1-8.1 0-4.6 3.8-8.4 8.4-8.4h32.8c3.6 0 7.1.8 10.3 2.2 4.8 2.2 10.4 1.7 14.1-2l17.5-17.5c5.3-5.3 4.7-14.3-1.5-18.4-9.5-6.3-20.3-10.1-31.8-11.5V16c0-8.8-7.2-16-16-16h-16c-8.8 0-16 7.2-16 16v17.6c-30.3 3.6-53.3 31-49.3 63 2.9 23 20.7 41.3 42.9 47.7zm276.3 183.8c-11.2-10.7-28.5-10-40.3 0L406.4 402c-10.7 9.1-24 14-37.8 14H256.9c-8.3 0-15.1-7.2-15.1-16s6.8-16 15.1-16h73.9c15.1 0 29-10.9 31.4-26.6 3.1-20-11.5-37.4-29.8-37.4H181.3c-25.5 0-50.2 9.3-69.9 26.3L67.5 384H15.1C6.8 384 0 391.2 0 400v96c0 8.8 6.8 16 15.1 16H352c13.7 0 27-4.9 37.8-14l142.8-121c14.4-12.1 15.5-35.3 1.3-48.9z"],
48849  "hand-lizard": [576, 512, [], "f258", "M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z"],
48850  "hand-paper": [448, 512, [], "f256", "M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"],
48851  "hand-peace": [448, 512, [], "f25b", "M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z"],
48852  "hand-point-down": [384, 512, [], "f0a7", "M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"],
48853  "hand-point-left": [512, 512, [], "f0a5", "M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z"],
48854  "hand-point-right": [512, 512, [], "f0a4", "M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"],
48855  "hand-point-up": [384, 512, [], "f0a6", "M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.
48855607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"],
48856  "hand-pointer": [448, 512, [], "f25a", "M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z"],
48857  "hand-rock": [512, 512, [], "f255", "M512 128.79c0-26.322-20.861-48.344-47.18-48.783C437.935 79.558 416 101.217 416 128h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C333.935 47.558 312 69.217 312 96v32h-8V80.79c0-26.322-20.861-48.344-47.18-48.783C229.935 31.558 208 53.217 208 80v48h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C125.935 47.558 104 69.217 104 96v136l-8-7.111V176.79c0-26.322-20.861-48.344-47.18-48.783C21.935 127.558 0 149.217 0 176v66.445a95.998 95.998 0 0 0 32.221 71.751l111.668 99.261A47.999 47.999 0 0 1 160 449.333V456c0 13.255 10.745 24 24 24h240c13.255 0 24-10.745 24-24v-2.921a96.01 96.01 0 0 1 7.523-37.254l48.954-116.265A96.002 96.002 0 0 0 512 262.306V128.79z"],
48858  "hand-scissors": [512, 512, [], "f257", "M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z"],
48859  "hand-spock": [512, 512, [], "f259", "M10.872 316.585c15.139-16.086 40.454-16.854 56.543-1.713L128 371.893v-79.405L88.995 120.865c-4.896-21.542 8.598-42.974 30.14-47.87 21.549-4.894 42.975 8.599 47.87 30.141L201.747 256h9.833L164.016 48.966c-4.946-21.531 8.498-42.994 30.028-47.94 21.532-4.95 42.994 8.498 47.94 30.028L293.664 256h15.105l48.425-193.702c5.357-21.432 27.075-34.462 48.507-29.104 21.432 5.358 34.463 27.075 29.104 48.507L391.231 256h11.08l30.768-129.265c5.117-21.491 26.685-34.768 48.177-29.647 21.491 5.117 34.765 26.686 29.647 48.177l-36.292 152.467A96.024 96.024 0 0 0 472 319.967v42.102a96.002 96.002 0 0 1-3.96 27.287l-26.174 88.287C435.825 498.022 417.101 512 395.846 512H179.172a48.002 48.002 0 0 1-32.898-13.046L12.585 373.128c-16.087-15.141-16.853-40.456-1.713-56.543z"],
48860  "hands": [640, 512, [], "f4c2", "M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z"],
48861  "hands-helping": [640, 512, [], "f4c4", "M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248
48861c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z"],
48862  "handshake": [640, 512, [], "f2b5", "M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z"],
48863  "hashtag": [448, 512, [], "f292", "M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z"],
48864  "hdd": [576, 512, [], "f0a0", "M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"],
48865  "heading": [512, 512, [], "f1dc", "M496 80V48c0-8.837-7.163-16-16-16H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.621v128H154.379V96H192c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.275v320H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.621V288H357.62v128H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.275V96H480c8.837 0 16-7.163 16-16z"],
48866  "headphones": [512, 512, [], "f025", "M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z"],
48867  "headphones-alt": [512, 512, [], "f58f", "M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z"],
48868  "headset": [512, 512, [], "f590", "M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z"],
48869  "heart": [512, 512, [], "f004", "M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"],
48870  "heartbeat": [512, 512, [], "f21e", "M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z"],
48871  "helicopter": [640, 512, [], "f533", "M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.7
488717-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z"],
48872  "highlighter": [544, 512, [], "f591", "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z"],
48873  "history": [512, 512, [], "f1da", "M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"],
48874  "hockey-puck": [512, 512, [], "f453", "M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z"],
48875  "home": [576, 512, [], "f015", "M488 312.7V456c0 13.3-10.7 24-24 24H348c-6.6 0-12-5.4-12-12V356c0-6.6-5.4-12-12-12h-72c-6.6 0-12 5.4-12 12v112c0 6.6-5.4 12-12 12H112c-13.3 0-24-10.7-24-24V312.7c0-3.6 1.6-7 4.4-9.3l188-154.8c4.4-3.6 10.8-3.6 15.3 0l188 154.8c2.7 2.3 4.3 5.7 4.3 9.3zm83.6-60.9L488 182.9V44.4c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12V117l-89.5-73.7c-17.7-14.6-43.3-14.6-61 0L4.4 251.8c-5.1 4.2-5.8 11.8-1.6 16.9l25.5 31c4.2 5.1 11.8 5.8 16.9 1.6l235.2-193.7c4.4-3.6 10.8-3.6 15.3 0l235.2 193.7c5.1 4.2 12.7 3.5 16.9-1.6l25.5-31c4.2-5.2 3.4-12.7-1.7-16.9z"],
48876  "hospital": [448, 512, [], "f0f8", "M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z"],
48877  "hospital-alt": [576, 512, [], "f47d", "M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"],
48878  "hospital-symbol": [512, 512, [], "f47e", "M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z"],
48879  "hot-tub": [512, 512, [], "f593", "M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z"],
48880  "hotel": [576, 512, [], "f594", "M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"],
48881  "hourglass": [384, 512, [], "f254", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z"],
48882  "hourglass-end": [384, 512, [], "f253", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z"],
48883  "hourglass-half": [384, 512, [], "f252", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"],
48884  "hourglass-start": [384, 512, [], "f251", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z"],
48885  "i-cursor": [256, 512, [], "f246", "M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932
48885-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z"],
48886  "id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"],
48887  "id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"],
48888  "id-card-alt": [576, 512, [], "f47f", "M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"],
48889  "image": [512, 512, [], "f03e", "M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"],
48890  "images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"],
48891  "inbox": [576, 512, [], "f01c", "M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z"],
48892  "indent": [448, 512, [], "f03c", "M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm176 144h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm-52.687-111.313l-96-95.984C17.266 138.652 0 145.776 0 160.016v191.975c0 14.329 17.325 21.304 27.313 11.313l96-95.992c6.249-6.247 6.249-16.377 0-22.625z"],
48893  "industry": [512, 512, [], "f275", "M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z"],
48894  "infinity": [640, 512, [], "f534", "M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z"],
48895  "info": [192, 512, [], "f129", "M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"],
48896  "info-circle": [512, 512, [], "f05a", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"],
48897  "italic": [320, 512, [], "f033", "M204.758 416h-33.849l62.092-320h40.725a16 16 0 0 0 15.704-12.937l6.242-32C297.599 41.184 290.034 32 279.968 32H120.235a16 16 0 0 0-15.704 12.937l-6.242 32C96.362 86.816 103.927 96 113.993 96h33.846l-62.09 320H46.278a16 16 0 0 0-15.704 12.935l-6.245 32C22.402 470.815 29.967 480 40.034 480h158.479a16 16 0 0 0 15.704-12.935l6.245-32c1.927-9.88-5.638-19.065-15.704-19.065z"],
48898  "joint": [640, 512, [], "f595", "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"],
48899  "key": [512, 512, [], "f084", "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"],
48900  "keyboard": [576, 512, [], "f11c", "M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"],
48901  "kiss": [496, 512, [], "f596", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48902  "kiss-beam": [496, 512, [], "f597", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z"],
48903  "kiss-wink-heart": [504, 512, [], "f598", "M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.
489031l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z"],
48904  "kiwi-bird": [576, 512, [], "f535", "M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z"],
48905  "language": [640, 512, [], "f1ab", "M304 416H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h280v320zm-120.676-72.622A12 12 0 0 0 194.839 352h22.863c8.22 0 14.007-8.078 11.362-15.861L171.61 167.085a12 12 0 0 0-11.362-8.139h-32.489a12.001 12.001 0 0 0-11.362 8.139L58.942 336.139C56.297 343.922 62.084 352 70.304 352h22.805a12 12 0 0 0 11.535-8.693l9.118-31.807h60.211l9.351 31.878zm-39.051-140.42s4.32 21.061 7.83 33.21l10.8 37.531h-38.07l11.07-37.531c3.51-12.15 7.83-33.21 7.83-33.21h.54zM616 416H336V96h280c13.255 0 24 10.745 24 24v272c0 13.255-10.745 24-24 24zm-36-228h-64v-16c0-6.627-5.373-12-12-12h-16c-6.627 0-12 5.373-12 12v16h-64c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h114.106c-6.263 14.299-16.518 28.972-30.023 43.206-6.56-6.898-12.397-13.91-17.365-20.933-3.639-5.144-10.585-6.675-15.995-3.446l-7.28 4.346-6.498 3.879c-5.956 3.556-7.693 11.421-3.735 17.117 6.065 8.729 13.098 17.336 20.984 25.726-8.122 6.226-16.841 12.244-26.103 17.964-5.521 3.41-7.381 10.556-4.162 16.19l7.941 13.896c3.362 5.883 10.935 7.826 16.706 4.276 12.732-7.831 24.571-16.175 35.443-24.891 10.917 8.761 22.766 17.102 35.396 24.881 5.774 3.556 13.353 1.618 16.717-4.27l7.944-13.903c3.213-5.623 1.37-12.76-4.135-16.171a312.737 312.737 0 0 1-26.06-18.019c21.024-22.425 35.768-46.289 42.713-69.85H580c6.627 0 12-5.373 12-12v-16c0-6.625-5.373-11.998-12-11.998z"],
48906  "laptop": [640, 512, [], "f109", "M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"],
48907  "laptop-code": [640, 512, [], "f5fc", "M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"],
48908  "laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 12
489086-142.9 126z"],
48909  "laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"],
48910  "laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"],
48911  "laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"],
48912  "layer-group": [512, 512, [], "f5fd", "M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z"],
48913  "leaf": [576, 512, [], "f06c", "M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z"],
48914  "lemon": [512, 512, [], "f094", "M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.
48914642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z"],
48915  "less-than": [384, 512, [], "f536", "M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z"],
48916  "less-than-equal": [448, 512, [], "f537", "M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"],
48917  "level-down-alt": [320, 512, [], "f3be", "M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"],
48918  "level-up-alt": [320, 512, [], "f3bf", "M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z"],
48919  "life-ring": [512, 512, [], "f1cd", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"],
48920  "lightbulb": [384, 512, [], "f0eb", "M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zm-143.107-44c-9.907 0-18.826-6.078-22.376-15.327C67.697 267.541 16 277.731 16 176 16 78.803 94.805 0 192 0s176 78.803 176 176c0 101.731-51.697 91.541-90.516 192.673-3.55 9.249-12.47 15.327-22.376 15.327H128.893zM112 176c0-44.112 35.888-80 80-80 8.837 0 16-7.164 16-16s-7.163-16-16-16c-61.757 0-112 50.243-112 112 0 8.836 7.164 16 16 16s16-7.164 16-16z"],
48921  "link": [512, 512, [], "f0c1", "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"],
48922  "lira-sign": [384, 512, [], "f195", "M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H
4892276c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z"],
48923  "list": [512, 512, [], "f03a", "M128 116V76c0-8.837 7.163-16 16-16h352c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H144c-8.837 0-16-7.163-16-16zm16 176h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 144h64c8.837 0 16-7.163 16-16V64c0-8.837-7.163-16-16-16H16C7.163 48 0 55.163 0 64v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16z"],
48924  "list-alt": [512, 512, [], "f022", "M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z"],
48925  "list-ol": [512, 512, [], "f0cb", "M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],
48926  "list-ul": [512, 512, [], "f0ca", "M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],
48927  "location-arrow": [512, 512, [], "f124", "M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z"],
48928  "lock": [448, 512, [], "f023", "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"],
48929  "lock-open": [576, 512, [], "f3c1", "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"],
48930  "long-arrow-alt-down": [256, 512, [], "f309", "M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z"],
48931  "long-arrow-alt-left": [448, 512, [], "f30a", "M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.
48931627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z"],
48932  "long-arrow-alt-right": [448, 512, [], "f30b", "M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"],
48933  "long-arrow-alt-up": [256, 512, [], "f30c", "M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z"],
48934  "low-vision": [576, 512, [], "f2a8", "M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z"],
48935  "luggage-cart": [640, 512, [], "f59d", "M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z"],
48936  "magic": [512, 512, [], "f0d0", "M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z"],
48937  "magnet": [512, 512, [], "f076", "M164.1 160H12c-6.6 0-12-5.4-12-12V68c0-19.9 16.1-36 36-36h104c19.9 0 36 16.1 36 36v80c.1 6.6-5.3 12-11.9 12zm348-12V67.9c0-19.9-16.1-36-36-36h-104c-19.9 0-36 16.1-36 36v80c0 6.6 5.4 12 12 12h152c6.6.1 12-5.3 12-11.9zm-164 44c-6.6 0-12 5.4-12 12v52c0 128.1-160 127.9-160 0v-52c0-6.6-5.4-12-12-12h-152c-6.7 0-12 5.4-12 12.1.1 21.4.6 40.3 0 53.3C.1 408 136.3 504 256.9 504 377.5 504 512 408 512 257.3c-.6-12.8-.2-33 0-53.2 0-6.7-5.3-12.1-12-12.1H348.1z"],
48938  "male": [192, 512, [], "f183", "M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z"],
48939  "map": [576, 512, [], "f279", "M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z"],
48940  "map-marked": [576, 512, [], "f59f", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"],
48941  "map-marked-alt": [576, 512, [], "f5a0", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"],
48942  "map-marker": [384, 512, [], "f041", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z"],
48943  "map-marker-alt": [384, 512, [], "f3c5", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"],
48944  "map-pin": [288, 512, [], "f276", "M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z"],
48945  "map-signs": [512, 512, [], "f277", "M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z"],
48946  "marker": [512, 512, [], "f5a1", "M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z"],
48947  "mars": [384, 512, [], "f222", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
48948  "mars-double": [512, 512, [], "f227", "M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z"],
48949  "mars-stroke": [384, 512, [], "f229", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
48950  "mars-stroke-h": [480, 512, [], "f22b", "M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"],
48951  "mars-stroke-v": [288, 512, [], "f22a", "M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"],
48952  "medal": [512, 512, [], "f5a2", "M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z"],
48953  "medkit": [512, 512, [], "f0fa", "M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"],
48954  "meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48955  "meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48956  "meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z"],
48957  "memory": [640, 512, [], "f538", "M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z"],
48958  "mercury": [288, 512, [], "f223", "M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"],
48959  "microchip": [512, 512, [], "f2db", "M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z"],
48960  "microphone": [352, 512, [], "f130", "M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z"],
48961  "microphone-alt": [352, 512, [], "f3c9", "M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z"],
48962  "microphone-alt-slash": [640, 512, [], "f539", "M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"],
48963  "microphone-slash": [640, 512, [], "f131", "M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"],
48964  "microscope": [512, 512, [], "f610", "M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z"],
48965  "minus": [448, 512, [], "f068", "M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"],
48966  "minus-circle": [512, 512, [], "f056", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"],
48967  "minus-square": [448, 512, [], "f146", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"],
48968  "mobile": [320, 512, [], "f10b", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48969  "mobile-alt": [320, 512, [], "f3cd", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z"],
48970  "money-bill": [640, 512, [], "f0d6", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"],
48971  "money-bill-alt": [640, 512, [], "f3d1", "M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"],
48972  "money-bill-wave": [640, 512, [], "f53a", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.
4897262-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z"],
48973  "money-bill-wave-alt": [640, 512, [], "f53b", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z"],
48974  "money-check": [640, 512, [], "f53c", "M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z"],
48975  "money-check-alt": [640, 512, [], "f53d", "M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z"],
48976  "monument": [384, 512, [], "f5a6", "M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"],
48977  "moon": [512, 512, [], "f186", "M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"],
48978  "mortar-pestle": [512, 512, [], "f5a7", "M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"],
48979  "motorcycle": [640, 512, [], "f21c", "M512.949 192.003c-14.862-.108-29.14 2.322-42.434 6.874L437.589 144H520c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24h-45.311a24 24 0 0 0-17.839 7.945l-37.496 41.663-22.774-37.956A24 24 0 0 0 376 64h-80c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h66.411l19.2 32H227.904c-17.727-23.073-44.924-40-99.904-40H72.54c-13.455 0-24.791 11.011-24.536 24.464C48.252 141.505 58.9 152 72 152h56c24.504 0 38.686 10.919 47.787 24.769l-11.291 20.529c-13.006-3.865-26.871-5.736-41.251-5.21C55.857 194.549 1.565 249.605.034 317.02
489791-1.603 389.076 56.317 448 128 448c59.642 0 109.744-40.794 123.953-96h84.236c13.673 0 24.589-11.421 23.976-25.077-2.118-47.12 17.522-93.665 56.185-125.026l12.485 20.808c-27.646 23.654-45.097 58.88-44.831 98.179.47 69.556 57.203 126.452 126.758 127.11 71.629.678 129.839-57.487 129.234-129.099-.588-69.591-57.455-126.386-127.047-126.892zM128 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c4.242 0 8.405.341 12.469.982L98.97 316.434C90.187 332.407 101.762 352 120 352h81.297c-12.37 28.225-40.56 48-73.297 48zm388.351-.116C470.272 402.337 432 365.554 432 320c0-21.363 8.434-40.781 22.125-55.144l49.412 82.352c4.546 7.577 14.375 10.034 21.952 5.488l13.72-8.232c7.577-4.546 10.034-14.375 5.488-21.952l-48.556-80.927A80.005 80.005 0 0 1 512 240c45.554 0 82.338 38.273 79.884 84.352-2.16 40.558-34.974 73.372-75.533 75.532z"],
48980  "mouse-pointer": [320, 512, [], "f245", "M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z"],
48981  "music": [512, 512, [], "f001", "M511.99 32.01c0-21.71-21.1-37.01-41.6-30.51L150.4 96c-13.3 4.2-22.4 16.5-22.4 30.5v261.42c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64V214.31l256-75.02v184.63c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64l-.01-351.99z"],
48982  "neuter": [288, 512, [], "f22c", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
48983  "newspaper": [576, 512, [], "f1ea", "M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z"],
48984  "not-equal": [448, 512, [], "f53e", "M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z"],
48985  "notes-medical": [384, 512, [], "f481", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z"],
48986  "object-group": [512, 512, [], "f247", "M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"],
48987  "object-ungroup": [576, 512, [], "f248", "M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z"],
48988  "oil-can": [640, 512, [], "f613", "M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z"],
48989  "outdent": [448, 512, [], "f03b", "M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm208 144h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm192-128h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM4.687 267.313l96 95.984C110.734 373.348 128 366.224 128 351.984V160.008c0-14.329-17.325-21.304-27.313-11.313l-96 95.992c-6.249 6.248-6.249 16.378 0 22.626z"],
48990  "paint-brush": [512, 512, [], "f1fc", "M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"],
48991  "paint-roller": [512, 512, [], "f5aa", "M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"],
48992  "palette": [512, 512, [], "f53f", "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
48993  "pallet": [640, 512, [], "f482", "M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z"],
48994  "paper-plane": [512, 512, [], "f1d8", "M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"],
48995  "paperclip": [448, 512, [], "f0c6", "M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"],
48996  "parachute-box": [512, 512, [], "f4cd", "M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z"],
48997  "paragraph": [448, 512, [], "f1dd", "M408 32H177.531C88.948 32 16.045 103.335 16 191.918 15.956 280.321 87.607 352 176 352v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h32v344c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h40c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24z"],
48998  "parking": [448, 512, [], "f540", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z"],
48999  "passport": [448, 512, [], "f5ab", "M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z"],
49000  "paste": [448, 512, [], "f0ea", "M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z"],
49001  "pause": [448, 512, [], "f04c", "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"],
49002  "pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z"],
49003  "paw": [512, 512, [], "f1b0", "M85.231 330.958C36 330.958 0 273.792 0 231.5c0-28.292 16-58.042 49.538-58.042 49.231 0 85.231 57.458 85.231 99.75 0 28.292-15.692 57.75-49.538 57.75zm348 106.167c0 37.042-32 42.875-63.385 42.875-41.231 0-74.462-26.25-113.846-26.25-41.231 0-76.308 25.958-120.923 25.958-29.847 0-56.308-9.625-56.308-42.583C78.769 368 180.616 265.333 256 265.333s177.231 102.959 177.231 171.792zM182.462 203.792c-49.847 0-80-59.5-80-100.333C102.462 70.792 120.308 32 160 32c50.154 0 80 59.5 80 100.333 0 32.667-17.846 71.459-57.538 71.459zM272 132.333C272 91.5 301.846 32 352 32c39.692 0 57.539 38.792 57.539 71.458 0 40.833-30.154 100.333-80.001 100.333C289.846 203.792 272 165 272 132.333zM512 231.5c0 42.292-36 99.458-85.231 99.458-33.847 0-49.538-29.458-49.538-57.75 0-42.291 35.999-99.75 85.231-99.75C496 173.458 512 203.208 512 231.5z"],
49004  "pen": [512, 512, [], "f304", "M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"],
49005  "pen-alt": [512, 512, [], "f305", "M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z"],
49006  "pen-fancy": [512, 512, [], "f5ac", "M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z"],
49007  "pen-nib": [512, 512, [], "f5ad", "M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z"],
49008  "pen-square": [448, 512, [], "f14b", "M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z"],
49009  "pencil-alt": [512, 512, [], "f303", "M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"],
49010  "pencil-ruler": [512, 512, [], "f5ae", "M109.46 244.04l134.58-134.56-44.12-44.12-61.
4901068 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z"],
49011  "people-carry": [640, 512, [], "f4ce", "M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"],
49012  "percent": [448, 512, [], "f295", "M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"],
49013  "percentage": [384, 512, [], "f541", "M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z"],
49014  "phone": [512, 512, [], "f095", "M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"],
49015  "phone-slash": [640, 512, [], "f3dd", "M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"],
49016  "phone-square": [448, 512, [], "f098", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z"],
49017  "phone-volume": [384, 512, [], "f2a0", "M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"],
49018  "piggy-bank": [576, 512, [], "f4d3", "M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z"],
49019  "pills": [576, 512, [], "f484", "M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z"],
49020  "plane": [576, 512, [], "f072", "M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z"],
49021  "plane-arrival": [640, 512, [], "f5af", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z"],
49022  "plane-departure": [640, 512, [], "f5b0", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"],
49023  "play": [448, 512, [], "f04b", "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"],
49024  "play-circle": [512, 512, [], "f144", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"],
49025  "plug": [384, 512, [], "f1e6", "M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z"],
49026  "plus": [448, 512, [], "f067", "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"],
49027  "plus-circle": [512, 512, [], "f055", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.
490276 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],
49028  "plus-square": [448, 512, [], "f0fe", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],
49029  "podcast": [448, 512, [], "f2ce", "M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z"],
49030  "poo": [512, 512, [], "f2fe", "M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
49031  "poop": [512, 512, [], "f619", "M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z"],
49032  "portrait": [384, 512, [], "f3e0", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"],
49033  "pound-sign": [320, 512, [], "f154", "M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z"],
49034  "power-off": [512, 512, [], "f011", "M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"],
49035  "prescription": [384, 512, [], "f5b1", "M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z"],
49036  "prescription-bottle": [384, 512, [], "f485", "M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v
4903664h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z"],
49037  "prescription-bottle-alt": [384, 512, [], "f486", "M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z"],
49038  "print": [512, 512, [], "f02f", "M464 192h-16V81.941a24 24 0 0 0-7.029-16.97L383.029 7.029A24 24 0 0 0 366.059 0H88C74.745 0 64 10.745 64 24v168H48c-26.51 0-48 21.49-48 48v132c0 6.627 5.373 12 12 12h52v104c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V384h52c6.627 0 12-5.373 12-12V240c0-26.51-21.49-48-48-48zm-80 256H128v-96h256v96zM128 224V64h192v40c0 13.2 10.8 24 24 24h40v96H128zm304 72c-13.254 0-24-10.746-24-24s10.746-24 24-24 24 10.746 24 24-10.746 24-24 24z"],
49039  "procedures": [640, 512, [], "f487", "M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8
49039c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"],
49040  "project-diagram": [640, 512, [], "f542", "M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"],
49041  "puzzle-piece": [576, 512, [], "f12e", "M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"],
49042  "qrcode": [448, 512, [], "f029", "M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z"],
49043  "question": [384, 512, [], "f128", "M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"],
49044  "question-circle": [512, 512, [], "f059", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"],
49045  "quidditch": [640, 512, [], "f458", "M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z"],
49046  "quote-left": [512, 512, [], "f10d", "M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"],
49047  "quote-right": [512, 512, [], "f10e", "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"],
49048  "random": [512, 512, [], "f074", "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-4
490480.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"],
49049  "receipt": [384, 512, [], "f543", "M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z"],
49050  "recycle": [512, 512, [], "f1b8", "M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z"],
49051  "redo": [512, 512, [], "f01e", "M500.333 0h-47.411c-6.853 0-12.314 5.729-11.986 12.574l3.966 82.759C399.416 41.899 331.672 8 256.001 8 119.34 8 7.899 119.526 8 256.187 8.101 393.068 119.096 504 256 504c63.926 0 122.202-24.187 166.178-63.908 5.113-4.618 5.354-12.561.482-17.433l-33.971-33.971c-4.466-4.466-11.64-4.717-16.38-.543C341.308 415.448 300.606 432 256 432c-97.267 0-176-78.716-176-176 0-97.267 78.716-176 176-176 60.892 0 114.506 30.858 146.099 77.8l-101.525-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12z"],
49052  "redo-alt": [512, 512, [], "f2f9", "M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z"],
49053  "registered": [512, 512, [], "f25d", "M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z"],
49054  "reply": [512, 512, [], "f3e5", "M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"],
49055  "reply-all": [576, 512, [], "f122", "M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z"],
49056  "retweet": [640, 512, [], "f079", "M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z"],
49057  "ribbon": [448, 512, [], "f4d6", "M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z"],
49058  "road": [576, 512, [], "f018", "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z"],
49059  "robot": [640, 512, [], "f544", "M0 256v128c0 17.7 14.3 32 32 32h32V224H32c-17.7 0-32 14.3-32 32zM464 96H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H176c-44.2 0-80 35.8-80 80v272c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V176c0-44.2-35.8-80-80-80zM256 416h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm128 120h-64v-32h64v32zm96 0h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm192-72h-32v192h32c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32z"],
49060  "rocket": [512, 512, [], "f135", "M505.1 19.1C503.8 13 499 8.2 492.9 6.9 460.7 0 435.5 0 410.4 0 307.2 0 245.3 55.2 
49060199.1 128H94.9c-18.2 0-34.8 10.3-42.9 26.5L2.6 253.3c-8 16 3.6 34.7 21.5 34.7h95.1c-5.9 12.8-11.9 25.5-18 37.7-3.1 6.2-1.9 13.6 3 18.5l63.6 63.6c4.9 4.9 12.3 6.1 18.5 3 12.2-6.1 24.9-12 37.7-17.9V488c0 17.8 18.8 29.4 34.7 21.5l98.7-49.4c16.3-8.1 26.5-24.8 26.5-42.9V312.8c72.6-46.3 128-108.4 128-211.1.1-25.2.1-50.4-6.8-82.6zM400 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],
49061  "route": [512, 512, [], "f4d7", "M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
49062  "rss": [448, 512, [], "f09e", "M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.76
490625 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z"],
49063  "rss-square": [448, 512, [], "f143", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z"],
49064  "ruble-sign": [384, 512, [], "f158", "M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z"],
49065  "ruler": [640, 512, [], "f545", "M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z"],
49066  "ruler-combined": [512, 512, [], "f546", "M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"],
49067  "ruler-horizontal": [576, 512, [], "f547", "M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z"],
49068  "ruler-vertical": [256, 512, [], "f548", "M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"],
49069  "rupee-sign": [320, 512, [], "f156", "M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z"],
49070  "sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z"],
49071  "sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z"],
49072  "save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"],
49073  "school": [640, 512, [], "f549", "M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82
49073-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z"],
49074  "screwdriver": [512, 512, [], "f54a", "M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z"],
49075  "search": [512, 512, [], "f002", "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"],
49076  "search-minus": [512, 512, [], "f010", "M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"],
49077  "search-plus": [512, 512, [], "f00e", "M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"],
49078  "seedling": [512, 512, [], "f4d8", "M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z"],
49079  "server": [512, 512, [], "f233", "M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"],
49080  "shapes": [512, 512, [], "f61f", "M512 320v160c0 17.67-14.33 32-32 32H320c-17.67 0-32-14.33-32-32V320c0-17.67 14.33-32 32-32h160c17.67 0 32 14.33 32 32zm-384-64C57.31 256 0 313.31 0 384s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm351.03-32c25.34 0 41.18-26.67 28.51-48L412.51 16c-12.67-21.33-44.35-21.33-57.02 0l-95.03 160c-12.67 21.33 3.17 48 28.51 48h190.06z"],
49081  "share": [512, 512, [], "f064", "M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"],
49082  "share-alt": [448, 512, [], "f1e0", "M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"],
49083  "share-alt-square": [448, 512, [], "f1e1", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z"],
49084  "share-square": [576, 512, [], "f14d", "M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z"],
49085  "shekel-sign": [448, 512, [], "f20b", "M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z"],
49086  "shield-alt": [512, 512, [], "f3ed", "M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z"],
49087  "ship": [640, 512, [], "f21a", "M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z"],
49088  "shipping-fast": [640, 512, [], "f48b", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"],
49089  "shoe-prints": [640, 512, [], "f54b", "M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z"],
49090  "shopping-bag": [448, 512, [], "f290", "M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z"],
49091  "shopping-basket": [576, 512, [], "f291", "M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z"],
49092  "shopping-cart": [576, 512, [], "f07a", "M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"],
49093  "shower": [512, 512, [], "f2cc", "M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z"],
49094  "shuttle-van": [640, 512, [], "f5b6", "M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z"],
49095  "sign": [512, 512, [], "f4d9", "M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 
490950 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z"],
49096  "sign-in-alt": [512, 512, [], "f2f6", "M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z"],
49097  "sign-language": [448, 512, [], "f2a7", "M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z"],
49098  "sign-out-alt": [512, 512, [], "f2f5", "M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"],
49099  "signal": [640, 512, [], "f012", "M36 384h56c6.6 0 12 5.4 12 12v104c0 6.6-5.4 12-12 12H36c-6.6 0-12-5.4-12-12V396c0-6.6 5.4-12 12-12zm116-36v152c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V348c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-80v232c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V268c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-112v344c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V156c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zM536 12v488c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V12c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12z"],
49100  "signature": [512, 512, [], "f5b7", "M496 320h-91.86c-9.27 0-19.72-11.31-25.78-28.52-15.23-43.36-48.11-70.3-85.8-70.3-30.84 0-58.47 18.05-76.11 49.23L194.8 106.5C188.84 81.08 169.34 64 146.28 64c-23.05 0-42.55 17.08-48.5 42.5L56.16 284.2C50.7 307.45 37.75 320 28.33 320H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h12.33c41.97 0 78.19-34.23 90.14-85.2l23.84-101.78 29.25 222.11c1.98 15.05 13.82 27.45 28.94 28.75.99.09 1.96.13 2.93.13 14.08 0 26.64-9.27 30.69-22.95l33.03-112.34c5.88-16.72 15.84-27.52 25.41-27.52 9.58 0 19.55 10.8 25.78 28.52 15.23 43.36 48.11 70.3 85.8 70.3H496c8.84 0 16-7.16 16-16v-32c0-8.86-7.16-16.02-16-16.02z"],
49101  "sitemap": [640, 512, [], "f0e8", "M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"],
49102  "skull": [512, 512, [], "f54c", "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.
491026 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z"],
49103  "sliders-h": [512, 512, [], "f1de", "M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z"],
49104  "smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"],
49105  "smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z"],
49106  "smile-wink": [496, 512, [], "f4da", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z"],
49107  "smoking": [640, 512, [], "f48d", "M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"],
49108  "smoking-ban": [512, 512, [], "f54d", "M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z"],
49109  "snowflake": [448, 512, [], "f2dc", "M444.816 301.639a24.12 24.12 0 0 0 2.661-16.978c-2.725-12.966-15.339-21.245-28.174-18.492l-87.407 25.046L264 256l67.896-35.215 87.407 25.046c12.835 2.753 25.449-5.526 28.174-18.492 2.725-12.966-5.471-25.708-18.305-28.461l-47.477-7.137 53.077-30.956c11.363-6.627 15.257-21.306 8.696-32.785-6.561-11.479-21.091-15.412-32.454-8.785l-53.077 30.956 17.621-45.104c4.057-12.606-2.768-26.146-15.247-30.245-12.478-4.099-25.883 2.797-29.94 15.402l-22.232 88.99-60.38 35.215V144l65.175-63.945c8.778-9.852 7.987-25.027-1.766-33.894-9.753-8.867-24.775-8.068-33.552 1.784l-29.85
491097 37.967V24c0-13.255-10.637-24-23.758-24s-23.758 10.745-23.758 24v61.912l-29.857-37.967c-8.779-9.852-23.799-10.652-33.552-1.784-9.753 8.867-10.543 24.042-1.766 33.894L200.242 144v70.431l-60.38-35.215-22.232-88.99c-4.057-12.605-17.462-19.501-29.94-15.402-12.478 4.099-19.304 17.64-15.247 30.245l17.62 45.104-53.077-30.956c-11.363-6.627-25.893-2.694-32.454 8.785s-2.667 26.157 8.696 32.785l53.077 30.956-47.477 7.137C5.993 201.634-2.203 214.375.523 227.341c2.725 12.965 15.339 21.245 28.174 18.492l87.407-25.046L184 256l-67.896 35.215-87.406-25.045c-12.835-2.753-25.449 5.526-28.174 18.492-2.725 12.967 5.47 25.708 18.305 28.461l47.477 7.137-53.077 30.956C1.866 357.843-2.027 372.521 4.533 384s21.091 15.412 32.454 8.785l53.077-30.956-17.62 45.104a24.157 24.157 0 0 0 2.022 19.428c2.831 4.953 7.416 8.909 13.224 10.816 12.478 4.099 25.883-2.797 29.94-15.402l22.232-88.99 60.38-35.215V368l-65.175 63.945c-8.778 9.852-7.987 25.027 1.766 33.894 9.754 8.868 24.774 8.068 33.552-1.784l29.857-37.967V488c0 13.255 10.637 24 23.758 24s23.758-10.745 23.758-24v-61.912l29.857 37.967A23.59 23.59 0 0 0 295.282 472a23.534 23.534 0 0 0 15.885-6.161c9.753-8.867 10.544-24.042 1.766-33.894L247.758 368v-70.431l60.38 35.215 22.232 88.99c4.057 12.605 17.462 19.501 29.94 15.402 12.479-4.099 19.304-17.64 15.247-30.245l-17.621-45.104 53.077 30.956c11.363 6.627 25.893 2.694 32.454-8.785s2.667-26.157-8.696-32.785l-53.077-30.956 47.477-7.137c6.86-1.469 12.394-5.793 15.645-11.481z"],
49110  "solar-panel": [640, 512, [], "f5ba", "M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"],
49111  "sort": [320, 512, [], "f0dc", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z"],
49112  "sort-alpha-down": [448, 512, [], "f15d", "M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zm119.075-180.007A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z"],
49113  "sort-alpha-up": [448, 512, [], "f15e", "M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zm301.671 98.621A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z"],
49114  "sort-amount-down": [512, 512, [], "f160", "M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z"],
49115  "sort-amount-up": [512, 512, [], "f161", "M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z"],
49116  "sort-down": [320, 512, [], "f0dd", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z"],
49117  "sort-numeric-down": [448, 512, [], "f162", "M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM175.984 368H128V48c0-8.837-7.163-16-16-16H80c-8.837 0-16 7.163-16 16v320H16.019c-14.212 0-21.384 17.244-11.314 27.314l79.981 80.002c6.245 6.245 16.38 6.247 22.627 0l79.984-80.002c10.05-10.05 2.928-27.314-11.313-27.314z"],
49118  "sort-numeric-up": [448, 512, [], "f163", "M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM16.016 144H64v320c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144h47.981c14.212 0 21.384-17.244 11.314-27.314l-79.981-80.002c-6.245-6.245-16.38-6.247-22.627 0L4.702 116.686C-5.347 126.736 1.775 144 16.016 144z"],
49119  "sort-up": [320, 512, [], "f0de", "M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z"],
49120  "spa": [576, 512, [], "f5bb", "M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z"],
49121  "space-shuttle": [640, 512, [], "f197", "M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z"],
49122  "spinner": [512, 512, [], "f110", "M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"],
49123  "splotch": [512, 512, [], "f5bc", "M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62
49123c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z"],
49124  "spray-can": [512, 512, [], "f5bd", "M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"],
49125  "square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],
49126  "square-full": [512, 512, [], "f45c", "M512 512H0V0h512v512z"],
49127  "stamp": [512, 512, [], "f5bf", "M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z"],
49128  "star": [576, 512, [], "f005", "M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"],
49129  "star-half": [576, 512, [], "f089", "M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z"],
49130  "star-half-alt": [536, 512, [], "f5c0", "M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z"],
49131  "star-of-life": [480, 512, [], "f621", "M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z"],
49132  "step-backward": [448, 512, [], "f048", "M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z"],
49133  "step-forward": [448, 512, [], "f051", "M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"],
49134  "stethoscope": [512, 512, [], "f0f1", "M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"],
49135  "sticky-note": [448, 512, [], "f249", "M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z"],
49136  "stop": [448, 512, [], "f04d", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],
49137  "stop-circle": [512, 512, [], "f28d", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"],
49138  "stopwatch": [448, 512, [], "f2f2", "M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"],
49139  "store": [616, 512, [], "f54e", "M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"],
49140  "store-alt": [640, 512, [], "f54f", "M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z"],
49141  "stream": [512, 512, [], "f550", "M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"],
49142  "street-view": [512, 512, [], "f21d", "M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z"],
49143  "strikethrough": [512, 512, [], "f0cc", "M496 288H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h480c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16zm-214.666 16c27.258 12.937 46.524 28.683 46.524 56.243 0 33.108-28.977 53.676-75.621 53.676-32.325 0-76.874-12.08-76.874-44.271V368c0-8.837-7.164-16-16-16H113.75c-8.836 0-16 7.163-16 16v19.204c0 66.845 77.717 101.82 154.487 101.82 88.578 0 162.013-45.438 162.013-134.424 0-19.815-3.618-36.417-10.143-50.6H281.334zm-30.952-96c-32.422-13.505-56.836-28.946-56.836-59.683 0-33.92 30.901-47.406 64.962-47.406 42.647 0 64.962 16.593 64.962 32.985V136c0 8.837 7.164 16 16 16h45.613c8.836 0 16-7.163 16-16v-30.318c0-52.438-71.725-79.875-142.575-79.875-85.203 0-150.726 40.972-150.726 125.646 0 22.71 4.665 41.176 12.777 56.547h129.823z"],
49144  "stroopwafel": [512, 512, [], "f551", "M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z"],
49145  "subscript": [512, 512, [], "f12c", "M395.198 416c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 256c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 96H16C7.163 96 0 88.837 0 80V48c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.
49145171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035A15.999 15.999 0 0 1 204.226 32H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 256H272z"],
49146  "subway": [448, 512, [], "f239", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"],
49147  "suitcase": [512, 512, [], "f0f2", "M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z"],
49148  "suitcase-rolling": [384, 512, [], "f5c1", "M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z"],
49149  "sun": [512, 512, [], "f185", "M274.835 12.646l25.516 62.393c4.213 10.301 16.671 14.349 26.134 8.492l57.316-35.479c15.49-9.588 34.808 4.447 30.475 22.142l-16.03 65.475c-2.647 10.81 5.053 21.408 16.152 22.231l67.224 4.987c18.167 1.348 25.546 24.057 11.641 35.826L441.81 242.26c-8.495 7.19-8.495 20.289 0 27.479l51.454 43.548c13.906 11.769 6.527 34.478-11.641 35.826l-67.224 4.987c-11.099.823-18.799 11.421-16.152 22.231l16.03 65.475c4.332 17.695-14.986 31.73-30.475 22.142l-57.316-35.479c-9.463-5.858-21.922-1.81-26.134 8.492l-25.516 62.393c-6.896 16.862-30.774 16.862-37.67 0l-25.516-62.393c-4.213-10.301-16.671-14.349-26.134-8.492l-57.317 35.479c-15.49 9.588-34.808-4.447-30.475-22.142l16.03-65.475c2.647-10.81-5.053-21.408-16.152-22.231l-67.224-4.987c-18.167-1.348-25.546-24.057-11.641-35.826L70.19 269.74c8.495-7.19 8.495-20.289 0-27.479l-51.454-43.548c-13.906-11.769-6.527-34.478 11.641-35.826l67.224-4.987c11.099-.823 18.799-11.421 16.152-22.231l-16.03-65.475c-4.332-17.695 14.986-31.73 30.475-22.142l57.317 35.479c9.463 5.858 21.921 1.81 26.134-8.492l25.516-62.393c6.896-16.861 30.774-16.861 37.67 0zM392 256c0-74.991-61.01-136-136-136-74.991 0-136 61.009-136 136s61.009 136 136 136c74.99 0 136-61.009 136-136zm-32 0c0 57.346-46.654 104-104 104s-104-46.654-104-104 46.654-104 104-104 104 46.654 104 104z"],
49150  "superscript": [512, 512, [], "f12b", "M395.198 256c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 256H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035a16 16 0 0 1 13.598-7.567H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 416H272z"],
49151  "surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
49152  "swatchbook": [511, 512, [], "f5c3", "M479.06 320H372.29L186.15 506.51c-2.06 2.07-4.49 3.58-6.67 5.49h299.58c17.64 0 31.94-14.33 31.94-32V352c0-17.67-14.3-32-31.94-32zm-44.5-152.9l-90.33-90.51c-12.47-12.5-32.69-12.5-45.17 0l-75.5 75.65V416c0 2.96-.67 5.73-.87 8.64l211.87-212.28c12.47-12.5 12.47-32.77 0-45.26zM191.62 32c0-17.67-14.3-32-31.94-32H31.94C14.3 0 0 14.33 0 32v384c0 53.02 42.9 96 95.81 96s95.81-42.98 95.81-96V32zM95.81 440c-13.23 0-23.95-10.75-23.95-24 0-13.26 10.73-24 23.95-24s23.95 10.74 23.95 24c.01 13.25-10.72 24
49152-23.95 24zm31.94-184H63.88v-64h63.88v64zm0-128H63.88V64h63.88v64z"],
49153  "swimmer": [640, 512, [], "f5c4", "M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z"],
49154  "swimming-pool": [640, 512, [], "f5c5", "M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z"],
49155  "sync": [512, 512, [], "f021", "M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z"],
49156  "sync-alt": [512, 512, [], "f2f1", "M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"],
49157  "syringe": [512, 512, [], "f48e", "M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z"],
49158  "table": [512, 512, [], "f0ce", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z"],
49159  "table-tennis": [512, 512, [], "f45d", "M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z"],
49160  "tablet": [448, 512, [], "f10a", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],
49161  "tablet-alt": [448, 512, [], "f3fa", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z"],
49162  "tablets": [640, 512, [], "f490", "M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z"],
49163  "tachometer-alt": [576, 512, [], "f3fd", "M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
49164  "tag": [512, 512, [], "f02b", "M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"],
49165  "tags": [640, 512, [], "f02c", "M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"],
49166  "tape": [640, 512, [], "f4db", "M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z"],
49167  "tasks": [512, 512, [], "f0ae", "M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z"],
49168  "taxi": [512, 512, [], "f1ba", "M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
49169  "teeth": [640, 512, [], "f62e", "M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z"],
49170  "teeth-open": [640, 512, [], "f62f", "M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z"],
49171  "terminal": [640, 512, [], "f120", "M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"],
49172  "text-height": [576, 512, [], "f034", "M16 32h288c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96h-54.761v320H232c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H88c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm475.308 4.685l79.995 80.001C581.309 126.693 574.297 144 559.99 144H512v224h48c15.639 0 20.635 17.991 11.313 27.314l-79.995 80.001c-6.247 6.247-16.381 6.245-22.626 0l-79.995-80.001C378.691 385.307 385.703 368 400.01 368H448V144h-48c-15.639 0-20.635-17.991-11.313-27.314l79.995-80.001c6.247-6.248 16.381-6.245 22.626 0z"],
49173  "text-width": [448, 512, [], "f035", "M16 32h416c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96H261.743v128H296c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H152c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm427.315 340.682l-80.001-79.995C353.991 283.365 336 288.362 336 304v48H112v-47.99c0-14.307-17.307-21.319-27.314-11.313L4.685 372.692c-6.245 6.245-6.247 16.379 0 22.626l80.001 79.995C94.009 484.635 112 479.638 112 464v-48h224v47.99c0 14.307 17.307 21.319 27.314 11.313l80.001-79.995c6.245-6.245 6.248-16.379 0-22.626z"],
49174  "th": [512, 512, [], "f00a", "M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"],
49175  "th-large": [512, 512, [], "f009", "M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z"],
49176  "th-list": [512, 512, [], "f00b", "M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z"],
49177  "theater-masks": [640, 512, [], "f630", "M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z"],
49178  "thermometer": [512, 512, [], "f491", "M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z"],
49179  "thermometer-empty": [256, 512, [], "f2cb", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],
49180  "thermometer-full": [256, 512, [], "f2c7", "M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z"],
49181  "thermometer-half": [256, 512, [], "f2c9", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],
49182  "thermometer-quarter": [256, 512, [], "f2ca", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],
49183  "thermometer-three-quarters": [256, 512, [], "f2c8", "M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],
49184  "thumbs-down": [512, 512, [], "f165", "M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z"],
49185  "thumbs-up": [512, 512, [], "f164", "M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z"],
49186  "thumbtack": [384, 512, [], "f08d", "M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z"],
49187  "ticket-alt": [576, 512, [], "f3ff", "M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"],
49188  "times": [352, 512, [], "f00d", "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"],
49189  "times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4
49189.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"],
49190  "tint": [352, 512, [], "f043", "M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z"],
49191  "tint-slash": [640, 512, [], "f5c7", "M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"],
49192  "tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z"],
49193  "toggle-off": [576, 512, [], "f204", "M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z"],
49194  "toggle-on": [576, 512, [], "f205", "M576 256c0 106.039-85.961 192-192 192H192C85.961 448 0 362.039 0 256S85.961 64 192 64h192c106.039 0 192 85.961 192 192zM384 128c-70.741 0-128 57.249-128 128 0 70.741 57.249 128 128 128 70.741 0 128-57.249 128-128 0-70.741-57.249-128-128-128"],
49195  "toolbox": [512, 512, [], "f552", "M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z"],
49196  "tooth": [448, 512, [], "f5c9", "M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z"],
49197  "trademark": [640, 512, [], "f25c", "M97.119 163.133H12c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h248.559c6.627 0 12 5.373 12 12v43.133c0 6.627-5.373 12-12 12H175.44V404c0 6.627-5.373 12-12 12h-54.322c-6.627 0-12-5.373-12-12V163.133zM329.825 96h65.425a12 12 0 0 1 11.346 8.093l43.759 127.068c7.161 20.588 16.111 52.812 16.111 52.812h.896s8.95-32.224 16.111-52.812l43.758-127.068A12 12 0 0 1 538.577 96h65.41a12 12 0 0 1 11.961 11.03l24.012 296c.567 6.987-4.951 12.97-11.961 12.97h-54.101a12 12 0 0 1-11.972-11.182l-9.082-132.93c-1.79-24.168 0-53.706 0-53.706h-.896s-10.741 33.566-17.902 53.706l-30.7 84.731a12 12 0 0 1-11.282 7.912h-50.302a12 12 0 0 1-11.282-7.912l-30.7-84.731c-7.161-20.14-17.903-53.706-17.903-53.706h-.895s1.79 29.538 0 53.706l-9.082 132.93c-.428 6.295-5.66 11.182-11.97 11.182H305.4c-7.017 0-12.536-5.994-11.959-12.987l24.425-296A11.999 11.999 0 0 1 329.825 96z"],
49198  "traffic-light": [384, 512, [], "f637", "M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.
4919801-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"],
49199  "train": [448, 512, [], "f238", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z"],
49200  "transgender": [384, 512, [], "f224", "M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
49201  "transgender-alt": [480, 512, [], "f225", "M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
49202  "trash": [448, 512, [], "f1f8", "M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm415.2 56.7L394.8 467c-1.6 25.3-22.6 45-47.9 45H101.1c-25.3 0-46.3-19.7-47.9-45L32.8 140.7c-.4-6.9 5.1-12.7 12-12.7h358.5c6.8 0 12.3 5.8 11.9 12.7z"],
49203  "trash-alt": [448, 512, [], "f2ed", "M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm416 56v324c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V140c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12zm-272 68c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208z"],
49204  "tree": [384, 512, [], "f1bb", "M377.33 375.429L293.906 288H328c21.017 0 31.872-25.207 17.448-40.479L262.79 160H296c20.878 0 31.851-24.969 17.587-40.331l-104-112.003c-9.485-10.214-25.676-10.229-35.174 0l-104 112.003C56.206 134.969 67.037 160 88 160h33.21l-82.659 87.521C24.121 262.801 34.993 288 56 288h34.094L6.665 375.429C-7.869 390.655 2.925 416 24.025 416H144c0 32.781-11.188 49.26-33.995 67.506C98.225 492.93 104.914 512 120 512h144c15.086 0 21.776-19.069 9.995-28.494-19.768-15.814-33.992-31.665-33.995-67.496V416h119.97c21.05 0 31.929-25.309 17.36-40.571z"],
49205  "trophy": [576, 512, [], "f091", "M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z"],
49206  "truck": [640, 512, [], "f0d1", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"],
49207  "truck-loading": [640, 512, [], "f4de", "M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],
49208  "truck-monster": [640, 512, [], "f63b", "M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8
49208c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"],
49209  "truck-moving": [640, 512, [], "f4df", "M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z"],
49210  "truck-pickup": [640, 512, [], "f63c", "M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"],
49211  "tshirt": [640, 512, [], "f553", "M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z"],
49212  "tty": [512, 512, [], "f1e4", "M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"],
49213  "tv": [640, 512, [], "f26c", "M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c2
492136.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z"],
49214  "umbrella": [576, 512, [], "f0e9", "M557.011 267.631c-51.432-45.217-107.572-43.698-158.567 30.731-5.298 7.861-14.906 7.165-19.736 0-2.483-3.624-32.218-60.808-90.708-60.808-45.766 0-70.542 31.378-90.709 60.808-4.829 7.165-14.436 7.861-19.734 0-50.904-74.285-106.613-76.406-158.567-30.731-10.21 8.264-20.912-1.109-18.696-9.481C32.146 134.573 158.516 64.612 288.001 64.612c128.793 0 256.546 69.961 287.706 193.538 2.206 8.322-8.426 17.793-18.696 9.481zM256 261.001V416c0 17.645-14.355 32-32 32s-32-14.355-32-32c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 52.935 43.065 96 96 96s96-43.065 96-96V261.288c-21.836-10.806-45.425-9.737-64-.287zm64-211.007V32c0-17.673-14.327-32-32-32s-32 14.327-32 32v17.987a372.105 372.105 0 0 1 64 .007z"],
49215  "umbrella-beach": [640, 512, [], "f5ca", "M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z"],
49216  "underline": [448, 512, [], "f0cd", "M224.264 388.24c-91.669 0-156.603-51.165-156.603-151.392V64H39.37c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h137.39c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.813v172.848c0 53.699 28.314 79.444 76.317 79.444 46.966 0 75.796-25.434 75.796-79.965V64h-28.291c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h136.868c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.291v172.848c0 99.405-64.881 151.392-156.082 151.392zM16 448h416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16z"],
49217  "undo": [512, 512, [], "f0e2", "M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"],
49218  "undo-alt": [512, 512, [], "f2ea", "M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z"],
49219  "universal-access": [512, 512, [], "f29a", "M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z"],
49220  "university": [512, 512, [], "f19c", "M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"],
49221  "unlink": [512, 512, [], "f127", "M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z"],
49222  "unlock": [448, 512, [], "f09c", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"],
49223  "unlock-alt": [448, 512, [], "f13e", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z"],
49224  "upload": [512, 512, [], "f093", "M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"],
49225  "user": [448, 512, [], "f007", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"],
49226  "user-alt": [512, 512, [], "f406", "M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z"],
49227  "user-alt-slash": [640, 512, [], "f4fa", "M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z"],
49228  "user-astronaut": [448, 512, [], "f4fb", "M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 
492280S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z"],
49229  "user-check": [640, 512, [], "f4fc", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z"],
49230  "user-circle": [496, 512, [], "f2bd", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z"],
49231  "user-clock": [640, 512, [], "f4fd", "M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z"],
49232  "user-cog": [640, 512, [], "f4fe", "M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"],
49233  "user-edit": [640, 512, [], "f4ff", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z"],
49234  "user-friends": [640, 512, [], "f500", "M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c2
492346.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"],
49235  "user-graduate": [448, 512, [], "f501", "M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z"],
49236  "user-lock": [640, 512, [], "f502", "M320 320c0-11.1 3.1-21.4 8.1-30.5-4.8-.5-9.5-1.5-14.5-1.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h280.9c-5.5-9.5-8.9-20.3-8.9-32V320zm-96-64c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm384 32h-32v-48c0-44.2-35.8-80-80-80s-80 35.8-80 80v48h-32c-17.7 0-32 14.3-32 32v160c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32zm-80 0h-64v-48c0-17.6 14.4-32 32-32s32 14.4 32 32v48z"],
49237  "user-md": [448, 512, [], "f0f0", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z"],
49238  "user-minus": [640, 512, [], "f503", "M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"],
49239  "user-ninja": [448, 512, [], "f504", "M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z"],
49240  "user-plus": [640, 512, [], "f234", "M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"],
49241  "user-secret": [448, 512, [], "f21b", "M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7
49241h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"],
49242  "user-shield": [640, 512, [], "f505", "M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z"],
49243  "user-slash": [640, 512, [], "f506", "M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z"],
49244  "user-tag": [640, 512, [], "f507", "M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z"],
49245  "user-tie": [448, 512, [], "f508", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z"],
49246  "user-times": [640, 512, [], "f235", "M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"],
49247  "users": [640, 512, [], "f0c0", "M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"],
49248  "users-cog": [640, 512, [], "f509", "M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"],
49249  "utensil-spoon": [512, 512, [], "f2e5", "M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63
49249-62.9 83.6-172.8 28.5-227.8z"],
49250  "utensils": [416, 512, [], "f2e7", "M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z"],
49251  "vector-square": [512, 512, [], "f5cb", "M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z"],
49252  "venus": [288, 512, [], "f221", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"],
49253  "venus-double": [512, 512, [], "f226", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z"],
49254  "venus-mars": [576, 512, [], "f228", "M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
49255  "vial": [480, 512, [], "f492", "M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"],
49256  "vials": [640, 512, [], "f493", "M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z"],
49257  "video": [576, 512, [], "f03d", "M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z"],
49258  "video-slash": [640, 512, [], "f4e2", "M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-25
492587c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z"],
49259  "volleyball-ball": [495, 512, [], "f45f", "M223.3 243.4c-.9-37-8.6-72.8-22.7-105.7-90.8 42.4-157.5 122.4-180.3 216.8 13.4 30.8 32.9 58.3 56.9 81.1 22.7-79.2 74.2-147.8 146.1-192.2zM186.4 109c-15-26.4-34.5-50.1-57.4-70.7C38 88.1-15.8 191.2 4 300.5c33.4-83.1 98.4-152 182.4-191.5zM374 274.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5 57.3 59.3 91 138.2 93.5 222.7 32.5 17.7 67.3 29 102.9 33.2zm-124.7 9.5c-31.6 19.3-58.7 43.9-80.2 72.6 82 57.3 184.5 75.1 277.5 47.8 19.7-26.4 34.2-56.8 42.2-89.9-26.6 6.6-53.7 10.4-80.9 10.4-54.6-.1-108.9-14.1-158.6-40.9zM151 383.3c-15.2 26-25.7 54.4-32.1 84.2 37.6 23 81.7 36.5 129.1 36.5 61 0 116.7-22.1 159.9-58.6C295 461.5 204.6 420.6 151 383.3zM331.3 22.7c55.3 70.4 82.5 161.2 74.6 253.6 30.3.2 60.5-4.8 89.7-14.2 0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z"],
49260  "volume-down": [384, 512, [], "f027", "M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zM384 256c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z"],
49261  "volume-off": [256, 512, [], "f026", "M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971z"],
49262  "volume-up": [576, 512, [], "f028", "M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zm182.056-77.876C422.982.92 403.283 5.668 394.061 20.745c-9.221 15.077-4.473 34.774 10.604 43.995C468.967 104.063 512 174.983 512 256c0 73.431-36.077 142.292-96.507 184.206-14.522 10.072-18.129 30.01-8.057 44.532 10.076 14.528 30.016 18.126 44.531 8.057C529.633 438.927 576 350.406 576 256c0-103.244-54.579-194.877-137.944-245.859zM480 256c0-68.547-36.15-129.777-91.957-163.901-15.076-9.22-34.774-4.471-43.994 10.607-9.22 15.078-4.471 34.774 10.607 43.994C393.067 170.188 416 211.048 416 256c0 41.964-20.62 81.319-55.158 105.276-14.521 10.073-18.128 30.01-8.056 44.532 6.216 8.96 16.185 13.765 26.322 13.765a31.862 31.862 0 0 0 18.21-5.709C449.091 377.953 480 318.938 480 256zm-96 0c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z"],
49263  "walking": [320, 512, [], "f554", "M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z"],
49264  "wallet": [512, 512, [], "f555", "M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
49265  "warehouse": [640, 512, [], "f494", "M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"],
49266  "weight": [512, 512, [], "f496", "M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z"],
49267  "weight-hanging": [512, 512, [], "f5cd", "M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"],
49268  "wheelchair": [512, 512, [], "f193", "M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z"],
49269  "wifi": [640, 512, [], "f1eb", "M384 416c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm136.659-124.443c6.465-6.465 6.245-17.065-.564-23.167-113.793-101.985-286.526-101.869-400.19 0-6.809 6.102-7.029 16.702-.564 23.167l34.006 34.006c5.927 5.927 15.464 6.32 21.769.796 82.88-72.609 207.074-72.447 289.768 0 6.305 5.524 15.842 5.132 21.769-.796l34.006-34.006zm112.11-113.718c6.385-6.385 6.254-16.816-.35-22.973-175.768-163.86-449.134-163.8-624.837 0-6.604 6.157-6.735 16.589-.35 22.973l33.966 33.966c6.095 6.095 15.891 6.231 22.224.383 144.763-133.668 368.356-133.702 513.156 0 6.333 5.848 16.129 5.712 22.224-.383l33.967-33.966z"],
49270  "window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z"],
49271  "window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z"],
49272  "window-minimize": [512, 512, [], "f2d1", "M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z"],
49273  "window-restore": [512, 512, [], "f2d2", "M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H
4927376c-6.6 0-12 5.4-12 12v52h252v-52z"],
49274  "wine-glass": [288, 512, [], "f4e3", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z"],
49275  "wine-glass-alt": [288, 512, [], "f5ce", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z"],
49276  "won-sign": [576, 512, [], "f159", "M564 192c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-48.028l18.572-80.61c1.732-7.518-3.978-14.694-11.693-14.694h-46.107a11.998 11.998 0 0 0-11.736 9.5L450.73 128H340.839l-19.725-85.987a12 12 0 0 0-11.696-9.317H265.43a12 12 0 0 0-11.687 9.277L233.696 128H124.975L107.5 42.299a12 12 0 0 0-11.758-9.602H53.628c-7.686 0-13.39 7.124-11.709 14.624L60 128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h62.342l7.171 32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h83.856l40.927 182.624A12 12 0 0 0 148.492 480h56.767c5.583 0 10.428-3.85 11.689-9.288L259.335 288h55.086l42.386 182.712A12 12 0 0 0 368.496 480h56.826a12 12 0 0 0 11.694-9.306L479.108 288H564c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-70.146l7.373-32H564zm-425.976 0h80.757l-7.457 32h-66.776l-6.524-32zm45.796 150.029c-6.194 25.831-6.758 47.25-7.321 47.25h-1.126s-1.689-22.05-6.758-47.25L157.599 288h38.812l-12.591 54.029zM274.182 224l1.996-8.602c1.856-7.962 3.457-15.968 4.803-23.398h11.794c1.347 7.43 2.947 15.436 4.803 23.398l1.996 8.602h-25.392zm130.959 118.029c-5.068 25.2-6.758 47.25-6.758 47.25h-1.126c-.563 0-1.126-21.42-7.321-47.25L377.542 288h39.107l-11.508 54.029zM430.281 224h-67.42l-7.34-32h81.577l-6.817 32z"],
49277  "wrench": [512, 512, [], "f0ad", "M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"],
49278  "x-ray": [640, 512, [], "f497", "M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z"],
49279  "yen-sign": [384, 512, [], "f157", "M351.208 32h-65.277a12 12 0 0 0-10.778 6.724l-55.39 113.163c-14.513 34.704-27.133 71.932-27.133 71.932h-1.262s-12.62-37.228-27.133-71.932l-55.39-113.163A11.997 11.997 0 0 0 98.068 32H32.792c-9.057 0-14.85 9.65-10.59 17.643L102.322 200H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h88.162L152 293.228V320H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h108v92c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-92h108c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12H232v-26.772L251.838 256H340c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12h-58.322l80.12-150.357C366.058 41.65 360.266 32 351.208 32z"]
49280};
49281
49282bunker(function () {
49283  define('fas', icons);
49284});
49285
49286}());
49287
49288/*!
49289 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com
49290 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
49291 */
49292(function () {
49293'use strict';
49294
49295var _WINDOW = {};
49296try {
49297  if (typeof window !== 'undefined') _WINDOW = window;
49298  
49299} catch (e) {}
49300
49301var _ref = _WINDOW.navigator || {};
49302var _ref$userAgent = _ref.userAgent;
49303var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent;
49304
49305var WINDOW = _WINDOW;
49306
49307
49308
49309
49310
49311var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
49312
49313var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
49314
49315
49316
49317
49318
49319
49320
49321
49322
49323var PRODUCTION = function () {
49324  try {
49325    return "production" === 'production';
49326  } catch (e) {
49327    return false;
49328  }
49329}();
49330
49331var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
49332var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
49333
49334
49335
49336var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {
49337  return n + 'x';
49338})).concat(oneToTwenty.map(function (n) {
49339  return 'w-' + n;
49340}));
49341
49342function bunker(fn) {
49343  try {
49344    fn();
49345  } catch (e) {
49346    if (!PRODUCTION) {
49347      throw e;
49348    }
49349  }
49350}
49351
49352var w = WINDOW || {};
49353
49354if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
49355if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
49356if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
49357if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
49358
49359var namespace = w[NAMESPACE_IDENTIFIER];
49360
49361var _extends = Object.assign || function (target) {
49362  for (var i = 1; i < arguments.length; i++) {
49363    var source = arguments[i];
49364
49365    for (var key in source) {
49366      if (Object.prototype.hasOwnProperty.call(source, key)) {
49367        target[key] = source[key];
49368      }
49369    }
49370  }
49371
49372  return target;
49373};
49374
49375function define(prefix, icons) {
49376  var normalized = Object.keys(icons).reduce(function (acc, iconName) {
49377    var icon = icons[iconName];
49378    var expanded = !!icon.icon;
49379
49380    if (expanded) {
49381      acc[icon.iconName] = icon.icon;
49382    } else {
49383      acc[iconName] = icon;
49384    }
49385    return acc;
49386  }, {});
49387
49388  if (typeof namespace.hooks.addPack === 'function') {
49389    namespace.hooks.addPack(prefix, normalized);
49390  } else {
49391    namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized);
49392  }
49393
49394  /**
49395   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction
49396   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias
49397   * for `fas` so we'll easy the upgrade process for our users by automatically defining
49398   * this as well.
49399   */
49400  if (prefix === 'fas') {
49401    define('fa', icons);
49402  }
49403}
49404
49405var icons = {
49406  "address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"],
49407  "address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z"],
49408  "angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z"],
49409  "arrow-alt-circle-down": [512, 512, [], "f358", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"],
49410  "arrow-alt-circle-left": [512, 512, [], "f359", "M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z"],
49411  "arrow-alt-circle-right": [512, 512, [], "f35a", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z"],
49412  "arrow-alt-circle-up": [512, 512, [], "f35b", "M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z"],
49413  "bell": [448, 512, [], "f0f3", "M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z"],
49414  "bell-slash": [640, 512, [], "f1f6", "M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"],
49415  "bookmark": [384, 512, [], "f02e", "M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z"],
49416  "building": [448, 512, [], "f1ad", "M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z"],
49417  "calendar": [448, 512, [], "f133", "M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z"],
49418  "calendar-alt": [448, 512, [], "f073", "M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49419  "calendar-check": [448, 512, [], "f274", "M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z"],
49420  "calendar-minus": [448, 512, [], "f272", "M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49421  "calendar-plus": [448, 512, [], "f271", "M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.
494216 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49422  "calendar-times": [448, 512, [], "f273", "M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49423  "caret-square-down": [448, 512, [], "f150", "M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49424  "caret-square-left": [448, 512, [], "f191", "M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49425  "caret-square-right": [448, 512, [], "f152", "M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49426  "caret-square-up": [448, 512, [], "f151", "M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49427  "chart-bar": [512, 512, [], "f080", "M500 400c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v324h452zm-356-60v-72c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V140c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V204c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V108c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12z"],
49428  "check-circle": [512, 512, [], "f058", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z"],
49429  "check-square": [448, 512, [], "f14a", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z"],
49430  "circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z"],
49431  "clipboard": [384, 512, [], "f328", "M336 64h-80c0-35.29-28.71-64-64-64s-64 28.71-64 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h42v36c0 6.627 5.373 12 12 12h168c6.627 0 12-5.373 12-12v-36h42a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zM192 40c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24"],
49432  "clock": [512, 512, [], "f017", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z"],
49433  "clone": [512, 512, [], "f24d", "M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z"],
49434  "closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z"],
49435  "comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"],
49436  "comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z"],
49437  "comment-dots": [512, 512, [], "f4ad", "M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"],
49438  "comments": [576, 512, [], "f086", "M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z"],
49439  "compass": [496, 512, [], "f14e", "M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"],
49440  "copy": [448, 512, [], "f0c5", "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"],
49441  "copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064
49441c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z"],
49442  "credit-card": [576, 512, [], "f09d", "M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z"],
49443  "dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z"],
49444  "dot-circle": [512, 512, [], "f192", "M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"],
49445  "edit": [576, 512, [], "f044", "M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z"],
49446  "envelope": [512, 512, [], "f0e0", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"],
49447  "envelope-open": [512, 512, [], "f2b6", "M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z"],
49448  "eye": [576, 512, [], "f06e", "M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z"],
49449  "eye-slash": [576, 512, [], "f070", "M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z"],
49450  "file": [384, 512, [], "f15b", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z"],
49451  "file-alt": [384, 512, [], "f15c", "M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"],
49452  "file-archive": [384, 512, [], "f1c6", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM256 51.882L332.118 128H256V51.882zM336 464H48V48h79.714v16h32V48H208v104c0 13.255 10.745 24 24 24h104v288zM192.27 96h-32V64h32v32zm-32 0v32h-32V96h32zm0 64v32h-32v-32h32zm32 0h-32v-32h32v32zm1.909 105.678A12 12 0 0 0 182.406 256H160.27v-32h-32v32l-19.69 97.106C101.989 385.611 126.834 416 160 416c33.052 0 57.871-30.192 51.476-62.62l-17.297-87.702zM160.27 390.073c-17.918 0-32.444-12.105-32.444-27.036 0-14.932 14.525-27.036 32.444-27.036s32.444 12.105 32.444 27.036c0 14.931-14.526 27.036-32.444 27.036zm32-166.073h-32v-32h32v32z"],
49453  "file-audio": [384, 512, [], "f1c7", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z"],
49454  "file-code": [384, 512, [], "f1c9", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm101.677-115.115L116.854 320l32.822-28.885a8.793 8.793 0 0 0 .605-12.624l-17.403-18.564c-3.384-3.613-8.964-3.662-12.438-.401L62.78 313.58c-3.703 3.474-3.704 9.367.001 12.84l57.659 54.055a8.738 8.738 0 0 0 6.012 2.381 8.746 8.746 0 0 0 6.427-2.782l17.403-18.563a8.795 8.795 0 0 0-.605-12.626zm84.284-127.85l-24.401-7.084a8.796 8.796 0 0 0-10.905 5.998L144.04 408.061c-1.353 4.66 1.338 9.552 5.998 10.905l24.403 7.084c4.68 1.355 9.557-1.354 10.905-5.998l54.612-188.112c1.354-4.66-1.337-9.552-5.997-10.905zm87.258 92.545l-57.658-54.055c-3.526-3.307-9.099-3.165-12.439.401l-17.403 18.563a8.795 8.795 0 0 0 .605 12.625L267.146 320l-32.822 28.885a8.793 8.793 0 0 0-.605 12.624l17.403 18.564a8.797 8.797 0 0 0 12.439.401h-.001l57.66-54.055c3.703-3.473 3.703-9.366-.001-12.839z"],
49455  "file-excel": [384, 512, [], "f1c3", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z"],
49456  "file-image": [384, 512, [], "f1c5", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"],
49457  "file-pdf": [384, 512, [], "f1c1", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"],
49458  "file-powerpoint": [384, 512, [], "f1c4", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z"],
49459  "file-video": [384, 512, [], "f1c8", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z"],
49460  "file-word": [384, 512, [], "f1c2", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z"],
49461  "flag": [512, 512, [], "f024", "M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.
49461104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z"],
49462  "flushed": [496, 512, [], "f579", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"],
49463  "folder": [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-6 272H54c-3.314 0-6-2.678-6-5.992V117.992A5.993 5.993 0 0 1 54 112h134.118l64 64H458a6 6 0 0 1 6 6v212a6 6 0 0 1-6 6z"],
49464  "folder-open": [576, 512, [], "f07c", "M527.943 224H480v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h400a48.001 48.001 0 0 0 40.704-22.56l79.942-128c19.948-31.917-3.038-73.44-40.703-73.44zM54 112h134.118l64 64H426a6 6 0 0 1 6 6v42H152a48 48 0 0 0-41.098 23.202L48 351.449V117.993A5.993 5.993 0 0 1 54 112zm394 288H72l77.234-128H528l-80 128z"],
49465  "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"],
49466  "frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z"],
49467  "frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4
49467-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z"],
49468  "futbol": [496, 512, [], "f1e3", "M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z"],
49469  "gem": [576, 512, [], "f3a5", "M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z"],
49470  "grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z"],
49471  "grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"],
49472  "grin-alt": [496, 512, [], "f581", "M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z"],
49473  "grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z"],
49474  "grin-beam-sweat": [496, 512, [], "f583", "M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"],
49475  "grin-hearts": [496, 512, [], "f584", "M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z"],
49476  "grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z"],
49477  "grin-squint-tears": [512, 512, [], "f586", "M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3
49477-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z"],
49478  "grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z"],
49479  "grin-tears": [640, 512, [], "f588", "M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"],
49480  "grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
49481  "grin-tongue-squint": [496, 512, [], "f58a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z"],
49482  "grin-tongue-wink": [496, 512, [], "f58b", "M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z"],
49483  "grin-wink": [496, 512, [], "f58c", "M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"],
49484  "hand-lizard": [576, 512, [], "f258", "M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z"],
49485  "hand-paper": [448, 512, [], "f256", "M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z"],
49486  "hand-peace": [448, 512, [], "f25b", "M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z"],
49487  "hand-point-down": [448, 512, [], "f0a7", "M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"],
49488  "hand-point-left": [512, 512, [], "f0a5", "M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 48
494880 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"],
49489  "hand-point-right": [512, 512, [], "f0a4", "M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"],
49490  "hand-point-up": [448, 512, [], "f0a6", "M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"],
49491  "hand-pointer": [448, 512, [], "f25a", "M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v
49491-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z"],
49492  "hand-rock": [512, 512, [], "f255", "M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z"],
49493  "hand-scissors": [512, 512, [], "f257", "M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.8
4949312l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z"],
49494  "hand-spock": [512, 512, [], "f259", "M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z"],
49495  "handshake": [640, 512, [], "f2b5", "M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z"],
49496  "hdd": [576, 512, [], "f0a0", "M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z"],
49497  "heart": [512, 512, [], "f004", "M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z"],
49498  "hospital": [448, 512, [], "f0f8", "M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z"],
49499  "hourglass": [384, 512, [], "f254", "M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z"],
49500  "id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"],
49501  "id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"],
49502  "image": [512, 512, [], "f03e", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"],
49503  "images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z"],
49504  "keyboard": [576, 512, [], "f11c", "M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z"],
49505  "kiss": [496, 512, [], "f596", "M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
49506  "kiss-beam": [496, 512, [], "f597", "M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z"],
49507  "kiss-wink-heart": [504, 512, [], "f598", "M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.
495071-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z"],
49508  "laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
49509  "laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
49510  "laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-1
495105.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
49511  "laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
49512  "lemon": [512, 512, [], "f094", "M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z"],
49513  "life-ring": [512, 512, [], "f1cd", "M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z"],
49514  "lightbulb": [384, 512, [], "f0eb", "M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zM128 176c0-35.29 28.71-64 64-64 8.837 0 16-7.164 16-16s-7.163-16-16-16c-52.935 0-96 43.065-96 96 0 8.836 7.164 16 16 16s16-7.164 16-16zm64-128c70.734 0 128 57.254 128 128 0 77.602-37.383 60.477-80.98 160h-94.04C101.318 236.33 64 253.869 64 176c0-70.735 57.254-128 128-128m0-48C94.805 0 16 78.803 16 176c0 101.731 51.697 91.541 90.516 192.674 3.55 9.249 12.47 15.326 22.376 15.326h126.215c9.906 0 18.826-6.078 22.376-15.326C316.303 267.541 368 277.731 368 176 368 78.803 289.195 0 192 0z"],
49515  "list-alt": [512, 512, [], "f022", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z"],
49516  "map": [576, 512, [], "f279", "M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z"],
49517  "meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z"],
49518  "meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
49519  "meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"],
49520  "minus-square": [448, 512, [], "f146", "M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49521  "money-bill-alt": [640, 512, [], "f3d1", "M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z"],
49522  "moon": [512, 512, [], "f186", "M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z"],
49523  "newspaper": [576, 512, [], "f1ea", "M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z"],
49524  "object-group": [512, 512, [], "f247", "M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 
4952464h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z"],
49525  "object-ungroup": [576, 512, [], "f248", "M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z"],
49526  "paper-plane": [512, 512, [], "f1d8", "M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"],
49527  "pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z"],
49528  "play-circle": [512, 512, [], "f144", "M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z"],
49529  "plus-square": [448, 512, [], "f0fe", "M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
49530  "question-circle": [512, 512, [], "f059", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z"],
49531  "registered": [512, 512, [], "f25d", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.43
495311 32.431z"],
49532  "sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z"],
49533  "sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z"],
49534  "save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z"],
49535  "share-square": [576, 512, [], "f14d", "M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z"],
49536  "smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z"],
49537  "smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z"],
49538  "smile-wink": [496, 512, [], "f4da", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z"],
49539  "snowflake": [448, 512, [], "f2dc", "M438.237 355.927l-66.574-38.54 59.448-10.327c5.846-1.375 10.609-5.183 13.458-10.13 2.48-4.307 3.506-9.478 2.524-14.651-2.11-11.115-12.686-18.039-23.621-15.467l-85.423 31.115L255.914 256l82.136-41.926 85.423 31.115c10.936 2.572 21.512-4.352 23.621-15.467 2.111-11.115-5.046-22.209-15.981-24.781l-59.448-10.327 66.573-38.54c9.54-5.523 12.615-18.092 6.867-28.074-5.748-9.982-18.14-13.596-27.68-8.074l-66.574 38.54 20.805-56.787c3.246-10.782-2.758-22.542-13.413-26.268-10.654-3.725-21.922 1.997-25.168 12.779l-15.838 89.735-72.423 41.926V136l69.585-58.621c7.689-8.21 6.997-20.856-1.548-28.245-8.545-7.391-21.705-6.723-29.394 1.486l-38.644 46.46V20c0-11.046-9.318-20-20.813-20s-20.813 8.954-20.813 20v77.08l-38.644-46.46c-7.689-8.21-20.849-8.876-29.394-1.486-8.544 7.389-9.236 20.035-1.547 28.245L203.187 136v83.853l-72.423-41.926-15.838-89.736c-3.247-10.782-14.515-16.504-25.169-12.779-10.656 3.725-16.659 15.486-13.413 26.268l20.805 56.787-66.573-38.54c-9.54-5.523-21.933-1.908-27.68 8.074s-2.673 22.551 6.867 28.074l66.574 38.54-59.449 10.328C5.953 207.515-1.202 218.609.907 229.724c2.11 11.114 12.686 18.038 23.622 15.466l85.422-31.115L192.086 256l-82.136 41.926-85.423-31.115c-10.936-2.572-21.511 4.352-23.622 15.466-2.109 11.113 5.046 22.209 15.981 24.781l59.449 10.328-66.574 38.54C.223 361.449-2.852 374.018 2.896 384s18.14 13.597 27.68 8.074l66.574-38.54-20.805 56.786c-1.735 5.764-.828 11.805 2.02 16.751 2.48 4.307 6.433 7.784 11.392 9.517 10.655 3.725 21.923-1.997 25.169-12.779l15.838-89.736 72.423-41.926V376l-69.585 58.621c-7.69 8.21-6.997 20.855 1.547 28.245 8.544 7.388 21.705 6.723 29.394-1.487l38.644-46.46V492c0 11.046 9.318 20 20.813 20s20.813-8.954 20.813-20v-77.081l38.644 46.46c4.111 4.389 9.782 6.621 15.478 6.621 4.96 0 9.939-1.694 13.916-5.134 8.545-7.39 9.237-20.035 1.548-28.245L244.813 376v-83.853l72.423 41.926 15.838 89.736c3.246 10.782 14.514 16.504 25.168 12.779 10.653-3.726 16.659-15.487 13.412-26.268l-20.805-56.787 66.574 38.54c9.54 5.523 21.933 1.908 27.68-8.074 5.749-9.981 2.675-22.55-6.866-28.072z"],
49540  "square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"],
49541  "star": [576, 512, [], "f005", "M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19
49541-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"],
49542  "star-half": [576, 512, [], "f089", "M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z"],
49543  "sticky-note": [448, 512, [], "f249", "M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z"],
49544  "stop-circle": [512, 512, [], "f28d", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z"],
49545  "sun": [512, 512, [], "f185", "M220.116 487.936l-20.213-49.425a3.992 3.992 0 0 0-5.808-1.886l-45.404 28.104c-29.466 18.24-66.295-8.519-58.054-42.179l12.699-51.865a3.993 3.993 0 0 0-3.59-4.941l-53.251-3.951c-34.554-2.562-48.632-45.855-22.174-68.247L65.08 259.05a3.992 3.992 0 0 0 0-6.106l-40.76-34.497c-26.45-22.384-12.39-65.682 22.174-68.246l53.251-3.951a3.993 3.993 0 0 0 3.59-4.941L90.637 89.443c-8.239-33.656 28.581-60.42 58.054-42.179l45.403 28.104a3.993 3.993 0 0 0 5.808-1.887l20.213-49.425c13.116-32.071 58.638-32.081 71.758 0l20.212 49.424a3.994 3.994 0 0 0 5.809 1.887l45.403-28.104c29.464-18.236 66.297 8.513 58.054 42.179l-12.699 51.865a3.995 3.995 0 0 0 3.59 4.941l53.251 3.951c34.553 2.563 48.633 45.854 22.175 68.246l-40.76 34.497a3.993 3.993 0 0 0 0 6.107l40.76 34.496c26.511 22.441 12.322 65.689-22.175 68.247l-53.251 3.951a3.993 3.993 0 0 0-3.589 4.942l12.698 51.864c8.241 33.658-28.583 60.421-58.054 42.18l-45.403-28.104a3.994 3.994 0 0 0-5.809 1.887l-20.212 49.424c-13.159 32.178-58.675 31.993-71.757 0zm16.814-64.568l19.064 46.616 19.064-46.615c10.308-25.2 40.778-35.066 63.892-20.759l42.822 26.507-11.976-48.919c-6.475-26.444 12.38-52.339 39.487-54.349l50.226-3.726-38.444-32.536c-20.782-17.591-20.747-49.621.001-67.18l38.442-32.536-50.225-3.727c-27.151-2.015-45.95-27.948-39.488-54.349l11.978-48.919-42.823 26.507c-23.151 14.327-53.603 4.4-63.892-20.76l-19.064-46.615-19.064 46.617c-10.305 25.198-40.778 35.066-63.891 20.76l-42.823-26.508 11.977 48.918c6.474 26.446-12.381 52.338-39.488 54.35l-50.224 3.726 38.443 32.537c20.782 17.588 20.747 49.619 0 67.178L52.48 322.123l50.226 3.726c27.151 2.014 45.95 27.947 39.487 54.349l-11.977 48.919 42.823-26.507c23.188-14.355 53.622-4.352 63.891 20.758zM256 384c-70.58 0-128-57.421-128-128 0-70.58 57.42-128 128-128 70.579 0 128 57.42 128 128 0 70.579-57.421 128-128 128zm0-208c-44.112 0-80 35.888-80 80s35.888 80 80 80 80-35.888 80-80-35.888-80-80-80z"],
49546  "surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
49547  "thumbs-down": [512, 512, [], "f165", "M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z"],
49548  "thumbs-up": [512, 512, [], "f164", "M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"],
49549  "times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 
4954962.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"],
49550  "tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z"],
49551  "trash-alt": [448, 512, [], "f2ed", "M192 188v216c0 6.627-5.373 12-12 12h-24c-6.627 0-12-5.373-12-12V188c0-6.627 5.373-12 12-12h24c6.627 0 12 5.373 12 12zm100-12h-24c-6.627 0-12 5.373-12 12v216c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12V188c0-6.627-5.373-12-12-12zm132-96c13.255 0 24 10.745 24 24v12c0 6.627-5.373 12-12 12h-20v336c0 26.51-21.49 48-48 48H80c-26.51 0-48-21.49-48-48V128H12c-6.627 0-12-5.373-12-12v-12c0-13.255 10.745-24 24-24h74.411l34.018-56.696A48 48 0 0 1 173.589 0h100.823a48 48 0 0 1 41.16 23.304L349.589 80H424zm-269.611 0h139.223L276.16 50.913A6 6 0 0 0 271.015 48h-94.028a6 6 0 0 0-5.145 2.913L154.389 80zM368 128H80v330a6 6 0 0 0 6 6h276a6 6 0 0 0 6-6V128z"],
49552  "user": [448, 512, [], "f007", "M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z"],
49553  "user-circle": [496, 512, [], "f2bd", "M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z"],
49554  "window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z"],
49555  "window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z"],
49556  "window-minimize": [512, 512, [], "f2d1", "M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z"],
49557  "window-restore": [512, 512, [], "f2d2", "M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z"]
49558};
49559
49560bunker(function () {
49561  define('far', icons);
49562});
49563
49564}());
49565
49566/*!
49567 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com
49568 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
49569 */
49570(function () {
49571'use strict';
49572
49573var _WINDOW = {};
49574try {
49575  if (typeof window !== 'undefined') _WINDOW = window;
49576  
49577} catch (e) {}
49578
49579var _ref = _WINDOW.navigator || {};
49580var _ref$userAgent = _ref.userAgent;
49581var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent;
49582
49583var WINDOW = _WINDOW;
49584
49585
49586
49587
49588
49589var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
49590
49591var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
49592
49593
49594
49595
49596
49597
49598
49599
49600
49601var PRODUCTION = function () {
49602  try {
49603    return "production" === 'production';
49604  } catch (e) {
49605    return false;
49606  }
49607}();
49608
49609var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
49610var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
49611
49612
49613
49614var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {
49615  return n + 'x';
49616})).concat(oneToTwenty.map(function (n) {
49617  return 'w-' + n;
49618}));
49619
49620function bunker(fn) {
49621  try {
49622    fn();
49623  } catch (e) {
49624    if (!PRODUCTION) {
49625      throw e;
49626    }
49627  }
49628}
49629
49630var w = WINDOW || {};
49631
49632if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
49633if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
49634if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
49635if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
49636
49637var namespace = w[NAMESPACE_IDENTIFIER];
49638
49639var _extends = Object.assign || function (target) {
49640  for (var i = 1; i < arguments.length; i++) {
49641    var source = arguments[i];
49642
49643    for (var key in source) {
49644      if (Object.prototype.hasOwnProperty.call(source, key)) {
49645        target[key] = source[key];
49646      }
49647    }
49648  }
49649
49650  return target;
49651};
49652
49653function define(prefix, icons) {
49654  var normalized = Object.keys(icons).reduce(function (acc, iconName) {
49655    var icon = icons[iconName];
49656    var expanded = !!icon.icon;
49657
49658    if (expanded) {
49659      acc[icon.iconName] = icon.icon;
49660    } else {
49661      acc[iconName] = icon;
49662    }
49663    return acc;
49664  }, {});
49665
49666  if (typeof namespace.hooks.addPack === 'function') {
49667    namespace.hooks.addPack(prefix, normalized);
49668  } else {
49669    namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized);
49670  }
49671
49672  /**
49673   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction
49674   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias
49675   * for `fas` so we'll easy the upgrade process for our users by automatically defining
49676   * this as well.
49677   */
49678  if (prefix === 'fas') {
49679    define('fa', icons);
49680  }
49681}
49682
49683var icons = {
49684  "500px": [448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"],
49685  "accessible-icon": [448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"],
49686  "accusoft": [640, 512, [], "f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2 23.4-2.4 1.3-114.6 47.7-117.8 48.9-10.1 4-17.5 6.8-30.8-9.3m114.7-5.6s-115 50.4-117.5 51.6c-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2-2.3-.3-24.6-4.7-38-7.2m-326-181.3s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3v-1l-51.2-65.8"],
49687  "adn": [496, 512, [], "f170", "M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z"],
49688  "adversal": [512, 512, [], "f36a", "M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z"],
49689  "affiliatetheme": [512, 512, [], "f36b", "M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2
49689-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z"],
49690  "algolia": [448, 512, [], "f36c", "M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z"],
49691  "amazon": [448, 512, [], "f270", "M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"],
49692  "amazon-pay": [611, 512, [], "f42c", "M0 325.2c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7 40.7 20.4 83.2 35.6 127.4 46.3 20.9 5 41.9 9 63.2 11.8 31.5 4.2 63.2 6 95 5.2 17.4-.4 34.8-1.8 52.1-3.8 56.4-6.7 110.9-20.8 163.3-42.8 2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9-2.8 2.8-6.3 5.1-9.6 7.4-30.7 21.1-64.2 36.4-99.6 47.9-24.6 7.9-49.6 13.8-75.1 17.6-17.6 2.6-35.4 4.4-53.2 4.8-.8 0-1.7.2-2.5.3H294c-.8-.1-1.7-.3-2.5-.3-3.6-.2-7.2-.3-10.7-.4-16.9-.7-33.7-2.6-50.4-5.3-27.4-4.5-54.2-11.4-80.4-20.9-54.1-19.6-102.6-48.6-145.6-87-1.8-1.6-3-3.8-4.4-5.7v-2zM158 65c-1.4.2-2.9.4-4.3.6-14 1.7-26.6 6.9-38 15.1-2.4 1.7-4.6 3.5-7.1 5.4-.2-.5-.4-1-.4-1.4-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6H87.8c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3V215c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zm-47.4 41.9c0-1.5.4-2.4 1.7-3.3 13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9-1.2-.9-1.7-1.7-1.7-3.3.1-14.1 0-28.1 0-42.2 0-14 .1-28 0-42.1zM316.3 65c-1 .1-2 .3-2.9.4-9.8.5-19.4 1.7-28.9 4.1-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9 0 .4-.1.9-.2 1.4-.5-.1-.9 0-1.3-.1-10.5-2.5-21.1-4.3-32-4.9-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4.4-.4.9-.7 1.6-1.1.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0 2.7-.1 4.5-1.9 4.8-4.7.1-.9.1-1.9.1-2.8v-106c0-4.3-.2-8.6-.9-12.9-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7c0 1.3-.4 2.2-1.5 3-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8-6.3-2.5-10.4-6.9-12.4-13.3s-2-13-.1-19.4c2.5-8.3 8.4-13 16.4-15.6 8.1-2.6 16.5-3 24.8-2.2 8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3-.1 4.7-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3-6.8-2.3-13.9-3.3-21-3.9-13.1-1.1-26.2-.5-39.2 1.9-14.3 2.7-27.9 7.3-40 15.6-1.4 1-2.8 2.1-3.7 3.5-.7 1.1-.9 2.8-.5 4 .4 1.5 2.1 1.9 3.6 1.8.7 0 1.5 0 2.2-.1 7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9 4.8.3 9.7 1.4 14.4 2.7 5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1-.4 1-.8 2-1 3-.5 2.9 1.2 4.8 4.1 4.1 1.7-.4 3.6-1.3 4.8-2.5 4.4-4.3 8.9-8.6 12.7-13.4 12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM479.1 198.9c-12.9-35.7-25.8-71.5-38.7-107.2-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2
49692-22.9-.1-2.5 0-3.7 2-3.2 4.5.5 2.1 1.1 4.1 1.9 6.1 19.6 48.5 39.3 97.1 59.1 145.5 1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3-5.1 1.4-10.2 1.6-15.4 1.1-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8-.1 3.3-.1 6.6 0 9.9.1 5.5 2 8 7.4 8.9 5.6 1 11.3 1.9 16.9 2 17.1.4 30.7-6.5 39.5-21.4 3.5-5.9 6.7-12.1 9.2-18.4 23.7-59.8 47.1-119.7 70.6-179.6.7-1.8 1.3-3.6 1.6-5.5.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0-3.7 0-6.3 1.6-7.7 5.2-.5 1.4-1.1 2.7-1.6 4.1-11.6 33.3-23.2 66.6-34.8 100-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z"],
49693  "amilia": [448, 512, [], "f36d", "M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm-87.9 327.7c0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5V380c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7"],
49694  "android": [448, 512, [], "f17b", "M89.6 204.5v115.8c0 15.4-12.1 27.7-27.5 27.7-15.3 0-30.1-12.4-30.1-27.7V204.5c0-15.1 14.8-27.5 30.1-27.5 15.1 0 27.5 12.4 27.5 27.5zm10.8 157c0 16.4 13.2 29.6 29.6 29.6h19.9l.3 61.1c0 36.9 55.2 36.6 55.2 0v-61.1h37.2v61.1c0 36.7 55.5 36.8 55.5 0v-61.1h20.2c16.2 0 29.4-13.2 29.4-29.6V182.1H100.4v179.4zm248-189.1H99.3c0-42.8 25.6-80 63.6-99.4l-19.1-35.3c-2.8-4.9 4.3-8 6.7-3.8l19.4 35.6c34.9-15.5 75-14.7 108.3 0L297.5 34c2.5-4.3 9.5-1.1 6.7 3.8L285.1 73c37.7 19.4 63.3 56.6 63.3 99.4zm-170.7-55.5c0-5.7-4.6-10.5-10.5-10.5-5.7 0-10.2 4.8-10.2 10.5s4.6 10.5 10.2 10.5c5.9 0 10.5-4.8 10.5-10.5zm113.4 0c0-5.7-4.6-10.5-10.2-10.5-5.9 0-10.5 4.8-10.5 10.5s4.6 10.5 10.5 10.5c5.6 0 10.2-4.8 10.2-10.5zm94.8 60.1c-15.1 0-27.5 12.1-27.5 27.5v115.8c0 15.4 12.4 27.7 27.5 27.7 15.4 0 30.1-12.4 30.1-27.7V204.5c0-15.4-14.8-27.5-30.1-27.5z"],
49695  "angellist": [448, 512, [], "f209", "M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z"],
49696  "angrycreative": [640, 512, [], "f36e", "M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z"],
49697  "angular": [415, 512, [], "f420", "M169.7 268.1h76.2l-38.1-91.6-38.1 91.6zM207.8 32L0 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7L207.8 32zM338 373.8h-48.6l-26.2-65.4H152.6l-26.2 65.4H77.7L207.8 81.5 338 373.8z"],
49698  "app-store": [512, 512, [], "f36f", "M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z"],
49699  "app-store-ios": [448, 512, [], "f370", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52
49699c11 0 20 9 20 20 0 11.1-9 20-20 20z"],
49700  "apper": [640, 512, [], "f371", "M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z"],
49701  "apple": [376, 512, [], "f179", "M314.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C59.3 141.2 0 184.8 0 273.5c0 26.2 4.8 53.3 14.4 81.2 12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"],
49702  "apple-pay": [640, 512, [], "f415", "M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z"],
49703  "asymmetrik": [576, 512, [], "f372", "M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z"],
49704  "audible": [640, 512, [], "f373", "M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z"],
49705  "autoprefixer": [640, 512, [], "f41c", "M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z"],
49706  "avianex": [512, 512, [], "f374", "M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z"],
49707  "aviato": [640, 512, [], "f421", "M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-
497075.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z"],
49708  "aws": [640, 512, [], "f375", "M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z"],
49709  "bandcamp": [496, 512, [], "f2d5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm48.2 326.1h-181L199.9 178h181l-84.7 156.1z"],
49710  "behance": [576, 512, [], "f1b4", "M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z"],
49711  "behance-square": [448, 512, [], "f1b5", "M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z"],
49712  "bimobject": [448, 512, [], "f378", "M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z"],
49713  "bitbucket": [512, 512, [], "f171", "M23.1 32C14.2 31.9 7 38.9 6.9 47.8c0 .9.1 1.8.2 2.8L74.9 462c1.7 10.4 10.7 18 21.2 18.1h325.1c7.9.1 14.7-5.6 16-13.4l67.8-416c1.4-8.7-4.5-16.9-13.2-18.3-.9-.1-1.8-.2-2.8-.2L23.1 32zm285.3 297.3H204.6l-28.1-14
497136.8h157l-25.1 146.8z"],
49714  "bitcoin": [512, 512, [], "f379", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"],
49715  "bity": [496, 512, [], "f37a", "M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z"],
49716  "black-tie": [448, 512, [], "f27e", "M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z"],
49717  "blackberry": [512, 512, [], "f37b", "M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z"],
49718  "blogger": [448, 512, [], "f37c", "M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z"],
49719  "blogger-b": [448, 512, [], "f37d", "M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z"],
49720  "bluetooth": [448, 512, [], "f293", "M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z"],
49721  "bluetooth-b": [320, 512, [], "f294", "M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z"],
49722  "btc": [384, 512, [], "f15a", "M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"],
49723  "buromobelexperte": [448, 512, [], "f37f", "M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z"],
49724  "buysellads": [448, 512, [], "f20d", "M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 9
497241.6h90.8z"],
49725  "cc-amazon-pay": [576, 512, [], "f42d", "M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z"],
49726  "cc-amex": [576, 512, [], "f1f3", "M576 255.4c-37.9-.2-44.2-.9-54.5 5v-5c-45.3 0-53.5-1.7-64.9 5.2v-5.2h-78.2v5.1c-11.4-6.5-21.4-5.1-75.7-5.1v5.6c-6.3-3.7-14.5-5.6-24.3-5.6h-58c-3.5 3.8-12.5 13.7-15.7 17.2-12.7-14.1-10.5-11.6-15.5-17.2h-83.1v92.3h82c3.3-3.5 12.9-13.9 16.1-17.4 12.7 14.3 10.3 11.7 15.4 17.4h48.9c0-14.7.1-8.3.1-23 11.5.2 24.3-.2 34.3-6.2 0 13.9-.1 17.1-.1 29.2h39.6c0-18.5.1-7.4.1-25.3 6.2 0 7.7 0 9.4.1.1 1.3 0 0 0 25.2 152.8 0 145.9 1.1 156.7-4.5v4.5c34.8 0 54.8 2.2 67.5-6.1V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V228.3h26.6c4.2-10.1 2.2-5.3 6.4-15.3h19.2c4.2 10 2.2 5.2 6.4 15.3h52.9v-11.4c2.2 5 1.1 2.5 5.1 11.4h29.5c2.4-5.5 2.6-5.8 5.1-11.4v11.4h135.5v-25.1c6.4 0 8-.1 9.8.2 0 0-.2 10.9.1 24.8h66.5v-8.9c7.4 5.9 17.4 8.9 29.7 8.9h26.8c4.2-10.1 2.2-5.3 6.4-15.3h19c6.5 15 .2.5 6.6 15.3h52.8v-21.9c11.8 19.7 7.8 12.9 13.2 21.9h41.6v-92h-39.9v18.4c-12.2-20.2-6.3-10.4-11.2-18.4h-43.3v20.6c-6.2-14.6-4.6-10.8-8.8-20.6h-32.4c-.4 0-2.3.2-2.3-.3h-27.6c-12.8 0-23.1 3.2-30.7 9.3v-9.3h-39.9v5.3c-10.8-6.1-20.7-5.1-64.4-5.3-.1 0-11.6-.1-11.6 0h-103c-2.5 6.1-6.8 16.4-12.6 30-2.8-6-11-23.8-13.9-30h-46V157c-7.4-17.4-4.7-11-9-21.1H22.9c-3.4 7.9-13.7 32-23.1 53.9V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48v175.4zm-186.6-80.6c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm-19.9 130.9c9.2 3.3 11 9.5 11 18.4l-.1 13.8h-16.6l.1-11.5c0-11.8-3.8-13.8-14.8-13.8h-17.6l-.1 25.3h-16.6l.1-69.3h39.4c13 0 27.1 2.3 27.1 18.7-.1 7.6-4.2 15.3-11.9 18.4zm-6.3-15.4c0-6.4-5.6-7.4-10.7-7.4h-21v15.6h20.7c5.6 0 11-1.3 11-8.2zm181.7-7.1H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-99.2-.3v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5h38.5zm42.2 40.1h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-78.1-158.7c-17.4-.3-33.2-4.1-33.2 19.7 0 11.8 2.8 19.9 16.1 19.9h7.4l23.5-54.5h24.8l27.9 65.4v-65.4h25.3l29.1 48.1v-48.1h16.9v69H524l-31.2-51.9v51.9h-33.7l-6.6-15.3h-34.3l-6.4 15.3h-19.2c-22.8 0-33-11.8-33-34 0-23.3 10.5-35.3 34-35.3h16.1v15.2zm14.3 24.5h22.8l-11.2-27.6-11.6 27.6zm-72.6-39.6h-16.9v69.3h16.9v-69.3zm-38.1 37.3c9.5 3.3 11 9.2 11 18.4v13.5h-16.6c-.3-14.8 3.6-25.1-14.8-25.1h-18v25.1h-16.4v-69.3l39.1.3c13.3 0 27.4 2 27.4 18.4.1 8-4.3 15.7-11.7 18.7zm-6.7-1
497265.3c0-6.4-5.6-7.4-10.7-7.4h-21v15.3h20.7c5.7 0 11-1.3 11-7.9zm-59.5-7.4v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5h38.9zm-84.6 54.7v-54.2l-24 54.2H124l-24-54.2v54.2H66.2l-6.4-15.3H25.3l-6.4 15.3H1l29.7-69.3h24.5l28.1 65.7v-65.7h27.1l21.7 47 19.7-47h27.6v69.3h-16.8zM53.9 188.8l-11.5-27.6-11.2 27.6h22.7zm253 102.5c0 27.9-30.4 23.3-49.3 23.3l-.1 23.3h-32.2l-20.4-23-21.3 23h-65.4l.1-69.3h66.5l20.5 22.8 21-22.8H279c15.6 0 27.9 5.4 27.9 22.7zm-112.7 11.8l-17.9-20.2h-41.7v12.5h36.3v14.1h-36.3v13.8h40.6l19-20.2zM241 276l-25.3 27.4 25.3 28.1V276zm48.3 15.3c0-6.1-4.6-8.4-10.2-8.4h-21.5v17.6h21.2c5.9 0 10.5-2.8 10.5-9.2z"],
49727  "cc-apple-pay": [576, 512, [], "f416", "M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z"],
49728  "cc-diners-club": [576, 512, [], "f24c", "M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z"],
49729  "cc-discover": [576, 512, [], "f1f2", "M83 212.1c0 7.9-3.2 15.5-8.9 20.7-4.9 4.4-11.6 6.4-21.9 6.4H48V185h4.2c10.3 0 16.7 1.7 21.9 6.6 5.7 5 8.9 12.6 8.9 20.5zM504.8 184h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8 0-7.9-5.5-12.1-15.6-12.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM428 253h45.3v-13.8H444V217h28.3v-13.8H444V185h29.3v-14H428v82zm-86.2-82l35 84.2h8.6l35.5-84.2h-17.5l-22.2 55.2-21.9-55.2h-17.5zm-83 41.6c0 24.6 19.9 44.6 44.6 44.6 24.6 0 44.6-19.9 44.6-44.6 0-24.6-19.9-44.6-44.6-44.6-24.6 0-44.6 19.9-44.6 44.6zm-68-.5c0 32.5 33.6 52.5 63.3 38.2v-19c-19.3 19.3-46.8 5.8-46.8-19.2 0-23.7 26.7-39.1 46.8-19v-19c-30.2-15-63.3 6.8-63.3 38zm-33.9 28.3c-7.6 0-13.8-3.7-17.5-10.8l-10.3 9.9c17.8 26.1 56.6 18.2 56.6-11.3 0-13.1-5.4-19-23.6-25.6-9.6-3.4-12.3-5.9-12.3-10.3 0-8.7 14.5-14.1 24.9-2.5l8.4-10.8c-19.1-17.1-49.7-8.9-49.7 14.3 0 11.3 5.2 17.2 20.2 22.7 25.7 9.1 14.7 24.4 3.3 24.4zm-57.4-28.3c0-24.1-18-41.1-44.1-41.1H32v82h23.4c30.9 0 44.1-22.4 44.1-40.9zm23.4-41.1h-16v82h16v-82zM544 288c-33.3 20.8-226.4 124.4-416 160h401c8.2 0 15-6.8 15-15V288zm0-35l-25.9-34.5c12.1-2.5 18.7-10.6 18.7-23.2 0-28.5-30.3-24.4-52.9-24.4v82h16v-32.8h2.2l22.2 32.8H544z"],
49730  "cc-jcb": [576, 512, [], "f24b", "M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z"],
49731  "cc-mastercard": [576, 512, [], "f1f1", "M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.
497316-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z"],
49732  "cc-paypal": [576, 512, [], "f1f4", "M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z"],
49733  "cc-stripe": [576, 512, [], "f1f5", "M396.9 256.5c0 19.1-8.8 33.4-21.9 33.4-8.3 0-13.3-3-16.8-6.7l-.2-52.8c3.7-4.1 8.8-7 17-7 12.9-.1 21.9 14.5 21.9 33.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM122.2 281.1c0-42.3-54.3-34.7-54.3-50.7 0-5.5 4.6-7.7 12.1-7.7 10.8 0 24.5 3.3 35.3 9.1v-33.4c-11.8-4.7-23.5-6.5-35.3-6.5-28.8 0-48 15-48 40.2 0 39.3 54 32.9 54 49.9 0 6.6-5.7 8.7-13.6 8.7-11.8 0-26.9-4.9-38.9-11.3v33.9c13.2 5.7 26.6 8.1 38.8 8.1 29.6-.2 49.9-14.7 49.9-40.3zm68.9-86.9h-27v-30.8l-34.7 7.4-.2 113.9c0 21 15.8 36.5 36.9 36.5 11.6 0 20.2-2.1 24.9-4.7v-28.9c-4.5 1.8-27 8.3-27-12.6v-50.5h27v-30.3zm73.8 0c-4.7-1.7-21.3-4.8-29.6 10.5l-2.2-10.5h-30.7v124.5h35.5v-84.4c8.4-11 22.6-8.9 27.1-7.4v-32.7zm44.2 0h-35.7v124.5h35.7V194.2zm0-47.3l-35.7 7.6v28.9l35.7-7.6v-28.9zm122.7 108.8c0-41.3-23.5-63.8-48.4-63.8-13.9 0-22.9 6.6-27.8 11.1l-1.8-8.8h-31.3V360l35.5-7.5.1-40.2c5.1 3.7 12.7 9 25.1 9 25.4-.1 48.6-20.5 48.6-65.6zm112.2 1.2c0-36.4-17.6-65.1-51.3-65.1-33.8 0-54.3 28.7-54.3 64.9 0 42.8 24.2 64.5 58.8 64.5 17 0 29.7-3.9 39.4-9.2v-28.6c-9.7 4.9-20.8 7.9-34.9 7.9-13.8 0-26-4.9-27.6-21.5h69.5c.1-2 .4-9.4.4-12.9zm-51.6-36.1c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7z"],
49734  "cc-visa": [576, 512, [], "f1f0", "M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z"],
49735  "centercode": [512, 512, [], "f380", "M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z"],
49736  "chrome": [496, 512, [], "f268", "M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z"],
49737  "cloudscale": [448, 512, [], "f383", "M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2
49737-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z"],
49738  "cloudsmith": [332, 512, [], "f384", "M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z"],
49739  "cloudversify": [616, 512, [], "f385", "M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z"],
49740  "codepen": [512, 512, [], "f1cb", "M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z"],
49741  "codiepie": [472, 512, [], "f284", "M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z"],
49742  "connectdevelop": [576, 512, [], "f20e", "M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.
49742071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z"],
49743  "contao": [512, 512, [], "f26d", "M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z"],
49744  "cpanel": [640, 512, [], "f388", "M52.9 213.7h40l-6.2 23.6c-1.9 6.5-7.4 10.9-14.3 10.9H53.8c-24.9 0-24.7 37.4 0 37.4h11.3c4.2 0 7.6 3.9 6.4 8.3L64.4 320H52c-33.5 0-59-31.4-50.3-65.2 7.3-27 28.3-41.1 51.2-41.1M73.1 320L108 189.9c1.8-6.4 7.2-10.9 14.3-10.9h37c24.1 0 45.4 16.4 51 41.2 6.6 29.1-14.5 65.3-51.7 65.3h-32l6.4-23.8c1.8-6.2 7.3-10.8 14.3-10.8h10.3c12.4 0 20.8-11.7 18.3-22.6-2.1-9.2-9.9-14.8-18.3-14.8h-19.8L112 309.2c-1.9 6.2-7.4 10.7-14.2 10.7l-24.7.1m220.6-69.4c.3-1 1.9-5.3-2.1-5.3h-57.5c-9.7 0-16.6-8.9-14.2-18.5l3.5-13.4h77.9c18.8 0 33.3 17.6 28.5 36.8l-14 51.8c-2.8 10.6-12.2 17.8-23.4 17.8l-57.5-.2c-42.9 0-38.5-63.8.7-63.8H284l-3.5 13.2c-1.9 6.2-7.4 10.8-14.2 10.8h-21.6c-5.3 0-5.3 7.9 0 7.9h34.9c4.6 0 5.1-3.9 5.5-5.3l8.6-31.8m103.1-36.9c34.4 0 59.3 32.3 50.3 65.4l-8.8 33.1c-1.2 4.9-5.7 7.8-10.3 7.8h-19.1c-4.5 0-7.6-4-6.4-8.3l10.6-40c3.3-11.6-5.6-23.4-18.1-23.4h-19.8l-17.2 64c-1.2 4.8-5.6 7.8-10.4 7.8h-18.9c-4.2 0-7.6-3.9-6.4-8.3l26.2-98h48.3M498 251.6l-8 30c-.9 3.3 1.5 6.7 5.1 6.7h73.3l-5.7 21c-1.9 6.2-7.4 10.7-14.2 10.7h-66.7c-20 0-33.3-19-28.3-36.7l10.8-40c4.8-17.6 20.7-29.6 38.6-29.6h47.3c19 0 33.2 17.7 28.3 36.8l-3.2 12c-2.9 11-12.7 17.6-23.2 17.6h-53.4l3.5-13c1.6-6.2 7.2-10.8 14.2-10.8H538c2 0 3.3-1 3.9-3l.7-2.6c.7-2.7-1.3-5.1-3.9-5.1h-32.9c-4.1 0-6.9 2.1-7.8 6zm70.2 68.4l35.6-133.1c1.2-4.7 5.5-7.9 10.4-7.9h18.9c4.5 0 7.7 4 6.5 8.3l-26.5 98.2c-5.1 20.7-24.2 34.5-44.9 34.5"],
49745  "creative-commons": [496, 512, [], "f25e", "M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l3
497450.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z"],
49746  "creative-commons-by": [496, 512, [], "f4e7", "M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z"],
49747  "creative-commons-nc": [496, 512, [], "f4e8", "M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z"],
49748  "creative-commons-nc-eu": [496, 512, [], "f4e9", "M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z"],
49749  "creative-commons-nc-jp": [496, 512, [], "f4ea", "M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z"],
49750  "creative-commons-nd": [496, 512, [], "f4eb", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z"],
49751  "creative-commons-pd": [496, 512, [], "f4ec", "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z"],
49752  "creative-commons-pd-alt": [496, 512, [], "f4ed", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM135.5 323.3V186h68.2c33.7 0 50.5 15.5 50.5 46.5 0 9-3 46.5-57.1 46.5h-27v44.3h-34.6zm34.1-111.6v41.6h29.2c27.9 0 30-41.6-.9-41.6h-28.3zm93.9 111.6V186h53.2c21.4 0 70 5.2 70 68.6 0 63.5-48.6 68.6-70 68.6h-53.2zm34.1-108.5v79.7h19.9c24 0 34.5-15.3 34.5-39.9 0-42-31.2-39.9-35-39.9l-19.4.1z"],
49753  "creative-commons-remix": [496, 512, [], "f4ee", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z"],
49754  "creative-commons-sa": [496, 512, [], "f4ef", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z"],
49755  "creative-commons-sampling": [496, 512, [], "f4f0", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.
497556-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z"],
49756  "creative-commons-sampling-plus": [496, 512, [], "f4f1", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z"],
49757  "creative-commons-share": [496, 512, [], "f4f2", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z"],
49758  "css3": [512, 512, [], "f13c", "M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z"],
49759  "css3-alt": [384, 512, [], "f38b", "M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z"],
49760  "cuttlefish": [440, 512, [], "f38c", "M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z"],
49761  "d-and-d": [576, 512, [], "f38d", "M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.
497616-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z"],
49762  "dashcube": [448, 512, [], "f210", "M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z"],
49763  "delicious": [448, 512, [], "f1a5", "M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192v176z"],
49764  "deploydog": [512, 512, [], "f38e", "M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 
497640 64-28.8 64-64V128c0-35.2-28.8-64-64-64z"],
49765  "deskpro": [480, 512, [], "f38f", "M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z"],
49766  "deviantart": [320, 512, [], "f1bd", "M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z"],
49767  "digg": [512, 512, [], "f1a6", "M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z"],
49768  "digital-ocean": [512, 512, [], "f391", "M256 504v-96.1c101.8 0 180.8-100.9 141.7-208-14.3-39.6-46.1-71.4-85.8-85.7-107.1-38.8-208.1 39.9-208.1 141.7H8C8 93.7 164.9-32.8 335 20.3c74.2 23.3 133.6 82.4 156.6 156.6C544.8 347.2 418.6 504 256 504zm.3-191.4h-95.6v95.6h95.6v-95.6zm-95.6 95.6H87v73.6h73.7v-73.6zM87 346.6H25.4v61.6H87v-61.6z"],
49769  "discord": [448, 512, [], "f392", "M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z"],
49770  "discourse": [448, 512, [], "f393", "M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z"],
49771  "dochub": [416, 512, [], "f394", "M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z"],
49772  "docker": [640, 512, [], "f395", "M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z"],
49773  "draft2digital": [480, 512, [], "f396", "M369.9 425.4V371l47.1 27.2-47.1 27.2zM82.4 380.6c25.5-27.3 97.7-104.7 150.9-170 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7H82.4zm51.8-219.2c0 12.4-10 22.4-22.4 22.4-12.4 0-22.4-10-22.4-22.4 0-12.4 10-22.4 22.4-22.4 12.4 0 22.4 10.1 22.4 22.4M336 315.9v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480l144-81.9-144-82.2z"],
49774  "dribbble": [512, 512, [], "f17d", "M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z"],
49775  "dribbble-square": [448, 512, [], "f397", "M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-
497755.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z"],
49776  "dropbox": [528, 512, [], "f16b", "M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z"],
49777  "drupal": [448, 512, [], "f1a9", "M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z"],
49778  "dyalog": [416, 512, [], "f399", "M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z"],
49779  "earlybirds": [480, 512, [], "f39a", "M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z"],
49780  "ebay": [640, 512, [], "f4f4", "M405.2 263.8c-29.1.9-47.2 6.2-47.2 25.3 0 12.4 9.9 25.8 35 25.8 33.7 0 51.6-18.4 51.6-48.4v-3.3c-11.8 0-26.3.1-39.4.6m71.5 39.7c0 9.3.3 18.6 1 26.8h-29.8c-.8-6.9-1.1-13.6-1.1-20.2-16.1 19.8-35.3 25.5-61.9 25.5-39.5 0-60.6-20.9-60.6-45 0-35 28.8-47.3 78.6-48.4 13.7-.3 29-.4 41.7-.4v-3.4c0-23.4-15-33-41-33-19.3 0-33.6 8-35 21.8h-33.7c3.6-34.4 39.7-43.1 71.5-43.1 38.1 0 70.3 13.5 70.3 53.8v65.6zm-349-56.8c-2.3-54.7-87.5-56.6-94.4 0h94.4zm-95 21.4c3.5 58.3 79.2 57.4 91.2 21.6H157c-6.4 34.4-43 46.1-74.4 46.1-57.2 0-82.5-31.5-82.5-74 0-46.8 26.2-77.6 83-77.6 45.3 0 78.4 23.7 78.4 75.4v8.5H32.7zm211 45.7c29.8 0 50.2-21.5 50.2-53.8 0-32.4-20.4-53.8-50.2-53.8-29.6 0-50.2 21.4-50.2 53.8 0 32.3 20.6 53.8 50.2 53.8m-82.2-186h32.1v80.6c15.7-18.7 37.4-24.2 58.7-24.2 35.7 0 75.4 24.1 75.4 76.2 0 43.6-31.5 75.4-76 75.4-23.3 0-45.1-8.3-58.7-24.9 0 6.6-.4 13.2-1.1 19.5h-31.5c.5-10.2 1.1-22.8 1.1-33.1V127.8zM640 189.5l-99.2 194.8h-35.9l28.5-54.1-74.6-140.7h37.5l54.9 109.9L606 189.5h34z"],
49781  "edge": [512, 512, [], "f282", "M25.714 228.163c.111-.162.23-.323.342-.485-.021.162-.045.323-.065.485h-.277zm460.572 15.508c0-44.032-7.754-84.465-28.801-122.405C416.498 47.879 343.912 8.001 258.893 8.001 118.962 7.724 40.617 113.214 26.056 227.679c42.429-61.312 117.073-121.376 220.375-124.966 0 0 109.666 0 99.419 104.957H169.997c6.369-37.386 18.554-58.986 34.339-78.926-75.048 34.893-121.85 96.096-120.742 188.315.83 71.448 50.124 144.836 120.743 171.976 83.357 31.847 192.776 7.2 240.132-2
497811.324V363.307c-80.864 56.494-270.871 60.925-272.255-67.572h314.073v-52.064z"],
49782  "elementor": [448, 512, [], "f430", "M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z"],
49783  "ello": [496, 512, [], "f5f1", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z"],
49784  "ember": [640, 512, [], "f423", "M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1c-1.9-43.8-44.2-27.6-49-24-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-18.3-11-32.8 12.1-32.8 12.1s54.5-60.7 42.5-112c-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5c-17.2-.8-28.5 18.8-28.5 18.8s-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7c11.6 2.1 16.4 1 36.5-47.9 11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2c6.7-23.6 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7c8.6 15.6 30.9 5.3 30.9 5.3s15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6c12.4 5.1 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z"],
49785  "empire": [496, 512, [], "f1d1", "M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z"],
49786  "envira": [448, 512, [], "f299", "M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z"],
49787  "erlang": [640, 512, [], "f39d", "M21.7 246.4c-.1 86.8 29 159.5 78.7 212.1H0v-405h87.2c-41.5 50.2-65.6 116.2-65.5 192.9zM640 53.6h-83.6c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405zm-80.8 405s0-.1 0 0h-.2.2zm-3.1-405h.3l-.1-.1-.2.1zm-230.7 9.6c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2z"],
49788  "ethereum": [320, 512, [], "f42e", "M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z"],
49789  "etsy": [384, 512, [], "f2d7", "M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z"],
49790  "expeditedssl": [496, 512, [], "f23e", "M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 
497901.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z"],
49791  "facebook": [448, 512, [], "f09a", "M448 56.7v398.5c0 13.7-11.1 24.7-24.7 24.7H309.1V306.5h58.2l8.7-67.6h-67v-43.2c0-19.6 5.4-32.9 33.5-32.9h35.8v-60.5c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9h-58.4v67.6h58.4V480H24.7C11.1 480 0 468.9 0 455.3V56.7C0 43.1 11.1 32 24.7 32h398.5c13.7 0 24.8 11.1 24.8 24.7z"],
49792  "facebook-f": [264, 512, [], "f39e", "M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229"],
49793  "facebook-messenger": [448, 512, [], "f39f", "M224 32C15.9 32-77.5 278 84.6 400.6V480l75.7-42c142.2 39.8 285.4-59.9 285.4-198.7C445.8 124.8 346.5 32 224 32zm23.4 278.1L190 250.5 79.6 311.6l121.1-128.5 57.4 59.6 110.4-61.1-121.1 128.5z"],
49794  "facebook-square": [448, 512, [], "f082", "M448 80v352c0 26.5-21.5 48-48 48h-85.3V302.8h60.6l8.7-67.6h-69.3V192c0-19.6 5.4-32.9 33.5-32.9H384V98.7c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9H184v67.6h60.9V480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"],
49795  "firefox": [480, 512, [], "f269", "M478.1 235.3c-.7-4.5-1.4-7.1-1.4-7.1s-1.8 2-4.7 5.9c-.9-10.7-2.8-21.2-5.8-31.6-3.7-12.9-8.5-25.4-14.5-37.4-3.8-8-8.2-15.6-13.3-22.8-1.8-2.7-3.7-5.4-5.6-7.9-8.8-14.4-19-23.3-30.7-40-7.6-12.8-12.9-26.9-15.4-41.6-3.2 8.9-5.7 18-7.4 27.3-12.1-12.2-22.5-20.8-28.9-26.7C319.4 24.2 323 9.1 323 9.1S264.7 74.2 289.9 142c8.7 23 23.8 43.1 43.4 57.9 24.4 20.2 50.8 36 64.7 76.6-11.2-21.3-28.1-39.2-48.8-51.5 6.2 14.7 9.4 30.6 9.3 46.5 0 61-49.6 110.5-110.6 110.4-8.3 0-16.5-.9-24.5-2.8-9.5-1.8-18.7-4.9-27.4-9.3-12.9-7.8-24-18.1-32.8-30.3l-.2-.3 2 .7c4.6 1.6 9.2 2.8 14 3.7 18.7 4 38.3 1.7 55.6-6.6 17.5-9.7 28-16.9 36.6-14h.2c8.4 2.7 15-5.5 9-14-10.4-13.4-27.4-20-44.2-17-17.5 2.5-33.5 15-56.4 2.9-1.5-.8-2.9-1.6-4.3-2.5-1.6-.9 4.9 1.3 3.4.3-5-2.5-9.8-5.4-14.4-8.6-.3-.3 3.5 1.1 3.1.8-5.9-4-11-9.2-15-15.2-4.1-7.4-4.5-16.4-1-24.1 2.1-3.8 5.4-6.9 9.3-8.7 3 1.5 4.8 2.6 4.8 2.6s-1.3-2.5-2.1-3.8c.3-.1.5 0 .8-.2 2.6 1.1 8.3 4 11.4 5.8 2.1 1.1 3.8 2.7 5.2 4.7 0 0 1-.5.3-2.7-1.1-2.7-2.9-5-5.4-6.6h.2c2.3 1.2 4.5 2.6 6.6 4.1 1.9-4.4 2.8-9.2 2.6-14 .2-2.6-.2-5.3-1.1-7.8-.8-1.6.5-2.2 1.9-.5-.2-1.3-.7-2.5-1.2-3.7v-.1s.8-1.1 1.2-1.5c1-1 2.1-1.9 3.4-2.7 7.2-4.5 14.8-8.4 22.7-11.6 6.4-2.8 11.7-4.9 12.8-5.6 1.6-1 3.1-2.2 4.5-3.5 5.3-4.5 9-10.8 10.2-17.7.1-.9.2-1.8.3-2.8v-1.5c-.9-3.5-6.9-6.1-38.4-9.1-11.1-1.8-20-10.1-22.5-21.1v.1c-.4 1.1-.9 2.3-1.3 3.5.4-1.2.8-2.3 1.3-3.5v-.2c6-15.7 16.8-29.1 30.8-38.3.8-.7-3.2.2-2.4-.5 2.7-1.3 5.4-2.5 8.2-3.5 1.4-.6-6-3.4-12.6-2.7-4 .2-8 1.2-11.7 2.8 1.6-1.3 6.2-3.1 5.1-3.1-8.4 1.6-16.5 4.7-23.9 9 0-.8.1-1.5.5-2.2-5.9 2.5-11 6.5-15 11.5.1-.9.2-1.8.2-2.7-2.7 2-5.2 4.3-7.3 6.9l-.1.1c-17.4-6.7-36.3-8.3-54.6-4.7l-.2-.1h.2c-3.8-3.1-7.1-6.7-9.7-10.9l-.2.1-.4-.2c-1.2-1.8-2.4-3.8-3.7-6-.9-1.6-1.8-3.4-2.7-5.2 0-.1-.1-.2-.2-.2-.4 0-.6 1.7-.9 1.3v-.1c-3.2-8.3-4.7-17.2-4.4-26.2l-.2.1c-5.1 3.5-9 8.6-11.1 14.5-.9 2.1-1.6 3.3-2.2 4.5v-.5c.1-1.1.6-3.3.5-3.1-.1.2-.2.3-.3.4-1.5 1.7-2.9 3.7-3.9 5.8-.9 1.9-1.7 3.9-2.3 5.9-.1.3 0-.3 0-1s.1-2 0-1.7l-.3.7c-6.7 14.9-10.9 30.8-12.4 47.1-.4 2.8-.6 5.6-.5 8.3v.2c-4.8 5.2-9 11-12.7 17.1-12.1 20.4-21.1 42.5-26.8 65.6 4
49795-8.8 8.8-17.2 14.3-25.1C5.5 228.5 0 257.4 0 286.6c1.8-8.6 4.2-17 7-25.3-1.7 34.5 4.9 68.9 19.4 100.3 19.4 43.5 51.6 80 92.3 104.7 16.6 11.2 34.7 19.9 53.8 25.8 2.5.9 5.1 1.8 7.7 2.7-.8-.3-1.6-.7-2.4-1 22.6 6.8 46.2 10.3 69.8 10.3 83.7 0 111.3-31.9 113.8-35 4.1-3.7 7.5-8.2 9.9-13.3 1.6-.7 3.2-1.4 4.9-2.1l1-.5 1.9-.9c12.6-5.9 24.5-13.4 35.3-22.1 16.3-11.7 27.9-28.7 32.9-48.1 3-7.1 3.1-15 .4-22.2.9-1.4 1.7-2.8 2.7-4.3 18-28.9 28.2-61.9 29.6-95.9v-2.8c0-7.3-.6-14.5-1.9-21.6z"],
49796  "first-order": [448, 512, [], "f2b0", "M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z"],
49797  "first-order-alt": [496, 512, [], "f50a", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z"],
49798  "firstdraft": [384, 512, [], "f3a1", "M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z"],
49799  "flickr": [448, 512, [], "f16e", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"],
49800  "flipboard": [448, 512, [], "f44d", "M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z"],
49801  "fly": [384, 512, [], "f417", "M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4
49801-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z"],
49802  "font-awesome": [448, 512, [], "f2b4", "M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z"],
49803  "font-awesome-alt": [448, 512, [], "f35c", "M397.8 67.8c7.8 0 14.3 6.6 14.3 14.3v347.6c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6m0-35.9H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-58.5 139.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1z"],
49804  "font-awesome-flag": [448, 512, [], "f425", "M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z"],
49805  "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 7
498057.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"],
49806  "fonticons": [448, 512, [], "f280", "M0 32v448h448V32H0zm167.4 196h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4zM364 414.7H261.3v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm-21.9-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6-21.9 24.2z"],
49807  "fonticons-fi": [384, 512, [], "f3a2", "M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z"],
49808  "fort-awesome": [512, 512, [], "f286", "M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z"],
49809  "fort-awesome-alt": [512, 512, [], "f3a3", "M211.7 241.1v51.7c0 2.1-1.6 3.7-3.7 3.7h-22.2c-2.1 0-3.7-1.6-3.7-3.7v-51.7c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7zm114.5-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm-29.1 263.2c-.9.1-1.7.3-2.6.4-1 .2-2.1.3-3.1.5-.9.1-1.8.3-2.8.4-1 .1-2 .3-3 .4-1 .1-2 .2-2.9.3-1 .1-1.9.2-2.9.3-1 .1-2.1.2-3.1.3-.9.1-1.8.2-2.7.2-1.1.1-2.3.1-3.4.2-.8 0-1.7.1-2.5.1-1.3.1-2.6.1-3.9.1-.7 0-1.4.1-2.1.1-2 0-4 .1-6 .1s-4 0-6-.1c-.7 0-1.4 0-2.1-.1-1.3 0-2.6-.1-3.9-.1-.8 0-1.7-.1-2.5-.1-1.1-.1-2.3-.1-3.4-.2-.9-.1-1.8-.1-2.7-.2-1-.1-2.1-.2-3.1-.3-1-.1-1.9-.2-2.9-.3-1-.1-2-.2-2.9-.3-1-.1-2-.2-3-.4-.9-.1-1.8-.3-2.8-.4-1-.1-2.1-.3-3.1-.5-.9-.1-1.7-.3-2.6-.4-65.6-10.9-122.5-47.7-160-99.4-.2-.2-.3-.5-.5-.7-.8-1.1-1.6-2.2-2.3-3.3-.3-.4-.6-.8-.8-1.2-.7-1.1-1.4-2.1-2.1-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.4-2.1-2-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.3-2.2-2-3.3-.2-.4-.5-.8-.7-1.2-2.4-4-4.6-8.1-6.8-12.2-.1-.2-.2-.3-.3-.5-.6-1.1-1.1-2.2-1.7-3.3-.3-.6-.6-1.1-.8-1.7-.5-1-1-2.1-1.5-3.1-.3-.7-.6-1.3-.9-2-.5-1-.9-2-1.4-3l-.9-2.1c-.4-1-.9-2-1.3-3-.3-.7-.6-1.5-.9-2.2l-1.2-3c-.3-.8-.6-1.5-.9-2.3-.4-1-.8-2-1.1-3-.3-.9-.6-1.8-1-2.8-.6-1.6-1.1-3.3-1.7-4.9-.3-.9-.6-1.8-.9-2.8-.3-.9-.5-1.8-.8-2.7-.3-.9-.6-1.9-.8-2.8-.3-.9-.5-1.8-.8-2.7-.3-1-.5-1.9-.8-2.9-.2-.9-.5-1.8-.7-2.7-.3-1-.5-2-.7-3-.2-.9-.4-1.7-.6-2.6-.2-1.1-.5-2.2-.7-3.2-.2-.8-.3-1.6-.5-2.4-.3-1.3-.5-2.7-.8-4-.1-.6-.2-1.1-.3-1.7l-.9-5.7c-.1-.6-.2-1.3-.3-1.9-.2-1.3-.4-2.6-.5-3.9-.1-.8-.2-1.5-.3-2.3-.1-1.2-.3-2.4-.4-3.6-.1-.8-.2-1.6-.2-2.4-.1-1.2-.2-2.4-.3-3.5-.1-.8-.1-1.6-.2-2.4-.1-1.2-.2-2.4-.2-3.7 0-.8-.1-1.5-.
498091-2.3-.1-1.3-.1-2.7-.2-4 0-.7 0-1.3-.1-2 0-2-.1-4-.1-6 0-53.5 16.9-103 45.8-143.6 2.3-3.2 4.7-6.4 7.1-9.5 4.9-6.2 10.1-12.3 15.6-18 2.7-2.9 5.5-5.7 8.4-8.4 2.9-2.7 5.8-5.4 8.8-8 4.5-3.9 9.1-7.6 13.9-11.2 1.6-1.2 3.2-2.4 4.8-3.5C140 34.2 171.7 20.1 206 13c16.1-3.3 32.9-5 50-5s33.8 1.7 50 5c34.3 7 66 21.1 93.6 40.7 1.6 1.2 3.2 2.3 4.8 3.5 4.8 3.6 9.4 7.3 13.9 11.2 12 10.4 23 21.9 32.8 34.4 2.5 3.1 4.8 6.3 7.1 9.5C487.1 153 504 202.5 504 256c0 2 0 4-.1 6 0 .7 0 1.3-.1 2 0 1.3-.1 2.7-.2 4 0 .8-.1 1.5-.1 2.3-.1 1.2-.1 2.4-.2.7-.1.8-.1 1.6-.2 2.4-.1 1.2-.2 2.4-.3 3.5-.1.8-.2 1.6-.2 2.4-.1 1.2-.3 2.4-.4 3.6-.1.8-.2 1.5-.3 2.3-.2 1.3-.4 2.6-.5 3.9-.1.6-.2 1.3-.3 1.9l-.9 5.7c-.1.6-.2 1.1-.3 1.7-.2 1.3-.5 2.7-.8 4-.2.8-.3 1.6-.5 2.4-.2 1.1-.5 2.2-.7 3.2-.2.9-.4 1.7-.6 2.6-.2 1-.5 2-.7 3-.2.9-.5 1.8-.7 2.7-.3 1-.5 1.9-.8 2.9-.2.9-.5 1.8-.8 2.7-.3.9-.6 1.9-.8 2.8-.3.9-.5 1.8-.8 2.7-.3.9-.6 1.8-.9 2.8-.5 1.6-1.1 3.3-1.7 4.9-.3.9-.6 1.8-1 2.8-.4 1-.7 2-1.1 3-.3.8-.6 1.5-.9 2.3l-1.2 3c-.3.7-.6 1.5-.9 2.2-.4 1-.8 2-1.3 3l-.9 2.1c-.4 1-.9 2-1.4 3-.3.7-.6 1.3-.9 2-.5 1-1 2.1-1.5 3.1-.3.6-.6 1.1-.8 1.7-.6 1.1-1.1 2.2-1.7 3.3-.1.2-.2.3-.3.5-2.2 4.1-4.4 8.2-6.8 12.2-.2.4-.5.8-.7 1.2-.7 1.1-1.3 2.2-2 3.3-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2 3.2-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2.1 3.2-.3.4-.6.8-.8 1.2-.8 1.1-1.5 2.2-2.3 3.3-.2.2-.3.5-.5.7-37.6 54.7-94.5 91.4-160.1 102.4zm117.3-86.2c13-13 24.2-27.4 33.6-42.9v-71.3c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7V326h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-4.8-6.5-3.7-9.5-3.7v-30.7c6.7-1.6 13.8-2.8 20.8-2.8 8.8 0 16.8 3.5 25.4 3.5 3.7 0 22.4-.9 22.4-6.5V93.4c0-2.1-1.6-3.7-3.7-3.7-4.2 0-12.2 3.5-19.4 3.5-7.9 0-16.9-3.5-26.3-3.5-6.5 0-12.9.9-19.2 2.3v-3.9c4.4-2.1 7.4-6.7 7.4-11.5 0-16.8-25.4-16.8-25.4 0 0 4.8 3 9.5 7.4 11.5v90.2c-3 0-9.5-1.1-9.5 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v144H93.5v-25.8c0-2.1-1.6-3.7-3.7-3.7H67.7c-2.1 0-3.7 1.6-3.7 3.7v71.3c9.4 15.5 20.6 29.9 33.6 42.9 20.6 20.6 44.5 36.7 71.2 48 13.9 5.9 28.2 10.3 42.9 13.2v-75.8c0-58.6 88.6-58.6 88.6 0v75.8c14.7-2.9 29-7.4 42.9-13.2 26.7-11.3 50.6-27.4 71.2-48"],
49810  "forumbee": [448, 512, [], "f211", "M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z"],
49811  "foursquare": [368, 512, [], "f180", "M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z"],
49812  "free-code-camp": [576, 512, [], "f2c5", "M69.3 144.5c-41 68.5-36.4 163 1 227C92.5 409.7 120 423.9 120 438c0 6.8-6 13-12.8 13C87.7 451 8 375.5 8 253.2c0-111.5 78-186 97.1-186 6 0 14.9 4.8 14.9 11.1 0 12.7-28.3 28.6-50.7 66.2zm195.8 213.8c4.5 1.8 12.3 5.2 12.3-1.2 0-2.7-2.2-2.9-4.3-3.6-8.5-3.4-14-7.7-19.1-15.2-8.2-12.1-10.1-24.2-10.1-38.6 0-32.1 44.2-37.9 44.2-70 0-12.3-7.7-15.9-7.7-19.3 0-2.2.7-2.2 2.9-2.2 8 0 19.1 13.3 22.5 19.8 2.2 4.6 2.4 6 2.4 11.1 0 7-.7 14.2-.7 21.3 0 27 31.9 19.8 31.9 6.8 0-6-3.6-11.6-3.6-17.4 0-.7 0-1.2.7-1.2 3.4 0 9.4 7.7 11.1 10.1 5.8 8.9 8.5 20.8 8.5 31.4 0 32.4-29.5 49-29.5 56 0 1 2.9 7.7 12.1 1.9 29.7-15.1 53.1-47.6 53.1-89.8 0-33.6-8.7-57.7-32.1-82.6-3.9-4.1-16.4-16.9-22.5-16.9-8.2 0 7.2 18.6 7.2 31.2 0 7.2-4.8 12.3-12.3 12.3-11.6 0-14.5-25.4-15.9-33.3-5.8-33.8-12.8-58.2-46.4-74.1-10.4-5-36.5-11.8-36.5-2.2 0 2.4 2.7 4.1 4.6 5.1 9.2 5.6 19.6 21.4 19.6 38.2 0 46.1-57.7 88.2-57.7 136.2-.2 40.3 28.1 72.6 65.3 86.2zM470.4 67c-6 0-14.4 6.5-14.4 12.6 0 8.7 12.1 19.6 17.6 25.4 81.6 85.1 78.6 214.3 17.6 291-7 8.9-35.3 35.3-35.3 43.5 0 5.1 8.2 11.4 13.2 11.4 25.4 0 98.8-80.8 98.8-185.7C568 145.9 491.8 67 470.4 67zm-42.3 323.1H167c-9.4 0-15.5 7.5-15.5 16.4 0 8.5 7 15.5 15.5 15.5h261.1c9.4 0 11.9-7.5 11.9-16.4 0-8.5-3.5-15.5-11.9-15.5z"],
49813  "freebsd": [448, 512, [], "f3a4", "M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-
4981353.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z"],
49814  "fulcrum": [269, 512, [], "f50b", "M70.75 164.14l-35.38 43.55L0 164.14l35.38-43.55 35.37 43.55zM119.23 0L98.69 198.18 47.72 256l50.98 57.82L119.23 512V300.89L78.15 256l41.08-44.89V0zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55-35.38 43.55zm-48.48 46.97L191.5 256l-41.08 44.89V512l20.54-198.18L221.94 256l-50.98-57.82L150.42 0v211.11z"],
49815  "galactic-republic": [496, 512, [], "f50c", "M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z"],
49816  "galactic-senate": [512, 512, [], "f50d", "M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z"],
49817  "get-pocket": [448, 512, [], "f265", "M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z"],
49818  "gg": [512, 512, [], "f260", "M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z"],
49819  "gg-circle": [512, 512, [], "f261", "M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z"],
49820  "git": [448, 512, [], "f1d3", "M18.8 221.7c0 25.3 16.2 60 41.5 68.5v1c-18.8 8.3-24 50.6 1 65.8v1C34 367 16 384.3 16 414.2c0 51.5 48.8 65.8 91.5 65.8 52 0 90.7-18.7 90.7-76 0-70.5-101-44.5-101-82.8 0-13.5 7.2-18.7 19.7-21.3 41.5-7.7 67.5-40 67.5-82.2 0-7.3-1.5-14.2-4-21 6.7-1.5 13.2-3.3 19.7-5.5v-50.5c-17.2 6.8-35.7 11.8-54.5 11.8-53.8-31-126.8 1.3-126.8 69.2zm87.7 163.8c17 0 41.2 3 41.2 25 0 21.8-19.5 26.3-37.7 26.3-17.3 0-43.3-2.7-43.3-25.2.1-22.3 22.1-26.1 39.8-26.1zM103.3 256c-22 0-31.3-13-31.3-33.8 0-49.3 61-48.8 61-.5 0 20.3-8 34.3-29.7 34.3zM432 305.5v49c-13.3 7.3-30.5 9.8-45.5 9.8-53.5 0-59.8-42.2-59.8-85.7v-87.7h.5v-1c-7 0-7.3-1.6-24 1v-47.5h24c0-22.3.3-31-1.5-41.2h56.7c-2 13.8-1.5 27.5-1.5 41.2h51v47.5s-19.3-1-51-1V281c0 14.8 3.3 32.8 21.8 32.8 9.8 0 21.3-2.8 29.3-8.3zM286 68.7c0 18.7-14.5 36.2-33.8 36.2-19.8 0-34.5-17.2-34.5-36.2 0-19.3 14.5-36.7 34.5-36.7C272 32 286 50 286 68.7zm-6.2 74.5c-1.8 14.6-1.6 199.8 0 217.8h-55.5c1.6-18.1 1.8-203 0-217.8h55.5z"],
49821  "git-square": [448, 512, [], "f1d2", "M140.1 348.5c12.1 0 29.5 2.1 29.5 17.9 0 15.5-13.9 18.8-27 18.8-12.3 0-30.9-2-30.9-18s15.7-18.7 28.4-18.7zm-24.7-116.6c0 14.8 6.6 24.1 22.3 24.1 15.5 0 21.2-10 21.2-24.5.1-34.4-43.5-34.8-43.5.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-241 93.7c-12.3 4.8-25.5 8.4-38.9 8.4-38.5-22.1-90.7.9-90.7 49.5 0 18 11.6 42.9 29.6 48.9v.7c-13.4 5.9-17.1 36.1.7 47v.7c-19.5 6.4-32.3 18.8-32.3 40.2 0 36.8 34.8 47 65.4 47 37.1 0 64.8-13.4 64.8-54.3 0-50.4-72.1-31.8-72.1-59.1 0-9.6 5.2-13.4 14.1-15.2 29.6-5.5 48.2-28.6 48.2-58.7 0-5.2-1.1-10.2-2.9-15 4.8-1.1 9.5-2.3 14.1-3.9v-36.2zm56.8 1.8h-39.6c1.3 10.6 1.1 142.6 0 155.5h39.6c-1.1-12.8-1.2-145.1 0-155.5zm4.5-53.3c0-13.4-10-26.2-24.1-26.2-14.3 0-24.6 12.5-24.6 26.2 0 13.6 10.5 25.9 24.6 25.9 13.7 0 24.1-12.5 24.1-25.9zm104.3 53.3h-36.4c0-9.8-.4-19.6 1.1-29.5h-40.5c1.3 7.3 1.1 13.6 1.1 29.5h-17.1v33.9c11.9-1.9 12.1-.7 17.1-.7v.7h-.4v62.7c0 31.1 4.5 61.2 42.7 61.2 10.7 0 23-1.8 32.5-7v-35c-5.7 3.9-13.9 5.9-20.9 5.9-13.2 0-15.5-12.9-15.5-23.4v-65.2c22.7 0 36.4.7 36.4.7v-33.8z"],
49822  "github": [496, 512, [], "f09b", "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"],
49823  "github-alt": [480, 512, [], "f113", "M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"],
49824  "github-square": [448, 512, [], "f092", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z"],
49825  "gitkraken": [592, 512, [], "f3a6", "M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z"],
49826  "gitlab": [512, 512, [], "f296", "M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z"],
49827  "gitter": [384, 512, [], "f426", "M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z"],
49828  "glide": [448, 512, [], "f2a5", "M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z"],
49829  "glide-g": [448, 512, [], "f2a6", "M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 11
498297.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z"],
49830  "gofore": [400, 512, [], "f3a7", "M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z"],
49831  "goodreads": [448, 512, [], "f3a8", "M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z"],
49832  "goodreads-g": [384, 512, [], "f3a9", "M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z"],
49833  "google": [488, 512, [], "f1a0", "M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"],
49834  "google-drive": [512, 512, [], "f3aa", "M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z"],
49835  "google-play": [512, 512, [], "f3ab", "M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z"],
49836  "google-plus": [496, 512, [], "f2b3", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm-70.7 372c-68.8 0-124-55.5-124-124s55.2-124 124-124c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1s34.2 78.1 77.2 78.1c32.6 0 64.9-19.1 70.1-53.3h-70.1v-42.6h116.9c1.3 6.8 1.9 13.6 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zm230.2-106.2v35.5H372v-35.5h-35.5v-35.5H372v-35.5h35.5v35.5h35.2v35.5h-35.2z"],
49837  "google-plus-g": [640, 512, [], "f0d5", "M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z"],
49838  "google-plus-square": [448, 512, [], "f0d4", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z"],
49839  "google-wallet": [448, 512, [], "f1ee", "M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z"],
49840  "gratipay": [496, 512, [], "f184", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z"],
49841  "grav": [512, 512, [], "f2d6", "M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z"],
49842  "gripfire": [384, 512, [], "f3ac", "M171.8 503.8c0-5.3 4.8-12.2 4.8-22.3 0-15.2-13-39.9-78.1-86.6C64.2 365.8 32 336.4 32 286.6 32 171.9 179.1 110.1 179.1 18c0-3.3-.2-6.7-.6-10 5.1 2.4 39.1 43.3 39.1 90.4 0 80.5-105.1 129.2-105.1 203 
498420 26.9 16.6 47.2 32.6 69.5 22.5 30.2 44.2 56.9 44.2 86.5-.1 14.5-4.4 29.7-17.5 46.4zm146-241.4c1.5 8.4 2.2 16.6 2.2 24.6 0 51.8-29.4 97.5-67.3 136.8-1 1-2.2 2.4-3.2 2.4-3.6 0-35.5-41.6-35.5-53.2 0 0 41.8-55.7 41.8-96.9 0-10.8-2.7-21.7-9.1-33.4-1.5 32.3-55.7 87.7-58.1 87.7-2.7 0-17.9-22-17.9-42.1 0-5.3 1-10.7 3.2-15.8 2.4-5.5 56.6-72 56.6-116.7 0-6.2-1-12-3.4-17.1l-4-7.2c16.7 6.5 82.6 64.1 94.7 130.9"],
49843  "grunt": [384, 512, [], "f3ad", "M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm79.2 233.7c2.2 2.3 1.5 5.3.9 6.8-1.1 2.7-5.5 11.6-13 19.8-2.7 2.9-6.6 4.6-11 4.6-4.3 0-8.7-1.6-11.8-4.3-2.3-2.1-10.2-9.5-13.7-18.6-1.3-3.4-1-6.1.9-8.1 1.3-1.3 4-2.9 9.5-2.9H160c4.1 0 7 .9 8.8 2.7zm62.9-187.9c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm17.8-8.8c7.5-11.4 25.4-26 44.9-37 3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6-.1.1 0 0 0 0zM263 421.4c1.9 1.9 2.2 4.6.9 7.9-3.5 8.9-11.4 16.1-13.7 18.1-3.1 2.6-7.4 4.2-11.8 4.2s-8.3-1.6-11-4.5c-7.5-8-12-16.7-13-19.3-.6-1.5-1.3-4.4.9-6.7 1.7-1.8 4.7-2.7 8.9-2.7h29.4c5.4.1 8.1 1.7 9.4 3zm-98.3-251.5c9.9 6 18.8 8.1 27.3 8.3 8.5-.2 17.4-2.3 27.3-8.3 0 0-14.5 17.7-27.2 17.8h-.2c-12.7-.2-27.2-17.8-27.2-17.8zm184.5 147.4c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59z"],
49844  "gulp": [256, 512, [], "f3ae", "M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.
498446 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z"],
49845  "hacker-news": [448, 512, [], "f1d4", "M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"],
49846  "hacker-news-square": [448, 512, [], "f3af", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"],
49847  "hackerrank": [464, 512, [], "f5f7", "M453.5 128C439.01 103.05 261.13 0 232.16 0 203.2 0 25.25 102.79 10.84 128c-14.41 25.21-14.49 230.8 0 256.01C25.33 409.21 203.22 512 232.16 512s206.85-102.92 221.33-128c14.48-25.08 14.49-231.05.01-256zM292.13 414.22c-3.96 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32.04-2.02-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 5.96-5.74 5.94-10.13-.03-20.27-.11-30.41-.08-4.1.01-5.87-1.53-5.74-6.11.92-33.44 2.96-84.02-.15-212.67v-3.17c-9.67-.35-16.38-.96-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69 3.96 0 41.17 35.78 38.27 38.69-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2.03 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46.02 4.57 1.72 4.5 5.38-3.65 191.29-.66 177.94-.66 210.34 8.87.35 16.82.96 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z"],
49848  "hips": [640, 512, [], "f452", "M0 80.2c0-1.8.9-2.7 2.7-2.7h40.9c1.9 0 2.8.9 2.8 2.7v81.2c15.2-7.7 31.7-11.5 49.8-11.4 24 .1 44.2 6.2 60.3 18 18.7 13.5 28 31.9 28 55.3v136.1c0 1.9-.9 2.8-2.7 2.8h-27.3c-9.1 0-16.4-7.3-16.4-16.3V223.3c0-.9 2.7-27-45.8-27-48.6 0-45.8 26.2-45.8 27v136.1c0 1.9-.9 2.8-2.8 2.8h-41c-1.8 0-2.7-.9-2.7-2.8V80.2zm497.7 221.5c13.7 10.2 34.1 19.1 58.4 19.1 23.3 0 32.8-4.5 36.5-13.6 3-7.9-.6-16.1-12.2-21.2l-53.6-23.5c-21.4-9.4-33.8-24-37.2-43.6-5.7-33.7 22.2-53.3 22.7-53.7 13.2-9.6 32-15.4 58.5-15.4 19 0 37.4 3.3 55.1 9.9 1.3.5 1.9 1.3 1.9 2.6V207c0 2.1-2.3 3.4-4 2.4-39.7-20.7-76.6-12.3-84-6.8-6.6 4.9-6 12.5 2.6 16.1L600 244c16.5 7.1 28.1 18.4 34.9 34.1 5.5 12.6 6.6 25.6 3.1 39.1-9.6 36.9-44.9 45.5-45.6 45.8-10.5 3.1-23.6 4.3-36.3 4.3-16.6 0-32.6-2.7-48.2-8.2-9.7-3.4-14.6-10.3-14.6-20.7V304c0-2.1 2.3-3.7 4.4-2.3zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zm-124.6 38.7c0 1.9-.9 2.8-2.8 2.8h-40.9c-1.6 0-2.7-1.4-2.7-2.8V157.6c0-1.4 1.1-2.8 2.7-2.8h40.9c1.9 0 2.8.9 2.8 2.8v201.8M228.3 72.5c15.9 0 28.9 12.7 28.9 28.9 0 15.8-12.7 28.9-28.9 28.9s-28.9-13.3-28.9-28.9c.1-16 13-28.9 28.9-28.9"],
49849  "hire-a-helper": [512, 512, [], "f3b0", "M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z"],
49850  "hooli": [640, 512, [], "f427", "M508.4 352h57.9V156.7L508.4 184v168zm73.7-110.5V352H640V241.5h-57.9zm-250.7-8.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.9 110.9v-31c-48.8-54.6-39-76.
498501-35.3-79.2 13.5-11.4 37.5-8 64.4 2.1L65.2 184v63.3c13.1 14.7 30.5 31.5 53.5 50.4l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zm-39.7 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm185.7-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm173.5-73c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zM144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8v16zm-21.4 0v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.5-21.7-38.5-31.5V352h57.9zm59.7.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3v5.3l-19.4.8z"],
49851  "hornbill": [509, 512, [], "f592", "M75.37 370.3c2.14 15.83-5.77 31.98-20.94 39.29-18.85 9.1-41.55 1.17-50.68-17.68-9.08-18.83-1.13-41.58 17.7-50.65 7.05-3.4 14.63-4.42 21.85-3.38-78.28-111.35 52-190.53 52-190.53-5.86 43.04-8.24 91.16-8.24 91.16-67.31 41.45.92 64.06 39.81 72.87 19.77 53.62 71.18 91.94 131.66 91.94 1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zM183.38 42.6c.89-7-.1-14.33-3.39-21.15-9.1-18.84-31.82-26.78-50.66-17.69-18.86 9.1-26.8 31.83-17.69 50.68 6.98 14.47 22.02 22.42 37.18 21.23-22.55 29.91-53.83 89.57-52.42 190.03l21.84-.15c-.02-.9-.14-1.77-.14-2.68 0-58.95 36.37-109.33 87.85-130.16 8.01-37.75 30.74-114.3 73.84-44.29 0 0 48.14 2.38 91.18 8.24 0-.01-77.84-128.03-187.59-54.06zm304.18 134.17c18.84-9.09 26.81-31.81 17.7-50.65-9.1-18.85-31.83-26.77-50.67-17.69-15.27 7.37-23.19 23.69-20.87 39.64-31.71-21.94-89.84-49.05-183.45-47.74l.14 22.5c2.7-.15 5.39-.41 8.14-.41 59.3 0 109.9 36.8 130.49 88.76 39.1 9.02 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 48.96-194.61 6.43.5 13.07-.49 19.31-3.5zM373.05 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15 0 60.27-38.05 111.55-91.39 131.45-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 50.97.31 4.72 1.45 9.45 3.64 13.97 9.06 18.89 31.8 26.78 50.64 17.71 18.86-9.1 26.79-31.83 17.7-50.65-6.56-13.62-20.26-21.43-34.45-21.35z"],
49852  "hotjar": [448, 512, [], "f3b1", "M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z"],
49853  "houzz": [414, 512, [], "f27c", "M258.9 330.7H154.3V480H0V32h109.5v104.5l305.1 85.6V480H258.9V330.7z"],
49854  "html5": [384, 512, [], "f13b", "M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z"],
49855  "hubspot": [512, 512, [], "f3b2", "M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z"],
49856  "imdb": [448, 512, [], "f2d8", "M350.5 288.7c0 5.4 1.6 14.4-6.2 14.4-1.6 0-3-.8-3.8-2.4-2.2-5.1-1.1-44.1-1.1-44.7 0-3.8-1.1-12.7 4.9-12.7 7.3 0 6.2 7.3 6.2 12.7v32.7zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4v-49.3zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM21.3 228.8c-.1.1-.2.3-.3.4h.3v-.4zM97 192H64v127.8h33V192zm113.3 0h-43.1l-7.6 59.9c-2.7-20-5.4-40.1-8.7-59.9h-42.8v127.8h29v-84.5l12.2 84.5h20.6l11.6-86.4v86.4h28.7V192zm86.3 45.3c0-8.1.3-16.8-1.4-24.4-4.3-22.5-31.4-20.9-49-20.9h-24.6v127.8c86.1.1 75 6 75-82.5zm85.9 17.3c0-17.3-.8-30.1-22.2-30.1-8.9 0-14.9 2.7-20.9 9.2V192h-31.7v127.8h29.8l1.9-8.1c5.7 6.8 11.9 9.8 20.9 9.8 19.8 0 22.2-15.2 22.2-30.9v-36z"],
49857  "instagram": [448, 512, [], "f16d", "M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"],
49858  "internet-explorer": [512, 512, [], "f26b", "M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722
49858-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z"],
49859  "ioxhost": [640, 512, [], "f208", "M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z"],
49860  "itunes": [448, 512, [], "f3b4", "M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z"],
49861  "itunes-note": [384, 512, [], "f3b5", "M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z"],
49862  "java": [377, 512, [], "f4e4", "M121.6 396s-19.6 11.4 13.9 15.2c40.6 4.6 61.3 4 106-4.5 0 0 11.8 7.4 28.2 13.8C169.5 463.4 42.9 418 121.6 396m-12.2-56.1s-21.9 16.2 11.6 19.7c43.3 4.5 77.6 4.8 136.8-6.6 0 0 8.2 8.3 21.1 12.8-121.3 35.5-256.3 2.9-169.5-25.9m103.2-95.1c24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3.1 0-175.2 43.8-91.5 140.2m132.6 192.6s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2 204.2 33.2 372.4-14.9 319.4-38.8M131 281.8s-93.1 22.1-33 30.1c25.4 3.4 76 2.6 123.1-1.3 38.5-3.2 77.2-10.2 77.2-10.2s-13.6 5.8-23.4 12.5c-94.5 24.9-277 13.3-224.5-12.1 44.5-21.4 80.6-19 80.6-19m167 93.3c96.1-49.9 51.6-97.9 20.6-91.4-7.6 1.6-11 3-11 3s2.8-4.4 8.2-6.3c61.3-21.6 108.5 63.6-19.8 97.3 0-.1 1.5-1.4 2-2.6M240 0s53.2 53.2-50.5 135c-83.1 65.6-19 103.1 0 145.8-48.5-43.8-84.1-82.3-60.2-118.2C164.4 110.1 261.5 84.5 240 0m-99.5 510.4c92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6"],
49863  "jedi-order": [448, 512, [], "f50e", "M231.89 335.72l31.44-45.89-20.18 55.5 62.56 9.09-62.56 9.08 24.22 47.43s-30.22-31.77-34.49-36.25c1.76 68.78 2.19 85.7 2.19 85.7s154.4-71.65 68.62-230.09c0 0 106.97-118.07 10.09-190.73 0 0 165.5 99.91 60.55 271.46 0 0 8
498636.78-84.77 41.37-170.54 0 0 78.71 111.01-17.16 233.11 0 0 26.24-16.15 49.45-77.71 0 0-16.93 183.26-221.96 185.66v.02h-4.08v-.02C16.93 479.14 0 295.88 0 295.88c23.21 61.56 49.44 77.71 49.44 77.71-95.87-122.11-17.15-233.11-17.15-233.11-45.41 85.78 41.38 170.54 41.38 170.54-104.95-171.56 60.54-271.46 60.54-271.46-96.88 72.66 10.09 190.73 10.09 190.73-85.78 158.44 68.62 230.09 68.62 230.09s.43-16.93 2.19-85.7l-34.48 36.25 24.22-47.43-62.56-9.08 62.56-9.09-20.18-55.5 31.44 45.89c2.25-87.85 7.82-305.82 7.85-306.85l.01-2.43.02 1 .03-1 .01 2.43c.05 1.72 5.61 219.2 7.86 306.85z"],
49864  "jenkins": [512, 512, [], "f3b6", "M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z"],
49865  "joget": [496, 512, [], "f3b7", "M227.5 468.7c-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 3
498651.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1M66.1 143.9C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9-55.5-1.4-81.7-20.8-58.5-48.2 23.2-27.4 51.1-40.7 68.9-51.2 17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1m-29.2-18c-71.9 116.6-35.6 269.3 81 341.2 116.6 71.9 269.3 35.6 341.2-80.9 71.9-116.6 35.6-269.4-81-341.2-40.5-25.1-85.5-37-129.9-37C165 8 83.8 49.9 36.9 125.9m244.4 110.4c-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5c10.5-6.4 31.9-14 13.4-24.6-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6"],
49866  "joomla": [448, 512, [], "f1aa", "M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z"],
49867  "js": [448, 512, [], "f3b8", "M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"],
49868  "js-square": [448, 512, [], "f3b9", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"],
49869  "jsfiddle": [576, 512, [], "f1cc", "M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-
498695.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z"],
49870  "kaggle": [291, 512, [], "f5fa", "M291.72 508.98c-.51 2.01-2.51 3.01-6.01 3.01h-66.92c-4.02 0-7.51-1.75-10.52-5.27L97.74 366.14l-30.82 29.32v109.02c0 5.02-2.51 7.52-7.52 7.52H7.52C2.5 512 0 509.5 0 504.48V7.51C0 2.51 2.5 0 7.52 0H59.4c5.01 0 7.52 2.51 7.52 7.51v306l132.32-133.82c3.51-3.5 7.02-5.26 10.52-5.26h69.18c6.96 0 7.9 7.87 5.26 10.52L144.35 320.26l145.86 181.2"],
49871  "keybase": [412, 512, [], "f4f5", "M177.2 430.9c0 9.8-8 17.8-17.8 17.8s-17.8-8-17.8-17.8 8-17.8 17.8-17.8c9.8-.1 17.8 7.9 17.8 17.8zM270 413c-9.8 0-17.8 8-17.8 17.8s8 17.8 17.8 17.8 17.8-8 17.8-17.8-8-17.8-17.8-17.8zm142.3-36c0 38.9-7.6 73.9-22.2 103h-27.3c23.5-38.7 30.5-94.8 22.4-134.3-16.1 29.5-52.1 38.6-85.9 28.8-127.8-37.5-192.5 19.7-234.6 50.3l18.9-59.3-39.9 42.3c4.8 26.7 15.7 51.3 31.2 72.3H46.1c-9.7-15.8-17.2-33-22.2-51.3L.1 454c0-74.9-5.5-147.6 61.5-215.2 20.2-20.4 43.7-36.2 69.1-46.7-6.8-13.5-9.5-29.2-7.8-46l-19.9-1.2c-17.9-1.1-31.6-16.5-30.6-34.4v-.1L74 84.2c1.1-17.1 15.4-30.6 32.5-30.6 1.3 0-.3-.1 28.2 1.7 13.9.8 21.5 9.8 22.8 11.4 7.1-10.4 14.5-20.5 24.6-34.5l20.6 12.1c-13.6 29-9.1 36.2-9 36.3 3.9 0 13.9-.5 32.4 5.7C246 92.9 262 107 271 126c.4.9 15.5 29 1.2 62.6 19 6.1 51.3 19.9 82.4 51.8 36.6 37.6 57.7 87.4 57.7 136.6zM128 122.3c3.2-10 7.7-19.7 13.1-29.4.1-2 2.2-13.1-7.8-13.8-28.5-1.8-26.3-1.6-26.7-1.6-4.6 0-8.3 3.5-8.6 8.1l-1.6 26.2c-.3 4.7 3.4 8.8 8.1 9.1l23.5 1.4zm25.8 61.8c5.6 9.4 14.1 16.1 22.3 20 0-21.2 28.5-41.9 52.8-17.5l8.4 10.3c20.8-18.8 19.4-45.3 12.1-60.9-13.8-29.1-46.9-32-54.3-31.7-10.3.4-19.7-5.4-23.7-15.3-13.7 21.2-37.2 62.5-17.6 95.1zm82.9 68.4L217 268.6c-1.9 1.6-2.2 4.4-.6 6.3l8.9 10.9c1 1.2 3.8 2.7 6.3.6l19.6-16 5.5 6.8c4.9 6 13.8-1.4 9-7.3-63.6-78.3-41.5-51.1-55.3-68.1-4.7-6-13.9 1.4-9 7.3 1.9 2.3 18.4 22.6 19.8 24.3l-9.6 7.9c-4.6 3.8 2.6 13.3 7.4 9.4l9.7-8 8 9.8zm118.4 25.7c-16.9-23.7-42.6-46.7-73.4-60.4-7.9-3.5-15-6.1-22.9-8.6-2 2.2-4.1 4.3-6.4 6.2l31.9 39.2c10.4 12.7 8.5 31.5-4.2 41.9-1.3 1.1-13.1 10.7-29 4.9-2.9 2.3-10.1 9.9-22.2 9.9-8.6 0-16.6-3.8-22.1-10.5l-8.9-10.9c-6.3-7.8-7.9-17.9-5-26.8-8.2-9.9-8.3-21.3-4.6-30-7.2-1.3-26.7-6.2-42.7-21.4-55.8 20.7-88 64.4-101.3 91.2-14.9 30.2-18.8 60.9-19.9 90.2 8.2-8.7-3.9 4.1 114-120.9l-29.9 93.6c57.8-31.1 124-36 197.4-14.4 23.6 6.9 45.1 1.6 56-13.9 11.1-15.6 8.5-37.7-6.8-59.3zM110.6 107.3l15.6 1 1-15.6-15.6-1-1 15.6z"],
49872  "keycdn": [512, 512, [], "f3ba", "M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160"],
49873  "kickstarter": [448, 512, [], "f3bb", "M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z"],
49874  "kickstarter-k": [384, 512, [], "f3bc", "M147.3 114.4c0-56.2-32.5-82.4-73.4
49874-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z"],
49875  "korvue": [446, 512, [], "f42f", "M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z"],
49876  "laravel": [640, 512, [], "f3bd", "M637.5 241.6c-4.2-4.8-62.8-78.1-73.1-90.5-10.3-12.4-15.4-10.2-21.7-9.3-6.4.9-80.5 13.4-89.1 14.8-8.6 1.5-14 4.9-8.7 12.3 4.7 6.6 53.4 75.7 64.2 90.9l-193.7 46.4L161.2 48.7c-6.1-9.1-7.4-12.3-21.4-11.6-14 .6-120.9 9.5-128.5 10.2-7.6.6-16 4-8.4 22s129 279.6 132.4 287.2c3.4 7.6 12.2 20 32.8 15 21.1-5.1 94.3-24.2 134.3-34.7 21.1 38.3 64.2 115.9 72.2 127 10.6 14.9 18 12.4 34.3 7.4 12.8-3.9 199.6-71.1 208-74.5 8.4-3.5 13.6-5.9 7.9-14.4-4.2-6.2-53.5-72.2-79.3-106.8 17.7-4.7 80.6-21.4 87.3-23.3 7.9-2 9-5.8 4.7-10.6zm-352.2 72c-2.3.5-110.8 26.5-116.6 27.8-5.8 1.3-5.8.7-6.5-1.3-.7-2-129-266.7-130.8-270-1.8-3.3-1.7-5.9 0-5.9s102.5-9 106-9.2c3.6-.2 3.2.6 4.5 2.8 0 0 142.2 245.4 144.6 249.7 2.6 4.3 1.1 5.6-1.2 6.1zm306 57.4c1.7 2.7 3.5 4.5-2 6.4-5.4 2-183.7 62.1-187.1 63.6-3.5 1.5-6.2 2-10.6-4.5s-62.4-106.8-62.4-106.8L518 280.6c4.7-1.5 6.2-2.5 9.2 2.2 2.9 4.8 62.4 85.5 64.1 88.2zm12.1-134.1c-4.2.9-73.6 18.1-73.6 18.1l-56.7-77.8c-1.6-2.3-2.9-4.5 1.1-5s68.4-12.2 71.3-12.8c2.9-.7 5.4-1.5 9 3.4 3.6 4.9 52.6 67 54.5 69.4 1.8 2.3-1.4 3.7-5.6 4.7z"],
49877  "lastfm": [512, 512, [], "f202", "M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z"],
49878  "lastfm-square": [448, 512, [], "f203", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z"],
49879  "leanpub": [576, 512, [], "f212", "M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z"],
49880  "less": [640, 512, [], "f41d", "M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-
4988051.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z"],
49881  "line": [448, 512, [], "f3c0", "M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z"],
49882  "linkedin": [448, 512, [], "f08c", "M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"],
49883  "linkedin-in": [448, 512, [], "f0e1", "M100.3 480H7.4V180.9h92.9V480zM53.8 140.1C24.1 140.1 0 115.5 0 85.8 0 56.1 24.1 32 53.8 32c29.7 0 53.8 24.1 53.8 53.8 0 29.7-24.1 54.3-53.8 54.3zM448 480h-92.7V334.4c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7V480h-92.8V180.9h89.1v40.8h1.3c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3V480z"],
49884  "linode": [448, 512, [], "f2b8", "M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z"],
49885  "linux": [448, 512, [], "f17c", "M196.1 123.6c-.2-1.4 1.9-2.3 3.2-2.9 1.7-.7 3.9-1 5.5-.1.4.2.8.7.6 1.1-.4 1.2-2.4 1-3.5 1.6-1 .5-1.8 1.7-3 1.7-1 .1-2.7-.4-2.8-1.4zm24.7-.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm214.7 310.2c-.5 8.2-6.5 13.8-13.9 18.3-14.9 9-37.3 15.8-50.9 32.2l-2.6-2.2 2.6 2.2c-14.2 16.9-31.7 26.6-48.3 27.9-16.5 1.3-32-6.3-40.3-23v-.1c-1.1-2.1-1.9-4.4-2.5-6.7-21.5 1.2-40.2-5.3-55.1-4.1-22 1.2
49885-35.8 6.5-48.3 6.6-4.8 10.6-14.3 17.6-25.9 20.2-16 3.7-36.1 0-55.9-10.4l1.6-3-1.6 3c-18.5-9.8-42-8.9-59.3-12.5-8.7-1.8-16.3-5-20.1-12.3-3.7-7.3-3-17.3 2.2-31.7 1.7-5.1.4-12.7-.8-20.8-.6-3.9-1.2-7.9-1.2-11.8 0-4.3.7-8.5 2.8-12.4 4.5-8.5 11.8-12.1 18.5-14.5 6.7-2.4 12.8-4 17-8.3 5.2-5.5 10.1-14.4 16.6-20.2-2.6-17.2.2-35.4 6.2-53.3 12.6-37.9 39.2-74.2 58.1-96.7 16.1-22.9 20.8-41.3 22.5-64.7C158 103.4 132.4-.2 234.8 0c80.9.1 76.3 85.4 75.8 131.3-.3 30.1 16.3 50.5 33.4 72 15.2 18 35.1 44.3 46.5 74.4 9.3 24.6 12.9 51.8 3.7 79.1 1.4.5 2.8 1.2 4.1 2 1.4.8 2.7 1.8 4 2.9 6.6 5.6 8.7 14.3 10.5 22.4 1.9 8.1 3.6 15.7 7.2 19.7 11.1 12.4 15.9 21.5 15.5 29.7zM220.8 109.1c3.6.9 8.9 2.4 13 4.4-2.1-12.2 4.5-23.5 11.8-23 8.9.3 13.9 15.5 9.1 27.3-.8 1.9-2.8 3.4-3.9 4.6 6.7 2.3 11 4.1 12.6 4.9 7.9-9.5 10.8-26.2 4.3-40.4-9.8-21.4-34.2-21.8-44 .4-3.2 7.2-3.9 14.9-2.9 21.8zm-46.2 18.8c7.8-5.7 6.9-4.7 5.9-5.5-8-6.9-6.6-27.4 1.8-28.1 6.3-.5 10.8 10.7 9.6 19.6 3.1-2.1 6.7-3.6 10.2-4.6 1.7-19.3-9-33.5-19.1-33.5-18.9 0-24 37.5-8.4 52.1zm-9.4 20.9c1.5 4.9 6.1 10.5 14.7 15.3 7.8 4.6 12 11.5 20 15 2.6 1.1 5.7 1.9 9.6 2.1 18.4 1.1 27.1-11.3 38.2-14.9 11.7-3.7 20.1-11 22.7-18.1 3.2-8.5-2.1-14.7-10.5-18.2-11.3-4.9-16.3-5.2-22.6-9.3-10.3-6.6-18.8-8.9-25.9-8.9-14.4 0-23.2 9.8-27.9 14.2-.5.5-7.9 5.9-14.1 10.5-4.2 3.3-5.6 7.4-4.2 12.3zm-33.5 252.8L112.1 366c-6.8-9.2-13.8-14.8-21.9-16-7.7-1.2-12.6 1.4-17.7 6.9-4.8 5.1-8.8 12.3-14.3 18-7.8 6.5-9.3 6.2-19.6 9.9-6.3 2.2-11.3 4.6-14.8 11.3-2.7 5-2.1 12.2-.9 20 1.2 7.9 3 16.3.6 23.9v.2c-5 13.7-5 21.7-2.6 26.4 7.9 15.4 46.6 6.1 76.5 21.9 31.4 16.4 72.6 17.1 75.3-18 2.1-20.5-31.5-49-41-68.9zm153.9 35.8c3.2-11 6.3-21.3 6.8-29 .8-15.2 1.6-28.7 4.4-39.9 3.1-12.6 9.3-23.1 21.4-27.3 2.3-21.1 18.7-21.1 38.3-12.5 18.9 8.5 26 16 22.8 26.1 1 0 2-.1 4.2 0 5.2-16.9-14.3-28-30.7-34.8 2.9-12 2.4-24.1-.4-35.7-6-25.3-22.6-47.8-35.2-59-2.3-.1-2.1 1.9 2.6 6.5 11.6 10.7 37.1 49.2 23.3 84.9-3.9-1-7.6-1.5-10.9-1.4-5.3-29.1-17.5-53.2-23.6-64.6-11.5-21.4-29.5-65.3-37.2-95.7-4.5 6.4-12.4 11.9-22.3 15-4.7 1.5-9.7 5.5-15.9 9-13.9 8-30 8.8-42.4-1.2-4.5-3.6-8-7.6-12.6-10.3-1.6-.9-5.1-3.3-6.2-4.1-2 37.8-27.3 85.3-39.3 112.7-8.3 19.7-13.2 40.8-13.8 61.5-21.8-29.1-5.9-66.3 2.6-82.4 9.5-17.6 11-22.5 8.7-20.8-8.6 14-22 36.3-27.2 59.2-2.7 11.9-3.2 24 .3 35.2 3.5 11.2 11.1 21.5 24.6 29.9 0 0 24.8 14.3 38.3 32.5 7.4 10 9.7 18.7 7.4 24.9-2.5 6.7-9.6 8.9-16.7 8.9 4.8 6 10.3 13 14.4 19.6 37.6 25.7 82.2 15.7 114.3-7.2zM415 408.5c-10-11.3-7.2-33.1-17.1-41.6-6.9-6-13.6-5.4-22.6-5.1-7.7 8.8-25.8 19.6-38.4 16.3-11.5-2.9-18-16.3-18.8-29.5-.3.2-.7.3-1 .5-7.1 3.9-11.1 10.8-13.7 21.1-2.5 10.2-3.4 23.5-4.2 38.7-.7 11.8-6.2 26.4-9.9 40.6-3.5 13.2-5.8 25.2-1.1 36.3 7.2 14.5 19.5 20.4 33.7 19.3 14.2-1.1 30.4-9.8 43.6-25.5 22-26.6 62.3-29.7 63.2-46.5.3-5.1-3.1-13-13.7-24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4 3.9-3.4 5.9-6.3 3.1-6.6-2.8-.3-2.6 2.6-6 5.1-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2-10.4 0-18.7-4.8-24.9-9.7-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"],
49886  "lyft": [512, 512, [], "f3c3", "M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z"],
49887  "magento": [448, 512, [], "f3c4", "M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z"],
49888  "mailchimp": [428, 512, [], "f59e", "M426.56 323.72c-3.09-6.59-8.97-11.13-16.35-12.88-2.47-11.27-5.88-16.8-6.19-17.63 1.3-1.48 2.56-2.97 2.84-3.32 10.42-12.93 3.62-31.86-14.19-36.33-10.02-9.64-19.09-14.17-26.54-17.9-7.14-3.57-4.29-2.17-10.99-5.19-1.78-8.71-2.37-28.97-5.2-43.19-2.54-12.79-7.66-22.06-15.56-28.15-3.16-6.84-7.59-13.74-12.93-18.81 24.84-38.08 31.38-75.69 13.19-95.39-8.1-8.77-20.13-12.93-34.52-12.93-20.26 0-45.18 8.26-70.34 23.54 0 0-16.38-13.18-16.73-13.46-70.08-55.19-268.28 188.7-198.32 242l18.06 13.8c-11.34 31.54 4.43 69.14 37.29 81.21 7.26 2.67 15.14 3.97 23.31 3.51 0 0 53.09 97.36 165.1 97.39 129.58.04 162.55-126.72 162.9-127.86 0 .01 10.5-15.51 5.17-28.41zM20.12 267.95c-14.2-23.96 10.51-73.19 28.09-101.17C91.66 97.63 163.98 43.06 196.82 50.85l9.03-3.46c.03.03 24.67 20.85 24.7 20.87 16.97-10.19 38.58-20.57 58.8-22.64-12.3 2.77-27.29 9.15-45.05 20.01-.43.25-42.02 28.32-67.43 53.52-13.85 13.73-69.45 80.41-69.4 80.35 10.16-19.23 16.86-28.67 32.94-48.9 9.1-11.44 18.81-22.57 28.74-32.84 4.61-4.77 9.28-9.36 13.95-13.71 3.21-2.99 6.44-5.87 9.65-8.62 1.48-1.27 2.96-2.5 4.43-3.71l.01-.01L164.6 64.8l1.72 12.06 23.69 20.87s-20.96 14.11-31.39 23.01c-41.79 35.66-82.8 90.4-98.06 143.69l.73-.03c-7.6 4.19-15.14 10.91-21.73 20.05-.16-.04-17.04-12.43-19.44-16.5zm69.11 100.09c-25.03 0-45.33-21.37-45.33-47.72 0-26.36 20.29-47.72 45.33-47.72 6.49 0 12.66 1.44 18.24 4.02 0 0 9.63 4.86 12.34 27.81 2.82-7.17 4.24-13.06 4.24-13.06 3.23 9.88 4.88 20.26 4.23 30.76 2.68-3.56 5.55-10.27 5.55-10.27 5 29.33-16.4 56.18-44.6 56.18zm55.8-168.53s19.49-37.06 62.33-61.57c-3.19-.51-10.99.48-12.36.64 7.78-6.69 22.24-11.16 32.23-13.19-2.92-1.86-9.89-2.33-13.34-2.42-1.02-.03-1.01-.02-2.22.03 9.4-5.25 26.82-8.34 42.65-5.55-1.99-2.64-6.5-4.57-9.67-5.51-.28-.08-1.52-.39-1.52-.39l1.19-.28c9.54-1.84 20.69.15 29.5 3.69-1-2.32-3.45-5.03-5.29-6.74-.19-.18-1.29-.97-1.29-.97 9.22 1.91 18.06 5.94 24.71 10.5-.9-1.75-3.14-4.69-4.69-6.29 8.81 2.52 18.71 8.81 22.95 17.82.1.2.37.94.4 1.03-16.7-12.84-65.44-9.2-114.24 22.42-22.33 14.48-38.71 30.32-51.34 46.78zm263.32 146.34c-.59 1.15-6.73 34.4-41.86 62.01-44.37 34.86-102.66 31.33-124.67 11.8-11.76-11-16.85-26.73-16.85-26.73s-1.33 8.87-1.56 12.35c-8.87-15.09-8.12-33.52-8.12-33.52s-4.73 8.83-6.9 13.77c-6.53-16.62-3.16-33.78-3.16-33.78l-5.16 7.7s-2.42-18.81 3.52-34.47c6.36-16.74 18.68-28.9 21.11-30.42-9.35-2.97-20.12-11.49-20.14-11.51 0 0 4.28.28 7.26-.4 0 0-18.9-13.54-22.22-34.26 2.74 3.38 8.49 7.21 8.49 7.21-1.86-5.42-2.99-17.49-1.25-29.36l.01-.01c3.58-22.68 22.27-37.45 43.44-37.27 22.54.2 37.65 4.93 56.55-12.5 4-3.69 7.19-6.87 12.81-8.11.59-.13 2.06-.75 5.07-.75 3.05 0 5.98.69 8.67 2.29 10.25 6.1 12.46 22.01 13.56 33.68 4.07 43.28 2.43 35.57 19.94 44.49 8.36 4.25 17.74 8.29 28.43 19.72.03.03.08.09.08.09h.13c9.01.22 13.65 7.31 9.5 12.47-30.23 36.1-72.46 53.39-119.51 54.84-1.94.05-6.32.15-6.34.15-19.01.58-25.19 25.16-13.27 39.95 7.54 9.35 22.03 12.42 33.97 12.46l.17-.06c51.45 1.04 103.14-35.37 112.07-55.44.06-.15.61-1.42.61-1.42-2.07 2.43-52.18 49.61-113.08 47.9 0 0-6.66-.14-12.93-1.6-8.27-1.92-14.55-5.56-16.95-13.8 5.05 1.01 11.45 1.66 18.87 1.66 43.96 0 75.63-19.98 72.33-20.25-.13 0-.26.03-.48.08-5.13 1.19-57.97 21.66-91.37 11.16.08-1.02.24-2.01.48-2.9 2.97-9.95 8.25-8.56 16.79-8.93 30.48-1.01 55.07-8.68 73.5-17.43 19.65-9.33 34.63-21.35 40.03-27.42 7 11.79 6.96 26.92 6.96 26.92s2.74-.96 6.38-.96c11.38.01 13.73 10.23 5.09 20.6zm-149.29 13.7c0-.05-.01-.1-.01-.
4988815.01.05.01.1.01.15zm-.01-.21c-.01-.13-.01-.26-.02-.39-.02-.65-.03-1.33 0-2.02-.02.74-.02 1.42 0 2.02.01.13.01.27.02.39zm.12 1.46c0 .02 0 .04.01.06 0-.02 0-.04-.01-.06zm.02.12c.2 1.58.51 2.31.55 2.4-.23-.49-.42-1.34-.55-2.4zM193.96 59.68l2.87-8.83 4.88 17.72-6.03-1.95-1.72-6.94zm22.38 17.72l-3.62-12.59 9.97 8.36c-2.24 1.44-4.36 2.86-6.35 4.23zm42.71 281.94c-.01-.13-.01-.26-.02-.39.01.13.01.27.02.39zm-.01-.39c-.02-.65-.03-1.33 0-2.02-.03.75-.03 1.42 0 2.02zm.02.6c0-.05-.01-.1-.01-.15m.13 1.46c0-.02 0-.04-.01-.06m.02.12c.2 1.58.51 2.31.55 2.4-.23-.49-.42-1.34-.55-2.4zm52.1-138.61c-.07-3.36.47-8.92 3.63-9.95h.01c5.41-1.88 12.58 11.98 12.91 24.28-4.28-2.14-9.3-3.05-14.47-2.6-1.3-3.97-1.92-7.7-2.08-11.73zM205.38 85.27l-13.59-11.38 20.57 6.28c-2.65 1.88-5 3.6-6.98 5.1zm27.7 166.94c-3.41 1.3-5.83 2.31-7 2.14-1.89-.28-.06-3.75 4.08-7.11 8.33-6.64 19.76-8.7 29.53-5.07 4.28 1.57 9.08 4.72 11.6 8.39.95 1.39 1.21 2.44.82 2.88-.77.9-3.51-.31-7.55-1.89-10.35-3.86-17.98-4.45-31.48.66zm14.55 14.53c-2.31.94-3.81 1.66-4.42 1.17-.62-.48-.01-2.42 2.15-4.51 1.88-1.81 3.83-2.83 6.07-3.77.35-.15.72-.28 1.1-.38 1.04-.28 2.09-.63 3.23-.8 9.12-1.55 15.8 3.51 14.93 4.98-.39.69-2.08.53-4.6.36-5.23-.36-10.71-.27-18.46 2.95zM60.86 323.12zm24.3-25.78c-1.85.39-.81.17-2.64.68a7 7 0 0 0-.77.25c-.58.27-1.11.45-1.62.73-.43.24-4.07 1.86-7.03 5.48-3.99 4.95-5.44 11.43-5.19 17.67.24 6.06 2.02 9.41 2.35 10.23 1.38 2.96-1.85 3.57-4.79.39l-.01-.01c-2.35-2.49-3.86-6.29-4.6-9.66-2.98-13.95 3.24-27.97 17.61-33.57.8-.32 1.74-.51 2.5-.73h-.01c1.47-.44 6.72-1.5 12.07-.67 5.87.91 11.04 3.85 14.33 7.67l.01.01c2.53 2.87 4.43 6.92 4.09 10.53v.01c-.13 1.5-.79 3.65-2.14 4.21-.5.21-1.01.1-1.36-.25-.98-.96-.22-2.93-2.6-6.3-3.17-4.47-10.31-8.76-20.2-6.67zm30.28 31.17c1.88 10.82-6 20.5-15.52 20.7-6.67.15-10.31-4.02-9.66-4.93.3-.43 1.32-.24 2.88-.01 8.5 1.32 13.66-3.86 14.9-9.29.02-.09.35-1.54.34-2.54.07-.88-.03-1.76-.16-2.56-1-5.62-7.45-6.68-11.6-11.15-3.72-4.04-2.99-9.22-.65-11.71 2.81-2.77 6.83-1.76 6.78-.78 0 .52-.97.91-2.17 1.74-1.56 1.1-1.77 2.16-1.37 3.98.26 1 .71 1.65 1.68 2.42 3.48 2.76 12.85 4.7 14.55 14.13zm212.87-81.47c2.58.4 4.22 3.59 3.67 7.13-.55 3.54-3.09 6.08-5.67 5.67-2.58-.4-4.22-3.59-3.67-7.13.56-3.53 3.09-6.07 5.67-5.67zm-28.33 10.31c1.42-2.59 5.44-3.11 8.99-1.16 3.55 1.94 5.27 5.62 3.86 8.2-1.42 2.59-5.44 3.11-8.99 1.16-3.55-1.94-5.28-5.61-3.86-8.2z"],
49889  "mandalorian": [390, 512, [], "f50f", "M203.28 511.89c-.98-3.26-1.69-15.83-1.39-24.58.55-15.89.98-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-.96.4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-.99-11.43.16-4.81 0-10.53-.34-12.71-2.05-12.97-3.46-27.7-3.25-33.9.21-6.12.43-7.15 2.06-9.67 3.05-4.71 6.51-14.04 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74.89-4.42 2.43-9.72 4.36-15.05 2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71-1.03 1.49-4.76 4.8-8.29 7.36-8.37 6.08-11.7 9.39-12.66 12.58-.93 3.11-1.02 7.23-.16 7.76.34.21 1.29 2.4 2.11 4.88 1.62 4.88 1.87 10.12.72 15.36-.39 1.77-1.05 5.47-1.46 8.23-.41 2.76-.98 6.46-1.25 8.22-.28 1.76-.97 3.68-1.55 4.26-.96.96-1.14.91-2.05-.53-.55-.87-1.2-3.01-1.44-4.75-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-.96-20.96.92-1.73 1.67-3.81 1.67-4.61 0-2.39-2.2-5.32-7.41-9.89-7.05-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3.01-2.6 9.11-2.97 22.02l-.35 12.13 1.95 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56.07 11.84.95 22.75 2 24.71.36.66.51 1.35.34 1.52-.17.17.41 2.09 1.29 4.27.88 2.18 1.81 6.22 2.06 8.98.25 2.76 1.02 7.43 1.71 10.37 2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 57.98-2.04 61.21-.12 2.02-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4.02-4.79-2.83-9.95.7-3.01 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1.01-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73.38-1.29.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6.03-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57.02-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-10.96-1.9-23.85-14.55-6.15-6.04-12.34-11.97-13.75-13.19-2.81-2.42-2.79-1.99-.56-9.63l1.35-4.65-1.69-3.04c-.93-1.67-2.09-3.51-2.59-4.07-1.33-1.51-5.5-10.89-5.99-13.49-.31-1.66-.09-2.67.87-3.9 2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1.05 9.41 5.03 1.34 4.79 1.37 9.79.1 18.55-.53 3.68-.98 8.68-.99 11.11-.02 4.01.19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52 1.7.71 3.82 1.99 4.72 2.85 11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 7.98 4.54 10.04 13.39 1.31 5.65 4 11.14 5.46 11.14.59 0 2.09-.63 3.33-1.39 1.98-1.22 2.25-1.73 2.25-4.18-.01-3.71-1.17-14.08-2-17.84-.37-1.66-.78-4.06-.93-5.35-.14-1.29-.61-3.85-1.03-5.69-2.55-11.16-3.65-15.46-4.1-16.05-1.55-2.02-4.08-10.2-4.93-15.92-1.64-11.11-3.96-14.23-12.91-17.39-4.64-1.64-8.89-4.12-13.32-7.78-1.15-.95-4.01-3.22-6.35-5.06-2.35-1.83-4.41-3.53-4.6-3.76-.18-.23-1.39-1.14-2.69-2.02-6.24-4.22-8.84-6.98-11.26-11.96l-2.44-5.02-.22-12.98-.22-12.98 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2.05 8.53-.19 10.12.02 11.66 1.56 1.53 1.53 1.36 6.4-.29 8.5-.74.94-1.34 1.98-1.34 2.32 0 .58-2.61 4.91-5.42 8.99-.68.99-2.13 5.35-2.37 6.82 20.44 13.39 21.55 3.77 14.07 28.98l11.4 2.54c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-11.98-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28 3.18-.92 6.58-1.68 7.55-1.68.97 0 3.66-.58 5.98-1.29 3.65-1.11 4.5-1.17 6.35-.4 1.17.48 3.79 1.09 5.82 1.36 2.02.26 4.72 1.12 6 1.91 1.28.79 3.53 1.77 5.02 2.17 2.51.68 3 .57 7.05-1.67l4.35-2.4 10.7-.41c10.44-.4 10.81-.47 15.26-2.68l4.58-2.3 2.46 1.43c1.76 1.02 3.14 2.73 4.85 5.98 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44
49889-.89 3.3-.1 6.39.5 1.96 1.45 4.62 2.1 5.91.65 1.29 1.24 3.09 1.31 4.01.31 4.33-.03 5.3-2.41 6.92-2.17 1.47-6.98 7.91-6.98 9.34 0 .32-.48 1.69-1.07 3.03-5.04 11.51-6.76 13.56-14.26 16.98-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26-.37.69-2.21 2.37-4.09 3.71-2.04 1.47-3.8 3.38-4.38 4.78-.54 1.28-1.66 2.59-2.49 2.91-.83.32-1.94 1.08-2.45 1.71-.52.62-3.66 3.04-7 5.38-3.33 2.34-6.87 5.02-7.87 5.96-1 .94-2.07 1.71-2.39 1.71s-1.28.74-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6.22 1.63.86 4.27 1.42 5.88 1.32 3.8 1.31 7.86-.05 10.57-1.43 2.86-.89 6.65 1.35 9.59 2.01 2.63 2.16 4.56.71 8.84-.61 1.8-1.05 5.45-1.06 8.91-.02 4.88.22 6.28 1.46 8.38 1.2 2.04 1.82 2.48 3.24 2.32 1.98-.23 2.3-1.05 4.71-12.12 2.18-10.03 3.71-11.92 13.76-17.08 2.94-1.51 7.46-3.96 10.03-5.44 2.58-1.48 6.79-3.69 9.37-4.91 6.67-3.16 11.05-6.52 15.22-11.67 7.11-8.79 9.98-16.22 12.85-33.3.55-3.28 1.43-5.65 2.86-7.73 1.29-1.87 2.37-4.62 2.89-7.31 1.02-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8.03-2.18 3.11-6.46 13.01-8.76 20.26l-2.29 7.22-6.97 6.49c-3.83 3.57-7.96 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 9.99 0 2.98.43 4.96 1.59 7.26.87 1.74 1.81 3.91 2.09 4.83.28.92.98 2.22 1.57 2.89 1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12.02-4.7 12.02-1.79 0-4.06 9.27-5.07 20.74-.18 2.02-.62 5.94-.98 8.7-.36 2.76-.96 9.98-1.35 16.05-.77 12.22-.19 18.77 2.05 23.15 3.41 6.69.52 12.69-11.03 22.84l-3.97 3.49.07 5.19c.04 2.86.55 6.85 1.14 8.87 4.61 15.98 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15.42 1.84.91 5 1.08 7.02.17 2.02.66 5.33 1.08 7.36.47 2.26.78 11.02.79 22.74l.02 19.06-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2.02-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3.02-17.66-3.03-21.3-.01-4.23 1.02-6 5.28-9.13 4.14-3.04 4.86-3.14 5.48-.72.28 1.1 1.45 5.62 2.6 10.03 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-.98 7.07-1.17 12.39-1.04 28.43.17 19.4-.64 35.73-2.04 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-70.99-37.58c-.24-.38-1.01-5.24-1.73-10.79-.72-5.56-1.49-10.41-1.73-10.79-.23-.38-.68-3.3-.99-6.49-.31-3.19-.91-7.46-1.33-9.48-.99-4.79-3.35-19.35-3.42-21.07-.03-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29.96-.96 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83-.18 4.6-.49 9.87-.67 11.71-.18 1.84-.61 9.36-.94 16.72-.79 17.41-1.94 31.29-2.65 32-.32.3-.76.24-1-.14zM74.63 162.61c21.07 12.79 17.84 14.15 28.49 17.66 13.01 4.29 18.87 7.13 23.15 16.87-43.66 36.14-69.01 57.9-76.71 70.82-31.02 52.01-5.99 101.59 62.75 87.21-14.18 29.23-77.97 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179.02c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-67.96 2.98-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.27 70.58-78.66 91.12-105.29 61.65z"],
49890  "markdown": [640, 512, [], "f60f", "M593.85 452.92H46.15C20.7 452.92 0 432.22 0 406.77V105.23c0-25.45 20.7-46.15 46.15-46.15h547.69c25.45 0 46.15 20.7 46.15 46.15v301.54c.01 25.45-20.69 46.15-46.14 46.15zm-440-92.3v-120l61.54 76.92 61.54-76.92v120h61.54V151.38h-61.54l-61.54 76.92-61.54-76.92H92.31v209.23h61.54zM566.15 256h-61.54V151.38h-61.54V256h-61.54l92.31 107.69L566.15 256z"],
49891  "mastodon": [417, 512, [], "f4f6", "M417.8 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.5-28.4-290.4 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.4-.9-9-.9-13.9 85.6 20.9 158.6 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6V190.1c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H75.1c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"],
49892  "maxcdn": [512, 512, [], "f136", "M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z"],
49893  "medapps": [320, 512, [], "f3c6", "M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z"],
49894  "medium": [448, 512, [], "f23a", "M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z"],
49895  "medium-m": [512, 512, [], "f3c7", "M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z"],
49896  "medrt": [544, 512, [], "f3c8", "M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z"],
49897  "meetup": [512, 512, [], "f2e0", "M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 3
498970.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z"],
49898  "megaport": [496, 512, [], "f5a3", "M248 8C111.04 8 0 119.04 0 256c0 136.97 111.04 248 248 248 136.96 0 248-111.03 248-248C496 119.04 384.96 8 248 8zm85.46 267.67l59.66 59.67v87.05l-26.07 19.23L341 422.39v-65.46l-33.44-33.44-33.44 33.44v65.46L248 441.62l-26.12-19.23v-65.46l-33.44-33.44L155 356.92v65.46l-26.07 19.23-26.06-19.23v-87.05l59.47-59.47V188l59.5-59.5V52.88l26.06-19.23 26.06 19.23v75.64l59.5 59.5m-85.56-11.86l33.44 33.44V276L248 309.33l-33.54-33.54v-66.2l33.44-33.43z"],
49899  "microsoft": [448, 512, [], "f3ca", "M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"],
49900  "mix": [448, 512, [], "f3cb", "M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z"],
49901  "mixcloud": [640, 512, [], "f289", "M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.
49901668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z"],
49902  "mizuni": [496, 512, [], "f3cc", "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z"],
49903  "modx": [448, 512, [], "f285", "M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z"],
49904  "monero": [496, 512, [], "f3d0", "M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"],
49905  "napster": [496, 512, [], "f3d2", "M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z"],
49906  "neos": [456, 512, [], "f612", "M387.44 512h-95.11L184.12 357.46v91.1L97.69 512H0V29.82L40.47 0h108.05l123.74 176.13V63.45L358.69 0h97.69v461.5L387.44 512zM10.77 35.27v460.72l72.01-52.88V193.95l215.49 307.69h84.79l52.35-38.17h-78.27L40.96 12.98 10.77 35.27zm82.54 466.61l80.04-58.78V342.06L93.55 227.7v220.94l-72.58 53.25h72.34zM52.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L142.91 10.77H52.63zm230.4 180.88l72.01 102.81V15.93l-72.01 52.96v122.76z"],
49907  "nimblr": [355, 512, [], "f5a8", "M232.6 299.29c15.57 0 27.15 11.46 27.15 26.96 0 15.55-11.62 26.96-27.15 26.96-15.7 0-27.15-11.57-27.15-26.96 0-15.51 11.58-26.96 27.15-26.96zM99.01 326.25c0-15.61 11.68-26.96 27.15-26.96 15.57 0 27.15 11.46 27.15 26.96 0 15.41-11.47 26.96-27.15 26.96-15.44 0-27.15-11.31-27.15-26.96m78.75-167.3C143 158.95 75.45 178.77 45.25 227L0 0v335.48C0 433.13 79.61 512 177.76 512c98.24 0 177.76-78.95 177.76-176.52 0-97.46-79.39-176.53-177.76-176.53zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59 0-72.68 59.24-131.59 132.51-131.59 73.27 0 132.51 58.91 132.51 131.59s-59.25 131.59-132.51 131.59z"],
49908  "nintendo-switch": [448, 512, [], "f418", "M95.9 33.5c-44.6 8-80.5 41-91.8 84.4C0 133.6-.3 142.8.2 264.4.4 376 .5 378.6 2.4 387.3c10.3 46.5 43.3 79.6 90.3 90.5 6.1 1.4 13.9 1.7 64.1 1.9 51.9.4 57.3.3 58.7-1.1 1.4-1.4 1.5-19.3 1.5-222.2 0-150.5-.3-221.3-.9-222.6-.9-1.7-2.5-1.8-56.9-1.7-44.2.1-57.5.4-63.3 1.4zm83.9 222.6V444l-37.8-.5c-34.8-.4-38.5-.6-45.5-2.3-29.9-7.7-52-30.7-58.3-60.7-2-9.4-2-240.1-.1-249.3 5.6-26.1 23.7-47.7 48-57.4 12.2-4.9 17.9-5.5 57.6-5.6l35.9-.1v188zm-75.9-131.2c-5.8 1.1-14.7 5.6-19.5 9.7-9.7 8.4-14.6 20.4-13.8 34.5.4 7.3.8 9.3 3.8 15.2 4.4 9 10.9 15.6 19.9 20 6.2 3.1 7.8 3.4 15.9 3.7 7.3.3 9.9 0 14.8-1.7 20.1-6.8 32.3-26.3 28.8-46.4-3.9-23.7-26.6-39.7-49.9-35zm158.2-92.3c-.4.3-.6 100.8-.6 223.5 0 202.3.1 222.8 1.5 223.4 2.5.9 74.5.6 83.4-.4 37.7-4.3 71-27.2 89-61.2 2.3-4.4 5.4-11.7 7-16.2 5.8-17.4 5.7-12.8 5.7-146.1 0-106.4-.2-122.3-1.5-129-9.2-48.3-46.1-84.8-94.5-93.1-6.5-1.1-16.5-1.4-48.8-1.4-22.4-.1-40.9.2-41.2.5zm99.1 202.1c14.5 3.8 26.3 14.8 31.2 28.9 3.1 8.7 3 21.5-.1 29.5-5.7 14.7-16.8 25-31.1 28.8-23.2 6-47.9-8-54.6-31-2-7-1.9-18.9.4-26.2 6.9-22.7 31-36.1 54.2-30z"],
49909  "node": [640, 512, [], "f419", "M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.
499096c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z"],
49910  "node-js": [448, 512, [], "f3d3", "M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"],
49911  "npm": [576, 512, [], "f3d4", "M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z"],
49912  "ns8": [640, 512, [], "f3d5", "M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z"],
49913  "nutritionix": [400, 512, [], "f3d6", "M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z"],
49914  "odnoklassniki": [320, 512, [], "f263", "M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z"],
49915  "odnoklassniki-square": [448, 512, [], "f264", "M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.
499156 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z"],
49916  "old-republic": [496, 512, [], "f510", "M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.
4991667zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63
49916-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z"],
49917  "opencart": [640, 512, [], "f23d", "M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z"],
49918  "openid": [448, 512, [], "f19b", "M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z"],
49919  "opera": [496, 512, [], "f26a", "M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z"],
49920  "optin-monster": [576, 512, [], "f23c", "M550.671 450.303c0 11.62-15.673 19.457-32.158 14.863-12.16-3.243-31.346-17.565-36.211-27.294-5.674-11.62 4.054-32.698 18.916-30.806 15.674 1.621 49.453 25.401 49.453 43.237zM372.86 75.223c-3.783-72.151-100.796-79.718-125.928-23.51 44.588-24.321 90.257-15.673 125.928 23.51zM74.795 407.066c-15.673 1.621-49.452 25.401-49.452 43.237 0 11.62 15.673 19.457 32.157 14.863 12.16-3.243 31.076-17.565 35.94-27.294 5.946-11.62-3.782-32.698-18.645-30.806zm497.765 14.322c1.081 3.513 1.892 7.026 1.892 10.809.81 31.616-44.317 64.045-73.503 65.125-17.295.81-34.59-8.377-42.696-23.51-113.497 4.053-226.994 4.864-340.22 0-8.377 15.133-25.672 24.05-42.967 23.51-28.915-1.081-74.043-33.509-73.503-65.125.27-3.783.811-7.296 1.892-10.809-5.566-9.463-4.845-15.282 5.405-11.62 3.243-5.134 7.026-9.458 11.08-13.782-2.57-10.917 1.27-14.094 11.079-9.188 4.594-3.243 9.998-6.485 15.944-9.188 0-15.757 11.839-11.131 17.295-5.675 12.467-1.78 20.129.709 26.753 5.675v-19.726c-12.987 0-40.641-11.375-45.94-36.212-4.974-20.725 2.607-38.075 25.132-47.56.81-5.945 8.107-14.052 14.862-15.944 7.567-1.892 12.431 4.594 14.052 10.269 7.425 0 17.757 1.465 21.078 8.107 5.405-.541 11.079-1.352 16.484-1.892-2.432-1.892-5.134-3.513-8.107-4.594-5.134-8.917-13.782-11.079-24.591-11.62 0-.81 0-1.621.27-2.702-19.727-.541-44.048-5.675-54.857-17.835-21.321-23.638-15.935-83.577 12.16-103.498 8.377-5.675 21.618-.811 22.699 9.728 2.425 20.598.399 26.833 26.212 25.942 8.107-7.836 16.755-14.592 26.483-19.997-14.862-1.352-28.914 1.621-43.778 3.783 12.752-12.48 23.953-25.442 56.748-42.427 23.511-11.89 49.993-20.808 76.205-23.239-18.646-7.837-39.993-11.891-59.721-16.484 76.475-16.214 174.569-22.159 244.289 37.562 18.105 15.403 32.427 36.211 42.696 59.992 39.799 4.853 36.47-5.581 38.643-25.132 1.081-10.269 14.322-15.403 22.699-9.458 14.862 10.539 22.159 30.806 24.59 48.101 2.162 17.835.27 41.345-12.43 55.127-10.809 12.16-34.32 17.565-53.776 18.105v2.703c-11.08.27-20.268 2.432-25.673 11.62-2.972 1.081-5.674 2.703-8.377 4.594 5.675.54 11.35 1.351 16.755 1.891 1.869-5.619 12.535-8.377 21.077-8.377 1.621-5.405 6.756-11.89 14.052-10.269s14.052 9.998 14.863 15.944c10.809 4.324 22.159 12.16 25.131 25.672 1.892 8.107 1.621 15.133.27 21.888-5.726 25.262-33.361 36.212-45.939 36.212 0 6.756 0 13.241-.27 19.726 8.01-6.006 16.367-7.158 26.752-5.675 5.919-5.919 17.565-9.41 17.565 5.675 5.675 2.703 11.349 5.945 15.944 9.188 10.1-5.051 13.669-.539 10.809 9.188 4.053 4.323 8.107 8.917 11.079 13.782 10.136-3.62 11.021 2.078 5.409 11.62zm-73.773-254.016c17.295 6.756 26.212 22.159 30.265 35.67 1.081-10.539-2.702-39.453-13.782-51.073-7.296-7.296-14.052-5.134-14.052.81.001 6.216-1.35 11.62-2.431 14.593zm-18.646 12.43c12.971 15.673 17.024 41.615 12.7 62.963 10.809-2.162 20.537-6.215 26.212-12.16 1.892-2.162 3.783-4.864 4.864-7.566-1.081-21.348-10.269-42.697-29.725-48.912-3.242 3.243-9.187 4.864-14.051 5.675zm-21.889.811c7.567 20.537 12.431 42.696 14.322 64.585 3.513 0 7.567-.27 11.62-.811 5.945-24.321-.27-51.614-14.052-63.504-3.783 0-8.107 0-11.89-.27zM77.768 167.372c-1.081-2.973-2.432-8.377-2.432-14.593 0-5.945-7.026-8.107-14.052-.81-11.35 11.62-14.863 40.534-13.782 51.073 4.053-13.512 12.971-28.915 30.266-35.67zm5.675 75.394c-4.324-21.348-.27-47.291 12.701-62.963-4.865-.811-10.809-2.432-14.052-5.675-19.457 6.215-28.375 27.563-29.726 48.912 1.351 2.702 2.972 5.404 4.864 7.566 5.675 6.215 15.403 9.998 26.213 12.16zm41.345-61.073c-5.134 1.081-9.998 2.973-14.862 4.865l-12.16 5.134v-.27c-7.296 14.052-9.999 34.319-5.405 52.965 4.594.541 8.647.811 12.7.811 2.432-22.159 9.188-43.778 19.727-63.505zm88.095-23.239c0 42.155 34.319 76.205 76.205 76.205s76.205-34.05 76.205-76.205c0-41.886-34.319-75.935-76.205-75.935s-76.205 34.049-76.205 75.935zm152.41 97.283c9.969 50.608 3.299 64.692 16.484 58.099 15.944-8.107 22.699-39.183 22.97-57.019-12.971-.81-26.213-.81-39.454-1.08zm-71.611-.541v-.27c-.27 5.134.27 38.103 4.324 41.075 11.079 5.405 39.453 4.594 51.073 1.081 5.405-1.621 2.432-37.022 1.621-41.886-18.916-.27-38.102-.27-57.018 0zm-14.053 0v-.27c-19.456.27-38.642.27-57.829.811-1.892 9.187-4.594 48.911 1.892 51.614 12.971 5.675 41.616 5.134 54.586 1.621 4.595-2.432 2.433-45.399 1.351-53.776zm-85.662 57.56c5.405 2.432 8.647 2.432 9.728-4.324 1.892-8.647 2.432-36.752 4.865-52.155-12.16.27-24.591.811-36.752 1.621-5.405 19.727.27 45.129 22.159 54.858zm-65.666-11.08c43.778 47.02 92.689 85.663 155.923 106.47 67.558-19.186 115.659-59.991 163.219-107.011-11.095-4.315-7.715-10.363-7.296-11.62-8.918-.81-17.835-1.892-26.483-2.702-9.458 32.968-35.94 52.965-4
499206.75 31.616-2.702-5.134-3.513-11.62-4.594-16.754-3.783 8.377-13.242 8.107-24.591 8.918-13.241 1.081-31.617 1.351-44.048-2.972-2.972 12.971-11.079 12.971-26.752 14.322-14.052 1.352-48.642 4.054-54.857-10.809-1.081 28.644-35.13 9.998-45.129-7.026-3.243-5.675-5.405-11.35-7.026-17.565-7.837.81-15.673 1.621-23.511 2.702 2.443 3.663 1.549 9.052-8.105 12.431zM115.6 453.545c-5.674-23.239-18.646-49.722-33.508-54.046-22.429-6.756-68.909 23.51-66.207 54.586 12.701 19.457 39.994 35.67 59.181 36.481 17.835.81 35.94-11.08 39.724-28.914.539-2.432.81-5.134.81-8.107zm7.296-5.944c33.509-19.457 69.179-35.671 105.931-47.02-38.643-20.537-68.098-47.831-97.283-77.016-2.162 1.352-5.134 2.432-7.836 3.513-1.637 4.91 8.718 5.33 5.405 12.431-2.162 4.054-8.648 7.567-15.133 9.188-2.161 2.702-5.134 4.864-7.836 6.485h-.27c-.27 13.511-.27 27.024.27 40.535 8.939 15.964 15.426 33.314 16.752 51.884zm320.764 12.7c-36.752-21.348-74.044-41.345-115.659-52.965-13.782 6.215-27.833 11.349-42.155 15.403-2.162.811-2.162.811-4.324 0-11.89-3.783-23.239-8.107-34.859-13.241-40.265 11.62-77.286 29.185-112.416 50.803h-.27v.27c.27 0 .27 0 .27-.27 103.227 4.054 206.455 3.513 309.413 0zm27.023-64.045l-.27.27c.541-13.782.811-27.563.811-41.345-2.973-1.621-5.675-4.054-8.107-6.756-6.485-1.351-12.971-5.134-15.133-8.918-1.892-4.053 1.351-7.566 5.945-10.269-.27-.541-.541-1.621-.541-2.432-2.972-.811-5.405-1.892-7.567-3.243-31.616 29.455-65.396 56.749-103.498 76.746 38.914 11.62 75.935 28.104 111.875 47.561 1.05-14.692 7.231-35.749 16.485-51.614zm23.24 3.244c-14.593 4.323-27.834 30.806-33.509 54.046 0 23.826 21.278 37.897 40.534 37.022 19.186-.811 46.48-17.024 59.181-36.481 2.973-31.077-43.507-61.344-66.206-54.587zM290.709 134.133c.045 0 .089.003.134.003.046 0 .09-.003.136-.003h-.27zm0 96.743c28.645 0 51.884-21.618 51.884-48.371 0-36.092-40.507-58.079-72.151-44.318 9.458 2.972 16.484 11.62 16.484 21.618 0 23.257-33.291 31.955-46.48 11.35-7.297 34.067 19.368 59.721 50.263 59.721zM68.039 474.083c.54 6.486 12.16 12.701 21.618 9.458 6.756-2.703 14.593-10.539 17.295-16.214 2.973-7.026-1.081-19.997-9.728-18.375-8.917 1.621-29.725 16.754-29.185 25.131zm410.75-25.131c-8.377-1.621-12.431 11.349-9.458 18.375 2.432 5.675 10.269 13.511 17.295 16.214 9.187 3.243 21.078-2.972 21.348-9.458.811-8.377-20.267-23.51-29.185-25.131z"],
49921  "osi": [495, 512, [], "f41a", "M0 259.2C2.3 123.4 97.4 26.8 213.8 11.1c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7-17.8-46.3-35.6-92.7-53.4-139-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8 6.4-42.4-24.5-78.7-64.5-82.2-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 
4992111.5 8.6 7.8 18.4-17.9 46.6-35.8 93.2-53.7 139.9-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119C1.9 318.7 1.6 280.2 0 259.2zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3 14.9-39.1 29.9-78.2 45-117.3 1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6 31.9 18.4 49.5 53.8 45.2 90.4-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6 15.2 39.2 30.2 78.4 45.2 117.7 1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161C459.8 112 354.1 14.7 218 31.5 111.9 44.5 22.7 134 20.9 257.3z"],
49922  "page4": [496, 512, [], "f3d7", "M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z"],
49923  "pagelines": [384, 512, [], "f18c", "M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z"],
49924  "palfed": [576, 512, [], "f3d8", "M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z"],
49925  "patreon": [512, 512, [], "f3d9", "M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z"],
49926  "paypal": [384, 512, [], "f1ed", "M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z"],
49927  "periscope": [448, 512, [], "f3da", "M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z"],
49928  "phabricator": [496, 512, [], "f3db", "M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z"],
49929  "phoenix-framework": [640, 512, [], "f3dc", "M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z"],
49930  "phoenix-squadron": [513, 512, [], "f511", "M96.24 62.81C142.91 26.57 202.15 6.57 261.28 8.08c29.67-.38 59.29 5.38 87.17 15.37-24.2-4.64-49.18-6.35-73.6-2.45-43 5.35-83.26 27.23-112.16 59.35 5.69-.99 10.81-3.68 16.07-5.88 18.19-7.89 37.6-13.29 57.4-14.87 19.8-2.14 39.75-.43 59.45 1.93-14.46 2.79-29.2 4.58-43.11 9.61-34.53 11.11-65.46 33.26-86.55 62.82-13.84 19.77-23.7 42.99-24.74 67.33-.35 16.54 5.23 34.91 19.89 44.17 11.13 6.66 24.85 9.39 37.63 6.76 15.49-2.47 30.16-8.67 43.73-16.38 11.55-6.84 22.73-14.59 32.05-24.32 3.8-3.23 2.54-8.48 2.63-12.83-2.13-.34-4.4-1.11-6.32.3a203.975 203.975 0 0 1-35.93 15.42c-20.07 6.19-42.28 8.48-62.28.78 12.83 1.73 26.14.31 37.85-5.46 20.29-9.75 36.92-25.27 54.6-38.88 27.84-21.29 57.64-40.11 89.17-55.47 25.78-12.01 53.09-22.85 81.81-24.2-15.68 13.76-32.25 26.6-46.92 41.51-14.55 14.04-27.54 29.58-40.23 45.31-3.53 4.61-8.98 6.96-13.62 10.19-22.24 15.03-40.6 35.96-52.04 60.28-9.36 19.74-14.55 41.97-11.81 63.84 1.95 13.73 8.74 27.67 20.96 35.01 12.94 7.99 29.14 8.09 43.61 5.11 32.9-7.47 61.61-28.97 81.28-56 20.5-27.6 30.61-62.38 29.25-96.64-.52-7.52-1.58-15-1.67-22.55 8.02 19.54 14.87 39.83 16.7 61.01 2.01 14.32.75 28.84-1.62 43.02-1.92 11.02-5.69 21.58-7.81 32.53 20.36-22.73 34.17-51.24 39.46-81.31 5.72-35.37.58-72.36-14.25-104.95 20.84 32.12 32.43 69.79 35.81 107.8.5 12.77.5 25.58 0 38.34-2.91 34.26-12.97 67.95-29.76 98-26.2 47.48-68.2 85.89-117.54 108.32-78.52 36.34-175.2 31.41-248.72-14.72-38.84-23.78-71.06-58.32-91.68-98.96C10.72 337.43 2.04 305.5 0 273.13V241.7c3.94-69.97 40.99-136.32 96.24-178.89m222.65 80.57c5.51-.8 10.82-2.57 16.02-4.5 4.99-1.77 9.27-5.95 10.35-11.25-8.91 5-17.95 9.95-26.37 15.75z"],
49931  "php": [640, 512, [], "f457", "M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 9
499316.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z"],
49932  "pied-piper": [448, 512, [], "f2ae", "M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z"],
49933  "pied-piper-alt": [576, 512, [], "f1a8", "M242 187c6.3-11.8 13.2-17 25.9-21.8 27.3-10.3 40.2-30.5 58.9-51.1 11.9 8.4 12 24.6 31.6 23v21.8l6.3.3c37.4-14.4 74.7-30.2 106.6-54.6 48.3-36.8 52.9-50 81.3-100l2-2.6c-.6 14.1-6.3 27.3-12.4 39.9-30.5 63.8-78.7 100.3-146.8 116.7-12.4 2.9-26.4 3.2-37.6 8.9 1.4 9.8 13.2 18.1 13.2 23 0 3.4-5.5 7.2-7.5 8.6-11.2-12.9-16.1-19.3-22.7-22.1-7.6-3.5-63.9-6.4-98.8 10zm137.9 256.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9L244 246zm-12.6 31.8l24.1 61.2 21-13.8-31.3-50.9-13.8 3.5zM555.5 0l-.6 1.1-.3.9.6-.6.3-1.4zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46v27.3l11.8-3.4-2.9-23.8h-8.9zm76.1 2.9c0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3l2 12.4c9-1.5 58.4-6.6 58.4-14.1z"],
49934  "pied-piper-hat": [640, 512, [], "f4e5", "M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z"],
49935  "pied-piper-pp": [448, 512, [], "f1a7", "M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z"],
49936  "pinterest": [496, 512, [], "f0d2", "M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"],
49937  "pinterest-p": [384, 512, [], "f231", "M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z"],
49938  "pinterest-square": [448, 512, [], "f0d3", "M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 
4993815.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"],
49939  "playstation": [576, 512, [], "f3df", "M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z"],
49940  "product-hunt": [512, 512, [], "f288", "M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z"],
49941  "pushed": [432, 512, [], "f3e1", "M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z"],
49942  "python": [448, 512, [], "f3e2", "M167.8 36.4c-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1zm-6.7 28.4c11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4zm185.2 81.4v47.5c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6-7.7-30.9-22.3-54.2-53.4-54.2h-40.1zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3z"],
49943  "qq": [448, 512, [], "f1d6", "M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z"],
49944  "quinscape": [489, 512, [], "f459", "M301.9 474.6h-1.3c-87.3 0-158.1-70.8-158.1-158.1s70.8-158.1 158.1-158.1c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C489.1 117.5 379.6 8 244.5 8 109.5 8 0 117.5 0 252.6s109.5 244.6 244.5 244.6c24.8 0 47.8-3.2 70.4-10.1-5.2-3.5-9-8.2-13.4-12.6l.4.1zm-21.2-69.8c0-54.8 44.4-99.2 99.2-99.2 54.8 0 99.2 44.4 99.2 99.2 0 54.8-44.4 99.2-99.2 99.2-54.8 0-99.2-44.4-99.2-99.2"],
49945  "quora": [448, 512, [], "f2c4", "M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z"],
49946  "r-project": [581, 512, [], "f4f7", "M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"],
49947  "ravelry": [512, 512, [], "f2d9", "M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z"],
49948  "react": [512, 512, [], "f41b", "M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zm-130 189.1c4.6 8.8 9.3 17.5 14.3 26.1 5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5zm0-50.6c-6.3-14.9-11.6-29.5-16-43.6 14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26zm11.4 25.3c6.6-13.8 13.8-27.3 21.4-40.6 7.6-13.3 15.8-26.2 24.4-38.9 15-1.1 30.3-1.7 45.9-1.7 15.6 0 31 .6 45.9 1.7 8.5 12.6 16.6 25.5 24.3 38.7 7.7 13.2 14.9 26.7 21.7 40.4-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6-15.7 0-30.9-.5-45.6-1.4-8.7-12.7-16.9-25.7-24.6-39-7.7-13.3-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 
4994810.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zM256 210.2c25.3 0 45.8 20.5 45.8 45.8 0 25.3-20.5 45.8-45.8 45.8-25.3 0-45.8-20.5-45.8-45.8 0-25.3 20.5-45.8 45.8-45.8"],
49949  "readme": [576, 512, [], "f4d5", "M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z"],
49950  "rebel": [512, 512, [], "f1d0", "M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z"],
49951  "red-river": [448, 512, [], "f3e3", "M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z"],
49952  "reddit": [512, 512, [], "f1a1", "M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"],
49953  "reddit-alien": [512, 512, [], "f281", "M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"],
49954  "reddit-square": [448, 512, [], "f1a2", "M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z"],
49955  "rendact": [496, 512, [], "f3e4", "M248 8C111 8 0 119 0 256s111 248 248 248c18.6 0 36.7-2.1 54.1-5.9-5.6-7.4-10.8-14.4-15.9-21.3-12.4 2.1-25.2 3.3-38.3 3.3C124.3 480 24 379.7 24 256S124.3 32 248 32s224 100.3 224 224c0 71-33 134.2-84.5 175.3-25.9 18.8-39.1 21.4-83.5-44.2-78.7-112.9-48-71.1-73.7-108.3 72.8 8.9 228.5-72 168.6-168.6C314-26.8 15 93.8 59.7 226.4c3.2 9.8 14.4 38.6 45.6 38.6 2 0 2.6-.6 2-1.7-4.4-8.7-20.1-9.8-20.1-37.4 0-40.5 40.5-89.6 100.3-120 66.1-32.3 131.9-30.2 158.2 5.4 27.2 38.3-20.9 119.2-120.4 136.9 7.5-9.4 57-75.2 62.8-84 22.7-34.6 23.6-49 14-59.2-15.5-16.9-29.5-10.3-50.7-11.7-10.8-.9-113.7 181.2-136.4 216.9-5.9 9-21.2 34.1-21.2 50.9 0 21.3 2.8 51.4 20.6 51.4 10.6 0 8-18.7 8-26.6 0-12.9 27.4-49.4 74.8-104.6 20.4 36.1 57.7 114.3 130.2 209.7 98-33.1 168.5-125.8 168.5-235C496 119 385 8 248 8z"],
49956  "renren": [512, 512, [], "f18b", "M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z"],
49957  "replyd": [448, 512, [], "f3e6", "M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.
499571 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z"],
49958  "researchgate": [448, 512, [], "f4f8", "M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z"],
49959  "resolving": [496, 512, [], "f3e7", "M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z"],
49960  "rev": [410, 512, [], "f5b2", "M270.67 274.89c0 36.16-29.41 65.57-65.56 65.57s-65.57-29.41-65.57-65.57 29.41-65.56 65.57-65.56 65.56 29.4 65.56 65.56zm139.55-5.05h-.13c-1.49-61.55-30.1-116.35-74.32-152.98l-45.38 26.2c43.17 28.03 71.81 76.63 71.81 131.82 0 86.62-70.47 157.09-157.09 157.09S48.02 361.5 48.02 274.88c0-81.86 62.96-149.27 142.99-156.43v39.12l108.76-62.79L191.01 32v38.32C84.31 77.57 0 166.36 0 274.89c0 111.59 89.12 202.29 200.06 204.98v.13h210.16V269.84z"],
49961  "rocketchat": [448, 512, [], "f3e8", "M448 256.2c0-87.2-99.6-153.3-219.8-153.3-18.8 0-37.3 1.6-55.3 4.8-11.1-10.5-24.2-20-38-27.4C61.2 44.2 0 79.4 0 79.4s56.9 47.1 47.6 88.3c-52.3 52.3-52.5 124.1 0 176.6C56.9 385.6 0 432.6 0 432.6s61.2 35.2 134.9-.8c13.8-7.5 26.9-16.9 38-27.4 18 3.2 36.5 4.8 55.3 4.8 120.3-.1 219.8-65.8 219.8-153zm-219.7 124c-23.7 0-46.3-2.8-67.3-7.8-21.3 25.8-68.1 61.7-113.6 50.1 14.8-16 36.7-43.1 32-87.6-27.3-21.4-43.6-48.7-43.6-78.5 0-68.4 86.2-123.9 192.5-123.9S420.8 188 420.8 256.4c0 68.3-86.2 123.8-192.5 123.8zm25.6-123.9c0 14.2-11.5 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.5-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm88.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm-177.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.2 0 25.6 11.6 25.6 25.8z"],
49962  "rockrms": [496, 512, [], "f3e9", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z"],
49963  "safari": [512, 512, [], "f267", "M236.9 256.8c0-9.1 6.6-17.7 16.3-17.7 8.9 0 17.4 6.4 17.4 16.1 0 9.1-6.4 17.7-16.1 17.7-9 0-17.6-6.7-17.6-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-26.6 0c0-122.3-99.1-221.4-221.4-221.4S34.6 133.7 34.6 256 133.7 477.4 256 477.4 477.4 378.3 477.4 256zm-72.5 96.6c0 3.6 13 10.2 16.3 12.2-27.4 41.5-69.8 71.4-117.9 83.3l-4.4-18.5c-.3-2.5-1.9-2.8-4.2-2.8-1.9 0-3 2.8-2.8 4.2l4.4 18.8c-13.3 2.8-26.8 4.2-40.4 4.2-36.3 0-72-10.2-103-29.1 1.7-2.8 12.2-18 12.2-20.2 0-1.9-1.7-3.6-3.6-3.6-3.9 0-12.2 16.6-14.7 19.9-41.8-27.7-72-70.6-83.6-119.6l19.1-4.2c2.2-.6 2.8-2.2 2.8-4.2 0-1.9-2.8-3-4.4-2.8L62 294.5c-2.5-12.7-3.9-25.5-3.9-38.5 0-37.1 10.5-73.6 30.2-104.9 2.8 1.7 16.1 10.8 18.3 10.8 1.9 0 3.6-1.4 3.6-3.3 0-3.9-14.7-11.3-18-13.6 28.2-41.2 71.1-70.9 119.8-81.9l4.2 18.5c.6 2.2 2.2 2.8 4.2 2.8s3-2.8 2.8-4.4L219 61.7c12.2-2.2 24.6-3.6 37.1-3.6 37.1 0 73.3 10.5 104.9 30.2-1.9 2.8-10.8 15.8-10.8 18 0 1.9 1.4 3.6 3.3 3.6 3.9 0 11.3-14.4 13.3-17.7 41 27.7 70.3 70 81.7 118.2l-15.5 3.3c-2.5.6-2.8 2.2-2.8 4.4 0 1.9 2.8 3 4.2 2.8l15.8-3.6c2.5 12.7 3.9 25.7 3.9 38.7 0 36.3-10 72-28.8 102.7-2.8-1.4-14.4-9.7-16.6-9.7-2.1 0-3.8 1.7-3.8 3.6zm-33.2-242.2c-13 12.2-134.2 123.7-137.6 129.5l-96.6 160.5c12.7-11.9 134.2-124 137.3-129.3l96.9-160.7z"],
49964  "sass": [640, 512, [], "f41e", "M551.1 291.9c-22.4.1-41.8 5.5-58 13.5-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-3.8 11.1-5.3 19.1-2.3 11.7-25.8 53.5-39.1 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-2.7 11.4-5.3 19.1-2.6 7.7-33.9 77.3-42.1 95.4-4.2 9.2-7.8 16.6-10.4 21.6s-.2.3-.4.9c-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2-.8 0-1.4 2-1.4 2s10.1-42.4-19.4-42.4c-18.4 0-44 20.2-56.6 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.8-38.2-101.9-65.2-99.1-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.4-35.4 189.9-5.6 19.4 42.5-41.9 121.6-143.7 133-38.8 4.3-59.2-10.7-64.3-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.8 28.9 18.7 6.1 64.2 9.5 119.2-11.8C367 196.5 415.1 130.2 401 74.7 386.6 18.3 293.1-.2 204.6 31.2 151.9 49.9 94.9 79.3 53.9 117.6 5.2 163.2-2.6 202.9.6 219.5c11.4 58.9 92.6 97.3 125.1 125.7-1.6.9-3.1 1.7-4.5 2.5-16.3 8.1-78.2 40.5-93.7 74.7-17.5 38.8 2.9 66.6 16.3 70.4 41.8 11.6 84.6-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.3-4.9 16.4-9.4 23.5-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.5 5 15.4 5 13.8 0 20-11.4 26.9-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.4 0 18.8-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.6-46 16.2-31.8 31.7-71.5 31.7-71.5s1.4 9.7 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2s0 .1.1.2c-3 4-6.4 8.3-9.9 12.5-12.8 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.7 2.5 11.5-.8 19.6-3.6 23.5-5.4 6.2-2.2 13.4-5.7 20.2-10.6 12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5 19.8-28.9 35.1-60.6 35.1-60.6s1.4 9.7 6.2 25.8c2.4 8.1 7.1 17 11.4 25.7-18.6 15.1-30.1 32.6-34.1 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5 6.5-2.2 14.3-5.7 21.6-11.1 12.5-9.2 24.6-22.1 23.8-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.1-10.2 62.1-7.2 55.7 6.5 66.6 41.3 64.5 55.8-2.1 14.6-13.8 22.6-17.7 25-3.9 2.4-5.1 3.3-4.8 5.
499641.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.2-11.8 30.3-38.7 1.6-34-31.1-71.4-89-71.1zM121.8 436.6c-18.4 20.1-44.2 27.7-55.3 21.3C54.6 451 59.3 421.4 82 400c13.8-13 31.6-25 43.4-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.3 30.4.3 57.2-19.1 78.3zm134.4-91.4c-6.4 15.7-19.9 55.7-28.1 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.1-11.3 21.2-14.9 23.8-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.9-13.9 0 .5.1 1 .1 1.6-.1 17.9-17.3 30-25.1 34.8zm85.6-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.6-15.3 19-24.5 1.2 3.8 1.9 7.4 1.9 10.8-.1 22.5-16.2 30.9-25.9 34.4z"],
49965  "schlix": [448, 512, [], "f3ea", "M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z"],
49966  "scribd": [384, 512, [], "f28a", "M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z"],
49967  "searchengin": [460, 512, [], "f3eb", "M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z"],
49968  "sellcast": [448, 512, [], "f2da", "M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z"],
49969  "sellsy": [640, 512, [], "f213", "M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z"],
49970  "servicestack": [496, 512, [], "f3ec", "M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z"],
49971  "shirtsinbulk": [448, 512, [], "f214", "M395.208 221.583H406v33.542h-10.792v-33.542zm0-9.625H406v-33.542h-10.792v33.542zm0 86.333H406V264.75h-10.792v33.541zM358.75 135.25h-33.542v10.5h33.542v-10.5zm36.458 206.208H406v-33.542h-10.792v33.542zM311.5 135.25h-33.542v10.5H311.5v-10.5zm-47.25 0H231v10.5h33.25v-10.5zm-47.25 0h-33.25v10.5H217v-10.5zm178.208 33.542H406V135.25h-33.542v10.5h22.75v23.042zm-255.792 259l30.625 13.417 4.375-9.917-30.625-13.417-4.375 9.917zM179.083 445l30.334 13.708 4.374-9.916-30.333-13.417-4.375 9.625zm216.125-60.375H406v-33.542h-10.792v33.542zm-334.833 8.167L91 406.208l4.375-9.624-30.625-13.709-4.375 9.917zm39.666 17.499l30.625 13.417 4.375-9.917-30.625-13.416-4.375 9.916zm132.417 38.501l4.375 9.916L267.459 445l-4.375-9.625-30.626 13.417zm118.417-52.208l4.375 9.624 30.624-13.416-4.374-9.917-30.625 13.709zM311.5 413.791l4.375 9.917 30.625-13.417-4.374-9.916-30.626 13.416zm-39.667 17.501l4.375 9.917 30.625-13.417-4.375-9.917-30.625 13.417zM311.5 46.583h-33.542v10.5H311.5v-10.5zm94.209 0h-33.251v10.5h33.251v-10.5zm-188.709 0h-33.25v10.5H217v-10.5zm141.75 0h-33.542v10.5h33.542v-10.5zm-94.5 0H231v10.5h33.25v-10.5zM448 3.708v406l-226.334 98.584L0 409.708v-406h448zm-29.166 116.958H29.166V390.75l192.792 85.75 196.875-85.75V120.666zm0-87.791H29.166V91.5h389.667V32.875zM75.542 46.583H42.291v10.5h33.251v-10.5zm94.5 0H136.5v10.5h33.542v-10.5zm-47.251 0H89.25v10.5h33.542v-10.5zm7.584 236.542c0-50.167 41.125-91.292 91.292-91.292 50.458 0 91.292 41.125 91.292 91.292 0 50.458-40.833 91.292-91.292 91.292-50.167-.001-91.292-40.834-91.292-91.292zm120.75 18.084c0 13.125-23.917 14.291-32.666 14.291-12.25 0-29.75-2.625-35.875-14.875h-.875L172.666 319c14.876 9.333 29.167 12.25 47.25 12.25 19.542 0 51.042-5.833 51.042-31.209 0-48.125-78.458-16.333-78.458-37.916 0-13.125 20.708-14.875 29.75-14.875 10.791 0 29.166 3.208 35.583 13.124h.875l8.751-16.916c-15.167-6.125-27.417-11.959-44.334-11.959-20.125 0-49.583 6.417-49.583 31.792 0 44.334 77.583 11.959 77.583 37.918zM122.791 135.25H89.25v10.5h33.542v-10.5zm-69.999 10.5h22.75v-10.5H42v33.542h10.792V145.75zm0 32.666H42v33.542h10.792v-33.542zm117.25-43.166H136.5v10.5h33.542v-10.5zm-117.25 86.333H42v33.542h10.792v-33.542zm0 86.334H42v33.542h10.792v-33.542zm0-43.167H42v33.542h10.792V264.75zm0 86.333H42v33.542h10.792v-33.542z"],
49972  "shopware": [495, 512, [], "f5b5", "M395.5 455.27c-42.95 31.79-93.95 48.59-147.48 48.59-137.21 0-248.02-111-248.02-248 0-137.19 111.04-248 248.02-248 61.3 0 120.14 22.55 165.68 63.5 2.62 2.36.58 6.64-2.86 6.18-17.67-2.43-36.75-3.66-56.71-3.66-129.36 0-222.4 53.47-222.4 155.35 0 109.04 92.13 145.88 176.83 178.73 33.64 13.04 65.4 25.36 86.96 41.59 
499721.9 1.44 1.89 4.31-.02 5.72zm99.46-222.32c-.08-.94-.55-1.83-1.27-2.44-51.76-42.96-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62.01 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93 1.88 1.05 4.26.19 5.05-1.82 18.89-48.39 17.94-90.23 15.93-113.31z"],
49973  "simplybuilt": [512, 512, [], "f215", "M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z"],
49974  "sistrix": [448, 512, [], "f3ee", "M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z"],
49975  "sith": [448, 512, [], "f512", "M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z"],
49976  "skyatlas": [640, 512, [], "f216", "M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z"],
49977  "skype": [448, 512, [], "f17e", "M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z"],
49978  "slack": [448, 512, [], "f198", "M244.2 217.5l19.3 57.7-59.8 20-19.3-57.7 59.8-20zm41.4 243.7C131.6 507.4 65 471.6 18.8 317.6S8.4 97 162.4 50.8C316.4 4.6 383 40.4 429.2 194.4c46.2 154 10.4 220.6-143.6 266.8zM366.2 265c-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-19.3-57.7 29-9.7c12.2-3.9 18.6-17.2 14.7-29.4-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-59.8 20.1-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l19.3 57.7-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 59.8-20.1 10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 29-9.7c12.2-4.2 18.6-17.5 14.7-29.6z"],
49979  "slack-hash": [448, 512, [], "f3ef", "M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z"],
49980  "slideshare": [512, 512, [], "f1e7", "M249.429 211.436c0 31.716-27.715 57.717-61.717 57.717-34.001 0-61.716-26.001-61.716-57.717 0-32.001 27.715-57.716 61.716-57.716 34.001 0 61.717 25.715 61.717 57.716zm254.294 50.002c-18.286 22.573-53.144 50.288-106.289 72.003C453.722 525.163 260 555.735 263.143 457.446c0 1.714-.286-52.859-.286-93.432-4.285-.858-8.571-2-13.714-3.143 0 40.858-.286 98.289-.286 96.575C252 555.735 58.278 525.163 114.566 333.441c-53.145-21.715-88.003-49.43-106.29-72.003-9.143-13.714.858-28.287 16.001-17.715 2 1.428 4.285 2.857 6.285 4.285V49.716C30.563 22.287 51.135 0 76.565 0h359.157c25.429 0 46.002 22.287 46.002 49.716v198.293l6-4.285c15.143-10.573 25.143 4 15.999 17.714zm-46.572-189.15c0-32.858-10.572-45.716-40.859-45.716H98.566c-31.716 0-40.573 10.858-40.573 45.716v192.293c67.717 35.43 125.72 29.144 157.435 28.001 13.429-.286 22.001 2.286 27.144 7.715 1.689 1.687 10.023 9.446 20.287 17.143 1.143-15.715 10.001-25.715 33.716-24.858 32.287 1.428 91.718 7.715 160.577-29.716V72.288zM331.146 153.72c-34.002 0-61.716 25.715-61.716 57.716 0 31.716 27.715 57.717 61.716 57.717 34.287 0 61.716-26.001 61.716-57.717 0-32.001-27.429-57.716-61.716-57.716z"],
49981  "snapchat": [496, 512, [], "f2ab", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.
499811 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"],
49982  "snapchat-ghost": [512, 512, [], "f2ac", "M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z"],
49983  "snapchat-square": [448, 512, [], "f2ad", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"],
49984  "soundcloud": [640, 512, [], "f1be", "M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z"],
49985  "speakap": [448, 512, [], "f3f3", "M352 32H96C43.2 32 0 75.2 0 128v256c0 52.8 43.2 96 96 96h256c52.8 0 96-43.2 96-96V128c0-52.8-43.2-96-96-96zM221 382.9c-39.6 0-81.9-17.8-81.9-53.7V302H179v17.8c0 15.1 19.5 24.5 41.9 24.5 24.2 0 41.3-10.4 41.3-29.5 0-23.8-27.2-31.9-54.7-42.6-31.9-12.4-63.1-26.2-63.1-69.1 0-48 38.6-66.4 79.9-66.4 37.6 0 75.5 14.1 75.5 41.9v31.2h-39.9v-16.1c0-12.1-17.8-18.5-35.6-18.5-19.5 0-35.6 8.1-35.6 26.2 0 22.1 22.5 29.2 47 38.9 35.9 12.4 71.1 27.2 71.1 71.5.1 48.6-40.8 71.1-85.8 71.1z"],
49986  "spotify": [496, 512, [], "f1bc", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z"],
49987  "squarespace": [512, 512, [], "f5be", "M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z"],
49988  "stack-exchange": [448, 512, [], "f18d", "M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z"],
49989  "stack-overflow": [384, 512, [], "f16c", "M293.7 300l-181.2-84.5 16.7-36.5 181.3 84.7-16.8 36.3zm48-76L188.2 95.7l-25.5 30.8 153.5 128.3 25.5-30.8zm39.6-31.7L262 32l-32 24 119.3 160.3 32-24zM290.7 311L95 269.7 86.8 309l195.7 41 8.2-39zm31.6 129H42.7V320h-40v160h359.5V320h-40v120zm-39.8-80h-200v39.7h200V360z"],
49990  "staylinked": [440, 512, [], "f3f5", "M201.6 127.4c4.1-3.2 10.3-3 13.8.5l170 167.3-2.7-2.7 44.3 41.3c3.7 3.5 3.3 9-.7 12.2l-198 163.9c-9.9 7.6-17.3.8-17.3.8L2.3 314.6c-3.5-3.5-3-9 1.2-12.2l45.8-34.9c4.2-3.2 10.4-3 13.9.5l151.9 147.5c3.7 3.5 10 3.7 14.2.4l93.2-74c4.1-3.2 4.5-8.7.9-12.2l-84-81.3c-3.6-3.5-9.9-3.7-14-.5l-.1.1c-4.1 3.2-10.4 3-14-.5l-68.1-64.3c-3.5-3.5-3.1-9 1.1-12.2l57.3-43.6m14.8 257.3c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7"],
49991  "steam": [496, 512, [], "f1b6", "M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z"],
49992  "steam-square": [448, 512, [], "f1b7", "M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z"],
49993  "steam-symbol": [448, 512, [], "f3f6", "M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z"],
49994  "sticker-mule": [576, 512, [], "f3f7", "M353.1 509.8c-5.9 2.9-32.1 3.2-36.5-.5-4.1-3-2.2-11.9-1.5-15 2.2-15-2.5-7.9-9.8-11.5-3.1-1.5-4.1-5.5-4.6-10-.5-1.5-1-2.5-1.5-3.5-1.7-10.7 6.8-33.6 8.2-43.4 4.9-23.7-.7-37.2 1.5-46.9 3.7-16.2 4.1-3.5 4.1-29.9-1.4-25.9 3.3-36.9.5-38.9-14.8 0-64.3 10.7-112.2 2-46.1-8.9-59.4-29-65.4-30.9-10.3-4.5-23.2.5-27.3 7-.1.1-35 70.6-39.6 87.8-6.2 20.5-.5 47.4 4.1 66.8 0 .1 4.5 14.6 10.3 19.5 2.1 1.5 5.1 2.5 7.2 4.5 2.8 2.7 9.4 15.2 9.8 16 2.6 4.5 3.6 8-1.5 10.5-3.6 2-9.3 2.5-14.4 2.5-2.6.5-1.5 3.5-3.1 5-2.9 2.8-20.7 6.1-29.9 2.5-2.6-1-5.7-3-6.2-5-1.5-4 2.1-9-1-12.5-4.5-2.9-13.1-2-17-12-2.2-5.4-2.6-7.6-2.6-49.4 0-9.7-5.9-38.7-8.2-46.9-1.5-5.5-1.5-11.5 0-16 .3-.9 4.1-4.6 4.1-13-1-1.5-4.6-.5-5.1-1.5-10.4-80.6-5.9-79-7.7-98.3-1.5-16-10.9-43.9-6.7-64.3.5-2.4 3.4-21 24.2-38.9 31-26.7 48.4-38.3 159-11.5 1.1.4 66.3 21.1 110.7-9 15.5-11.3 28.8-11.3 35.5-16 .1-.1 61.7-52.1 87-65.3 47.2-29.4 69.9-16.7 75.1-18 4.7-1 13.4-25.8 17-25.8 5.5 0 1.6 20.2 3.6 25.9.5 2 3.6 5 6.2 5 2.3 0 1.7-.8 10.3-5 8.4-5.4 14.9-17.6 20.6-17 11.7 1.6-19 41.6-19 46.9 0 2 .2.8 4.6 9.5 2.6 5.5 4.6 13.5 6.2 20 8.3 29.7 5.7 14.6 13.4 36.9 20.2 50.1 20.6 45.2 20.6 52.9 0 7.5-4.1 11-7.2 16.5-1.5 3-4.6 7.5-7.2 8-2.7.7 7-1.5-13.4 2.5-
499947.2 1-13.4-4.5-14.9-9.5-1.6-4.7 2.8-10.1-11.8-22.9-10.3-10-21.1-11.3-31.9-17-9.8-5.7-11.9 1-18 8-18 22.9-34 46.9-52 69.8-11.8 15-24.2 30.4-33.5 47.4-3.9 6.8-9.5 28.1-10.3 29.9-6.2 17.7-5.5 25.8-16.5 68.3-3.1 10-5.7 21.4-8.7 32.4-2.2 6.8-7.4 49.3-.5 59.4 2.1 3.5 8.7 4.5 11.3 8 .1.1 9.6 18.2 9.3 20 0 6.1-9.4 5.6-11.3 6.5-4.8 2.9-3.8 5.9-6.4 7.4"],
49995  "strava": [369, 512, [], "f428", "M301.6 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220h-67.6zM151.4 0L0 292h89.2l62.2-116.1L213.1 292h88.5L151.4 0z"],
49996  "stripe": [640, 512, [], "f429", "M640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9m-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4h-45.9zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7m-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8M346.4 124v36.2l-44.6 9.5v-36.2l44.6-9.5m-44.5 59.2h44.6v153.2h-44.6V183.2zm-47.8 13.1c10.4-19.1 31.1-15.2 37.1-13.1V224c-5.7-1.8-23.4-4.5-33.9 9.3v103.1H213V183.2h38.4l2.7 13.1m-89-13.1h33.7V221h-33.7v63.2c0 26.2 28 18 33.7 15.7v33.8c-5.9 3.2-16.6 5.9-31.2 5.9-26.3 0-46.1-17-46.1-43.3l.2-142.4 43.3-9.2.1 38.5zM44.9 228.3c0 20 67.9 10.5 67.9 63.4 0 32-25.4 47.8-62.3 47.8-15.3 0-32-3-48.5-10.1v-40c14.9 8.1 33.9 14.2 48.6 14.2 9.9 0 17-2.7 17-10.9 0-21.2-67.5-13.2-67.5-62.4 0-31.4 24-50.2 60-50.2 14.7 0 29.4 2.3 44.1 8.1V230c-13.5-7.3-30.7-11.4-44.2-11.4-9.3.1-15.1 2.8-15.1 9.7"],
49997  "stripe-s": [362, 512, [], "f42a", "M144.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C287.3 7.2 240.1 0 192.8 0 77.1 0 0 60.4 0 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5c53 22.8 106.8 32.4 156 32.4 118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9"],
49998  "studiovinari": [512, 512, [], "f3f8", "M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z"],
49999  "stumbleupon": [512, 512, [], "f1a4", "M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z"],
50000  "stumbleupon-circle": [496, 512, [], "f1a3", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z"],
50001  "superpowers": [448, 512, [], "f2dd", "M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z"],
50002  "supple": [640, 512, [], "f3f9", "M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.
500026v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z"],
50003  "teamspeak": [511, 512, [], "f4f9", "M.82 237.82c2.36-15.52 10.69-27.04 24.88-34.03 3.5-1.85 5.65-3.5 6.37-7.81 6.17-33.41 19.53-63.94 39.37-91.59 2.36-3.19 4.01-5.35 1.03-9.35-3.7-5.35-1.03-10.18 2.98-14.49 28.06-31.87 61.88-55.1 101.98-67.44 95.81-29.4 180.1-9.35 252.37 60.45 6.68 6.37 15.52 12.85 6.99 24.36-1.34 1.85 1.03 3.5 2.16 5.04 20.66 28.06 34.23 59.42 40.4 93.65.82 3.7 2.98 5.04 5.86 6.37 17.37 8.84 25.7 23.34 26.01 42.25 0 17.17 1.85 34.54-1.03 51.71-4.01 24.67-29.19 41.74-53.25 36.7-7.2-1.64-9.35-7.2-9.35-14.19 0-28.06.82-56.44 0-84.6-1.85-75.76-36.18-132.81-102.28-169.41C234.28 4.98 92.11 72.42 67.54 196.91c-6.06 30.42-1.74 48.27-3.7 125.82-.31 7.2-4.32 11.2-12.03 11.51C20.97 335.58 0 316.05 0 285.21v-20.87m221.74 106.81c11.82-4.32 20.05-11.82 22.51-24.36 2.36-12.34-12.03-30.02-32.38-48.73-20.87-19.22-48.22-39.06-63.43-46.57-21.69-12.03-41.74-1.85-46.26 22.72-5.04 26.21 0 51.4 14.49 73.91 10.18 15.52 25.39 22.72 43.38 24.05 11.62.62 52.54 2.16 61.69-1.02m129.83 5.55c36.5 2.81 59.33-28.55 58.39-60.45-2.14-45.17-66.17-16.48-87.79-8.02-73.16 28.14-45.05 54.92-22.2 60.75m149.26-1.33c-2.98-2.36-7.2-1.03-8.33 2.36-8.02 25.39-44.72 112.46-172.08 121.51-149.67 10.49 80.29 43.59 145.36-6.37 22.72-17.37 47.6-35.05 46.57-85.43-.32-10.07-4.84-26.72-11.52-32.07"],
50004  "telegram": [496, 512, [], "f2c6", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z"],
50005  "telegram-plane": [448, 512, [], "f3fe", "M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"],
50006  "tencent-weibo": [384, 512, [], "f1d5", "M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z"],
50007  "themeco": [441, 512, [], "f5c6", "M199.74 12.29c9.74-5.64 25.59-5.73 35.39-.21l188.13 105.95c9.81 5.52 17.76 19.14 17.76 30.38v213.87c0 11.26-7.93 24.89-17.71 30.46L235.09 499.88c-9.78 5.57-25.58 5.48-35.29-.21L17.58 392.95C7.87 387.26 0 373.52 0 362.27V148.41c0-11.26 7.9-24.96 17.63-30.59L199.74 12.29zM123.54 209c-15.69 0-31.39.14-47.08.14v99.87h18.83v-29.39h28.25c48.94 0 48.79-70.62 0-70.62zm137.96 98.73l-30.25-34.1c36.4-7.39 34.26-64.21-10.7-64.49-15.84 0-31.67-.14-47.51-.14v100.01h18.83v-33.38H210l29.1 33.38h22.4v-1.28zm-40.94-81.04c22.98 0 22.9 31.96 0 31.96h-28.68v-31.96h28.68zm-94.07-1.57c20.85 0 20.78 38.24 0 38.24H94.68v-38.23l31.81-.01zm189.65-17.97c-67.4 0-69.86 104.15 0 104.15 68.39-.01 68.33-104.15 0-104.15zm0 17.12c43.43 0 44.1 69.76 0 69.76-44.12 0-43.74-69.76 0-69.76z"],
50008  "themeisle": [512, 512, [], "f2b2", "M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.5
5000872-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z"],
50009  "trade-federation": [496, 512, [], "f513", "M202.45 108.42v81.61H38.94l48.22 61.91h114.73v196.75h64.61V252.96h83.27v-62.69h-83.18V171.1h145.62v-62.68H202.45zm4.86 6h197.77v50.68H259.44v30.93h83.18v50.93h-83.26v195.73h-52.73V245.94H89.86l-39.95-49.91h157.4v-81.61zM247.99 8.8C111.03 8.8 0 119.83 0 256.8s111.03 248 247.99 248S496 393.76 496 256.8 384.96 8.8 247.99 8.8zm.02 13.24c129.66 0 234.76 105.12 234.76 234.78s-105.1 234.76-234.76 234.76S13.23 386.47 13.23 256.81 118.35 22.04 248.01 22.04zm0 7.89c-125.3 0-226.89 101.57-226.89 226.87s101.59 226.89 226.89 226.89S474.88 382.1 474.88 256.8 373.31 29.93 248.01 29.93zm-.02 13.3c117.95 0 213.56 95.62 213.56 213.56s-95.62 213.56-213.56 213.56S34.43 374.75 34.43 256.8 130.04 43.23 247.99 43.23zm-73.32 104.8l15.66 18.05-22.16-9.45-12.33 20.47 2.15-23.99-23.28-5.4 23.48-5.37-2.06-23.81 12.37 20.67 22.01-9.32-15.84 18.15zm-47.14-46.54l8.01 12.4 12.69-5.86-9.32 11.45 9.5 10.25-13.77-5.32-6.82 12.2.81-14.74-13.71-2.71 14.27-3.78-1.66-13.89zm250.77 75.59l11.99 19.56 20.88-9.11-14.9 17.45 15.11 17.04-21.2-8.78-11.54 19.64 1.8-22.87-22.24-4.9 22.31-5.36-2.21-22.67zm-107.05 98.45l13.86-3.22-1.28-14.17 7.35 12.18 13.08-5.59-9.31 10.75 9.36 10.71-13.1-5.54-7.29 12.21 1.22-14.17-13.89-3.16zm-125.43 6.5l23.73-3.87-1.73-24.53 11.01 21.38 22.79-9.22-16.93 17.08 15.81 18.83-21.47-10.82-13.02 20.86 3.66-23.77-23.85-5.94zm63.44-165.66v81.61H54.16l36.72 46.01h117.7v196.75h48.82V245.01h83.27v-47.03H257.4v-34.83h145.73v-46.78H209.26zm10.86 11.2h171.8v24.36H246.88v56.23h82.93v23.94h-82.93v197.42h-26.76V232.1H96.31l-20.09-23.94h143.9v-80.59z"],
50010  "trello": [448, 512, [], "f181", "M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zM194.9 371.4c0 14.8-12 26.9-26.9 26.9H85.1c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9H168c14.8 0 26.9 12 26.9 26.9v254.3zm194.9-112c0 14.8-12 26.9-26.9 26.9H280c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v142.3z"],
50011  "tripadvisor": [576, 512, [], "f262", "M166.4 280.521c0 13.236-10.73 23.966-23.966 23.966s-23.966-10.73-23.966-23.966 10.73-23.966 23.966-23.966 23.966 10.729 23.966 23.966zm264.962-23.956c-13.23 0-23.956 10.725-23.956 23.956 0 13.23 10.725 23.956 23.956 23.956 13.23 0 23.956-10.725 23.956-23.956-.001-13.231-10.726-23.956-23.956-23.956zm89.388 139.49c-62.667 49.104-153.276 38.109-202.379-24.559l-30.979 46.325-30.683-45.939c-48.277 60.39-135.622 71.891-197.885 26.055-64.058-47.158-77.759-137.316-30.601-201.374A186.762 186.762 0 0 0 0 139.416l90.286-.05a358.48 358.48 0 0 1 197.065-54.03 350.382 350.382 0 0 1 192.181 53.349l96.218.074a185.713 185.713 0 0 0-28.352 57.649c46.793 62.747 34.964 151.37-26.648 199.647zM259.366 281.761c-.007-63.557-51.535-115.075-115.092-115.068C80.717 166.7 29.2 218.228 29.206 281.785c.007 63.557 51.535 115.075 115.092 115.068 63.513-.075 114.984-51.539 115.068-115.052v-.04zm28.591-10.455c5.433-73.44 65.51-130.884 139.12-133.022a339.146 339.146 0 0 0-139.727-27.812 356.31 356.31 0 0 0-140.164 27.253c74.344 1.582 135.299 59.424 140.771 133.581zm251.706-28.767c-21.992-59.634-88.162-90.148-147.795-68.157-59.634 21.992-90.148 88.162-68.157 147.795v.032c22.038 59.607 88.198 90.091 147.827 68.113 59.615-22.004 90.113-88.162 68.125-147.783zm-326.039 37.975v.115c-.057 39.328-31.986 71.163-71.314 71.106-39.328-.057-71.163-31.986-71.106-71.314.057-39.328 31.986-71.163 71.314-71.106 39.259.116 71.042 31.94 71.106 71.199zm-24.512 0v-.084c-.051-25.784-20.994-46.645-46.778-46.594-25.784.051-46.645 20.994-46.594 46.777.051 25.784 20.994 46.645 46.777 46.594 25.726-.113 46.537-20.968 46.595-46.693zm313.423 0v.048c-.02 39.328-31.918 71.194-71.247 71.173s-71.194-31.918-71.173-71.247c.02-39.328 31.918-71.194 71.247-71.173 39.29.066 71.121 31.909 71.173 71.199zm-24.504-.008c-.009-25.784-20.918-46.679-46.702-46.67-25.784.009-46.679 20.918-46.67 46.702.009 25.784 20.918 46.678 46.702 46.67 25.765-.046 46.636-20.928 46.67-46.693v-.009z"],
50012  "tumblr": [320, 512, [], "f173", "M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z"],
50013  "tumblr-square": [448, 512, [], "f174", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z"],
50014  "twitch": [448, 512, [], "f1e8", "M40.1 32L10 108.9v314.3h107V480h60.2l56.8-56.8h87l117-117V32H40.1zm357.8 254.1L331 353H224l-56.8 56.8V353H76.9V72.1h321v214zM331 149v116.9h-40.1V149H331zm-107 0v116.9h-40.1V149H224z"],
50015  "twitter": [512, 512, [], "f099", "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"],
50016  "twitter-square": [448, 512, [], "f081", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"],
50017  "typo3": [433, 512, [], "f42b", "M330.8 341c-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9 0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-1
5001776.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C0 246 106.8 480 184.1 480c36.3 0 97.3-59.5 146.7-139M294.5 32c71.8 0 138.8 11.6 138.8 52.5 0 82.6-52.5 182.3-78.8 182.3-47.9 0-101.7-132.1-101.7-198.5 0-30.9 11.6-36.3 41.7-36.3"],
50018  "uber": [448, 512, [], "f402", "M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z"],
50019  "uikit": [448, 512, [], "f403", "M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z"],
50020  "uniregistry": [384, 512, [], "f404", "M281.1 220.1H384v-14.8H281.1v14.8zm0-37.1H384v-12.4H281.1V183zm0 74.2H384v-17.3H281.1v17.3zm-157.7 86.7H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8m145.7-12.4h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3m-41.5 37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8M384 32H281.1v2.5H384V32zM192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480m89.1-334.2H384V136H281.1v9.8zm0-37.1H384v-7.4H281.1v7.4zm0-37.1H384v-4.9H281.1v4.9zm-178.2 99H0V183h102.9v-12.4zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2m64.1-118.8v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4m178.2 0c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1v12.4zm-203 156h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7m24.8-376.2H0v4.9h102.9v-4.9zm0-34.7H0v2.5h102.9V32zm0 173.3H0v14.8h102.9v-14.8zm0 34.6H0v17.3h102.9v-17.3zm0-103.9H0v9.9h102.9V136zm0-34.7H0v7.4h102.9v-7.4zm2.8 207.9H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3"],
50021  "untappd": [640, 512, [], "f405", "M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z"],
50022  "usb": [640, 512, [], "f287", "M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z"],
50023  "ussunnah": [512, 512, [], "f407", "M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 
5002315 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z"],
50024  "vaadin": [448, 512, [], "f408", "M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z"],
50025  "viacoin": [384, 512, [], "f237", "M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z"],
50026  "viadeo": [448, 512, [], "f2a9", "M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z"],
50027  "viadeo-square": [448, 512, [], "f2aa", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z"],
50028  "viber": [512, 512, [], "f409", "M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-
500285.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z"],
50029  "vimeo": [448, 512, [], "f40a", "M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z"],
50030  "vimeo-square": [448, 512, [], "f194", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z"],
50031  "vimeo-v": [448, 512, [], "f27d", "M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z"],
50032  "vine": [384, 512, [], "f1ca", "M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z"],
50033  "vk": [576, 512, [], "f189", "M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z"],
50034  "vnv": [640, 512, [], "f40b", "M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z"],
50035  "vuejs": [448, 512, [], "f41f", "M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z"],
50036  "weebly": [512, 512, [], "f5cc", "M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24
50036-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z"],
50037  "weibo": [512, 512, [], "f18a", "M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z"],
50038  "weixin": [576, 512, [], "f1d7", "M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z"],
50039  "whatsapp": [448, 512, [], "f232", "M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"],
50040  "whatsapp-square": [448, 512, [], "f40c", "M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z"],
50041  "whmcs": [448, 512, [], "f40d", "M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z"],
50042  "wikipedia-w": [640, 512, [], "f266", "M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 
5004263.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z"],
50043  "windows": [448, 512, [], "f17a", "M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"],
50044  "wix": [640, 512, [], "f5cf", "M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z"],
50045  "wolf-pack-battalion": [456, 512, [], "f514", "M239.73 471.53l10.56 15.84 5.28-12.32 5.28 7.04V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05 27.87 3.34 53.94 10.58 63.34 54.1l-30.35 8.36c11.15 23.04 17.01 46.76 13.2 72.14L384 313.18l-6.16 33.43-18.47-7.04-8.8 33.43-19.35-7.04 26.39 21.11 8.8-28.15 24.63 5.28 7.04-35.63 26.39 14.52c.25-20.02 6.97-58.06-8.8-84.45l26.39 5.28c3.99-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 1.96-19.87 17.45-42.62 43.11-49.7-43.99 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.47 22.87-89.73 65.1-93.25 147.79l-58.06 38.71-3.52 93.25 107.33-59.82 7.04 7.04-17.59 3.52-43.99 38.71-15.84-5.28-28.15 49.26-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-43.99-38.71-17.59-3.52 7.04-7.04 107.33 59.82-3.52-93.25-58.06-38.71C157.03 65.1 107.77 22.87 67.3 0c-17.54 61.12-4.4 118.76 0 130.2 14.96-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9C29.94 160.06.44 191.78 0 216.85l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7.04 35.63 24.63-5.28 8.8 28.15 26.39-21.11-19.34 7.05-8.8-33.43-18.47 7.04-6.16-33.43-27.27 7.04c-3.82-25.38 2.05-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.91l5.28-7.04 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95.01l-15.84-10.56c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.26-.27 13.88-3.51 22.88zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7.04 8.24-7.9 15.55-16.27 22.87-24.63zm24.63 5.28c-.02-13.43-2.05-24.21-5.28-33.43-5.38 9.09-11.23 18.18-18.47 27.27l23.75 6.16zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-11.99 6.65-28.14 7.04-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 43.99-14.08-10.6-18.95-27.22-25.52-45.75-28.15zM137.68 376.52l15.84-10.56c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7.04-8.24-7.9-15.55-16.27-22.87-24.63zm-24.64 5.28c.02-13.43 2.05-24.21 5.28-33.43 5.38 9.09 11.23 18.18 18.47 27.27l-23.75 6.16zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 36.95-10.56-5.05-11.99-6.65-28.14-7.04-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-43.99-14.08 10.61-18.95 27.22-25.52 45.75-28.15z"],
50046  "wordpress": [512, 512, [], "f19a", "M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"],
50047  "wordpress-simple": [512, 512, [], "f411", "M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z"],
50048  "wpbeginner": [512, 512, [], "f297", "M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z"],
50049  "wpexplorer": [512, 512, [], "f2de", "M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z"],
50050  "wpforms": [448, 512, [], "f298", "M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z"],
50051  "xbox": [512, 512, [], "f412", "M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z"],
50052  "xing": [384, 512, [], "f168", "M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"],
50053  "xing-square": [448, 512, [], "f169", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z"],
50054  "y-combinator": [448, 512, [], "f23b", "M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z"],
50055  "yahoo": [448, 512, [], "f19e", "M252 292l4 220c-12.7-2.2-23.5-3.9-32.3-3.9-8.4 0-19.2 1.7-32.3 3.9l4-220C140.4 197.2 85 95.2 21.4 0c11.9 3.1 23 3.9 33.2 3.9 9 0 20.4-.8 34.1-3.9 40.9 72.2 82.1 138.7 135 225.5C261 163.9 314.8 81.4 358.6 0c11.1 2.9 22 3.9 32.9 3.9 11.5 0 23.2-1 35-3.9C392.1 47.9 294.9 216.9 252 292z"],
50056  "yandex": [256, 512, [], "f413", "M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z"],
50057  "yandex-international": [320, 512, [], "f414", "M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z"],
50058  "yelp": [384, 512, [], "f1e9", "M136.9 328c-1 .3-109.2 35.7-115.8 35.7-1
500585.2-.9-18.5-16.2-19.9-31.2-1.5-14.2-1.4-29.8.3-46.8 1.9-18.8 5.5-45.1 24.2-44 4.8 0 67.1 25.9 112.7 44.4 17.1 6.8 18.6 35.8-1.5 41.9zm57.9-113.9c1.8 38.2-25.5 48.5-47.2 14.3L41.3 60.4c-1.5-6.6.3-12.4 5.3-17.4C62.2 26.5 146 3.2 168.1 8.9c7.5 1.9 12.1 6.1 13.8 12.6 1.3 8.3 11.5 167.4 12.9 192.6zm-1.4 164.8c0 4.6.2 116.4-1.7 121.5-2.3 6-7 9.7-14.3 11.2-10.1 1.7-27.1-1.9-51-10.7-22-8.1-56.7-21.5-49.3-42.5 2.8-6.9 51.4-62.8 77.3-93.6 12-15.2 39.8-5.5 39 14.1zm180.2-117.8c-5.6 3.7-110.8 28.2-118.1 30.6l.3-.6c-18.1 4.7-35.4-18.5-23.3-34.6 3.7-3.7 65.9-92.4 72.8-97 5.2-3.6 11.3-3.8 18.3-.6 18.4 8.8 55.1 63.1 57.4 84.6-.1 2.9 1.2 11.7-7.4 17.6zm10.1 130.7c-2.7 20.6-44.5 73.4-63.8 81-6.9 2.6-12.9 2-17.7-2-5-3.5-61.8-97.1-64.9-102.3-10.9-16.2 6.8-39.8 25.6-33.2 0 0 110.5 35.7 114.7 39.4 5.2 4.1 7.2 9.8 6.1 17.1z"],
50059  "yoast": [448, 512, [], "f2b1", "M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z"],
50060  "youtube": [576, 512, [], "f167", "M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"],
50061  "youtube-square": [448, 512, [], "f431", "M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z"],
50062  "zhihu": [640, 512, [], "f63f", "M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z"]
50063};
50064
50065bunker(function () {
50066  define('fab', icons);
50067});
50068
50069}());
50070
50071/*!
50072 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com
50073 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
50074 */
50075(function () {
50076'use strict';
50077
50078var noop = function noop() {};
50079
50080var _WINDOW = {};
50081var _DOCUMENT = {};
50082var _MUTATION_OBSERVER$1 = null;
50083var _PERFORMANCE = { mark: noop, measure: noop };
50084
50085try {
50086  if (typeof window !== 'undefined') _WINDOW = window;
50087  if (typeof document !== 'undefined') _DOCUMENT = document;
50088  if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER$1 = MutationObserver;
50089  if (typeof performance !== 'undefined') _PERFORMANCE = performance;
50090} catch (e) {}
50091
50092var _ref = _WINDOW.navigator || {};
50093var _ref$userAgent = _ref.userAgent;
50094var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent;
50095
50096var WINDOW = _WINDOW;
50097var DOCUMENT = _DOCUMENT;
50098var MUTATION_OBSERVER = _MUTATION_OBSERVER$1;
50099var PERFORMANCE = _PERFORMANCE;
50100var IS_BROWSER = !!WINDOW.document;
50101var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
50102var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
50103
50104var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
50105var UNITS_IN_GRID = 16;
50106var DEFAULT_FAMILY_PREFIX = 'fa';
50107var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';
50108var DATA_FA_I2SVG = 'data-fa-i2svg';
50109var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';
50110var DATA_PREFIX = 'data-prefix';
50111var DATA_ICON = 'data-icon';
50112var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';
50113var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];
50114var PRODUCTION = function () {
50115  try {
50116    return "production" === 'production';
50117  } catch (e) {
50118    return false;
50119  }
50120}();
50121
50122var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
50123var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
50124
50125var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];
50126
50127var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {
50128  return n + 'x';
50129})).concat(oneToTwenty.map(function (n) {
50130  return 'w-' + n;
50131}));
50132
50133var classCallCheck = function (instance, Constructor) {
50134  if (!(instance instanceof Constructor)) {
50135    throw new TypeError("Cannot call a class as a function");
50136  }
50137};
50138
50139var createClass = function () {
50140  function defineProperties(target, props) {
50141    for (var i = 0; i < props.length; i++) {
50142      var descriptor = props[i];
50143      descriptor.enumerable = descriptor.enumerable || false;
50144      descriptor.configurable = true;
50145      if ("value" in descriptor) descriptor.writable = true;
50146      Object.defineProperty(target, descriptor.key, descriptor);
50147    }
50148  }
50149
50150  return function (Constructor, protoProps, staticProps) {
50151    if (protoProps) defineProperties(Constructor.prototype, protoProps);
50152    if (staticProps) defineProperties(Constructor, staticProps);
50153    return Constructor;
50154  };
50155}();
50156
50157
50158
50159var _extends = Object.assign || function (target) {
50160  for (var i = 1; i < arguments.length; i++) {
50161    var source = arguments[i];
50162
50163    for (var key in source) {
50164      if (Object.prototype.hasOwnProperty.call(source, key)) {
50165        target[key] = source[key];
50166      }
50167    }
50168  }
50169
50170  return target;
50171};
50172
50173
50174
50175var slicedToArray = function () {
50176  function sliceIterator(arr, i) {
50177    var _arr = [];
50178    var _n = true;
50179    var _d = false;
50180    var _e = undefined;
50181
50182    try {
50183      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
50184        _arr.push(_s.value);
50185
50186        if (i && _arr.length === i) break;
50187      }
50188    } catch (err) {
50189      _d = true;
50190      _e = err;
50191    } finally {
50192      try {
50193        if (!_n && _i["return"]) _i["return"]();
50194      } finally {
50195        if (_d) throw _e;
50196      }
50197    }
50198
50199    return _arr;
50200  }
50201
50202  return function (arr, i) {
50203    if (Array.isArray(arr)) {
50204      return arr;
50205    } else if (Symbol.iterator in Object(arr)) {
50206      return sliceIterator(arr, i);
50207    } else {
50208      throw new TypeError("Invalid attempt to destructure non-iterable instance");
50209    }
50210  };
50211}();
50212
50213var toConsumableArray = function (arr) {
50214  if (Array.isArray(arr)) {
50215    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
50216
50217    return arr2;
50218  } else {
50219    return Array.from(arr);
50220  }
50221};
50222
50223var initial = WINDOW.FontAwesomeConfig || {};
50224
50225function getAttrConfig(attr) {
50226  var element = DOCUMENT.querySelector('script[' + attr + ']');
50227
50228  if (element) {
50229    return element.getAttribute(attr);
50230  }
50231}
50232
50233function coerce(val) {
50234  // Getting an empty string will occur if the attribute is set on the HTML tag but without a value
50235  // We'll assume that this is an indication that it should be toggled to true
50236  // For example <script data-search-pseudo-elements src="..."></script>
50237  if (val === '') return true;
50238  if (val === 'false') return false;
50239  if (val === 'true') return true;
50240  return val;
50241}
50242
50243if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {
50244  var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];
50245
50246  attrs.forEach(function (_ref) {
50247    var _ref2 = slicedToArray(_ref, 2),
50248        attr = _ref2[0],
50249        key = _ref2[1];
50250
50251    var val = coerce(getAttrConfig(attr));
50252
50253    if (val !== undefined && val !== null) {
50254      initial[key] = val;
50255    }
50256  });
50257}
50258
50259var _default = _extends({
50260  familyPrefix: DEFAULT_FAMILY_PREFIX,
50261  replacementClass: DEFAULT_REPLACEMENT_CLASS,
50262  autoReplaceSvg: true,
50263  autoAddCss: true,
50264  autoA11y: true,
50265  searchPseudoElements: false,
50266  observeMutations: true,
50267  keepOriginalSource: true,
50268  measurePerformance: false,
50269  showMissingIcons: true
50270}, initial);
50271
50272if (!_default.autoReplaceSvg) _default.observeMutations = false;
50273
50274var config = _extends({}, _default);
50275
50276WINDOW.FontAwesomeConfig = config;
50277
50278var w = WINDOW || {};
50279
50280if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
50281if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
50282if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
50283if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
50284
50285var namespace = w[NAMESPACE_IDENTIFIER];
50286
50287var functions = [];
50288var listener = function listener() {
50289  DOCUMENT.removeEventListener('DOMContentLoaded', listener);
50290  loaded = 1;
50291  functions.map(function (fn) {
50292    return fn();
50293  });
50294};
50295
50296var loaded = false;
50297
50298if (IS_DOM) {
50299  loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
50300
50301  if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);
50302}
50303
50304var domready = function (fn) {
50305  if (!IS_DOM) return;
50306  loaded ? setTimeout(fn, 0) : functions.push(fn);
50307};
50308
50309var d = UNITS_IN_GRID;
50310
50311var meaninglessTransform = {
50312  size: 16,
50313  x: 0,
50314  y: 0,
50315  rotate: 0,
50316  flipX: false,
50317  flipY: false
50318};
50319
50320function isReserved(name) {
50321  return ~RESERVED_CLASSES.indexOf(name);
50322}
50323
50324function bunker(fn) {
50325  try {
50326    fn();
50327  } catch (e) {
50328    if (!PRODUCTION) {
50329      throw e;
50330    }
50331  }
50332}
50333
50334function insertCss(css) {
50335  if (!css || !IS_DOM) {
50336    return;
50337  }
50338
50339  var style = DOCUMENT.createElement('style');
50340  style.setAttribute('type', 'text/css');
50341  style.innerHTML = css;
50342
50343  var headChildren = DOCUMENT.head.childNodes;
50344  var beforeChild = null;
50345
50346  for (var i = headChildren.length - 1; i > -1; i--) {
50347    var child = headChildren[i];
50348    var tagName = (child.tagName || '').toUpperCase();
50349    if (['STYLE', 'LINK'].indexOf(tagName) > -1) {
50350      beforeChild = child;
50351    }
50352  }
50353
50354  DOCUMENT.head.insertBefore(style, beforeChild);
50355
50356  return css;
50357}
50358
50359var _uniqueId = 0;
50360
50361function nextUniqueId() {
50362  _uniqueId++;
50363
50364  return _uniqueId;
50365}
50366
50367function toArray(obj) {
50368  var array = [];
50369
50370  for (var i = (obj || []).length >>> 0; i--;) {
50371    array[i] = obj[i];
50372  }
50373
50374  return array;
50375}
50376
50377function classArray(node) {
50378  if (node.classList) {
50379    return toArray(node.classList);
50380  } else {
50381    return (node.getAttribute('class') || '').split(' ').filter(function (i) {
50382      return i;
50383    });
50384  }
50385}
50386
50387function getIconName(familyPrefix, cls) {
50388  var parts = cls.split('-');
50389  var prefix = parts[0];
50390  var iconName = parts.slice(1).join('-');
50391
50392  if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {
50393    return iconName;
50394  } else {
50395    return null;
50396  }
50397}
50398
50399function htmlEscape(str) {
50400  return ('' + str).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
50401}
50402
50403function joinAttributes(attributes) {
50404  return Object.keys(attributes || {}).reduce(function (acc, attributeName) {
50405    return acc + (attributeName + '="' + htmlEscape(attributes[attributeName]) + '" ');
50406  }, '').trim();
50407}
50408
50409function joinStyles(styles) {
50410  return Object.keys(styles || {}).reduce(function (acc, styleName) {
50411    return acc + (styleName + ': ' + styles[styleName] + ';');
50412  }, '');
50413}
50414
50415function transformIsMeaningful(transform) {
50416  return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;
50417}
50418
50419function transformForSvg(_ref) {
50420  var transform = _ref.transform,
50421      containerWidth = _ref.containerWidth,
50422      iconWidth = _ref.iconWidth;
50423
50424  var outer = {
50425    transform: 'translate(' + containerWidth / 2 + ' 256)'
50426  };
50427  var innerTranslate = 'translate(' + transform.x * 32 + ', ' + transform.y * 32 + ') ';
50428  var innerScale = 'scale(' + transform.size / 16 * (transform.flipX ? -1 : 1) + ', ' + transform.size / 16 * (transform.flipY ? -1 : 1) + ') ';
50429  var innerRotate = 'rotate(' + transform.rotate + ' 0 0)';
50430  var inner = {
50431    transform: innerTranslate + ' ' + innerScale + ' ' + innerRotate
50432  };
50433  var path = {
50434    transform: 'translate(' + iconWidth / 2 * -1 + ' -256)'
50435  };
50436  return {
50437    outer: outer,
50438    inner: inner,
50439    path: path
50440  };
50441}
50442
50443function transformForCss(_ref2) {
50444  var transform = _ref2.transform,
50445      _ref2$width = _ref2.width,
50446      width = _ref2$width === undefined ? UNITS_IN_GRID : _ref2$width,
50447      _ref2$height = _ref2.height,
50448      height = _ref2$height === undefined ? UNITS_IN_GRID : _ref2$height,
50449      _ref2$startCentered = _ref2.startCentered,
50450      startCentered = _ref2$startCentered === undefined ? false : _ref2$startCentered;
50451
50452  var val = '';
50453
50454  if (startCentered && IS_IE) {
50455    val += 'translate(' + (transform.x / d - width / 2) + 'em, ' + (transform.y / d - height / 2) + 'em) ';
50456  } else if (startCentered) {
50457    val += 'translate(calc(-50% + ' + transform.x / d + 'em), calc(-50% + ' + transform.y / d + 'em)) ';
50458  } else {
50459    val += 'translate(' + transform.x / d + 'em, ' + transform.y / d + 'em) ';
50460  }
50461
50462  val += 'scale(' + transform.size / d * (transform.flipX ? -1 : 1) + ', ' + transform.size / d * (transform.flipY ? -1 : 1) + ') ';
50463  val += 'rotate(' + transform.rotate + 'deg) ';
50464
50465  return val;
50466}
50467
50468var ALL_SPACE = {
50469  x: 0,
50470  y: 0,
50471  width: '100%',
50472  height: '100%'
50473};
50474
50475var makeIconMasking = function (_ref) {
50476  var children = _ref.children,
50477      attributes = _ref.attributes,
50478      main = _ref.main,
50479      mask = _ref.mask,
50480      transform = _ref.transform;
50481  var mainWidth = main.width,
50482      mainPath = main.icon;
50483  var maskWidth = mask.width,
50484      maskPath = mask.icon;
50485
50486
50487  var trans = transformForSvg({ transform: transform, containerWidth: maskWidth, iconWidth: mainWidth });
50488
50489  var maskRect = {
50490    tag: 'rect',
50491    attributes: _extends({}, ALL_SPACE, {
50492      fill: 'white'
50493    })
50494  };
50495  var maskInnerGroup = {
50496    tag: 'g',
50497    attributes: _extends({}, trans.inner),
50498    children: [{ tag: 'path', attributes: _extends({}, mainPath.attributes, trans.path, { fill: 'black' }) }]
50499  };
50500  var maskOuterGroup = {
50501    tag: 'g',
50502    attributes: _extends({}, trans.outer),
50503    children: [maskInnerGroup]
50504  };
50505  var maskId = 'mask-' + nextUniqueId();
50506  var clipId = 'clip-' + nextUniqueId();
50507  var maskTag = {
50508    tag: 'mask',
50509    attributes: _extends({}, ALL_SPACE, {
50510      id: maskId,
50511      maskUnits: 'userSpaceOnUse',
50512      maskContentUnits: 'userSpaceOnUse'
50513    }),
50514    children: [maskRect, maskOuterGroup]
50515  };
50516  var defs = {
50517    tag: 'defs',
50518    children: [{ tag: 'clipPath', attributes: { id: clipId }, children: [maskPath] }, maskTag]
50519  };
50520
50521  children.push(defs, { tag: 'rect', attributes: _extends({ fill: 'currentColor', 'clip-path': 'url(#' + clipId + ')', mask: 'url(#' + maskId + ')' }, ALL_SPACE) });
50522
50523  return {
50524    children: children,
50525    attributes: attributes
50526  };
50527};
50528
50529var makeIconStandard = function (_ref) {
50530  var children = _ref.children,
50531      attributes = _ref.attributes,
50532      main = _ref.main,
50533      transform = _ref.transform,
50534      styles = _ref.styles;
50535
50536  var styleString = joinStyles(styles);
50537
50538  if (styleString.length > 0) {
50539    attributes['style'] = styleString;
50540  }
50541
50542  if (transformIsMeaningful(transform)) {
50543    var trans = transformForSvg({ transform: transform, containerWidth: main.width, iconWidth: main.width });
50544    children.push({
50545      tag: 'g',
50546      attributes: _extends({}, trans.outer),
50547      children: [{
50548        tag: 'g',
50549        attributes: _extends({}, trans.inner),
50550        children: [{
50551          tag: main.icon.tag,
50552          children: main.icon.children,
50553          attributes: _extends({}, main.icon.attributes, trans.path)
50554        }]
50555      }]
50556    });
50557  } else {
50558    children.push(main.icon);
50559  }
50560
50561  return {
50562    children: children,
50563    attributes: attributes
50564  };
50565};
50566
50567var asIcon = function (_ref) {
50568  var children = _ref.children,
50569      main = _ref.main,
50570      mask = _ref.mask,
50571      attributes = _ref.attributes,
50572      styles = _ref.styles,
50573      transform = _ref.transform;
50574
50575  if (transformIsMeaningful(transform) && main.found && !mask.found) {
50576    var width = main.width,
50577        height = main.height;
50578
50579    var offset = {
50580      x: width / height / 2,
50581      y: 0.5
50582    };
50583    attributes['style'] = joinStyles(_extends({}, styles, {
50584      'transform-origin': offset.x + transform.x / 16 + 'em ' + (offset.y + transform.y / 16) + 'em'
50585    }));
50586  }
50587
50588  return [{
50589    tag: 'svg',
50590    attributes: attributes,
50591    children: children
50592  }];
50593};
50594
50595var asSymbol = function (_ref) {
50596  var prefix = _ref.prefix,
50597      iconName = _ref.iconName,
50598      children = _ref.children,
50599      attributes = _ref.attributes,
50600      symbol = _ref.symbol;
50601
50602  var id = symbol === true ? prefix + '-' + config.familyPrefix + '-' + iconName : symbol;
50603
50604  return [{
50605    tag: 'svg',
50606    attributes: {
50607      style: 'display: none;'
50608    },
50609    children: [{
50610      tag: 'symbol',
50611      attributes: _extends({}, attributes, { id: id }),
50612      children: children
50613    }]
50614  }];
50615};
50616
50617function makeInlineSvgAbstract(params) {
50618  var _params$icons = params.icons,
50619      main = _params$icons.main,
50620      mask = _params$icons.mask,
50621      prefix = params.prefix,
50622      iconName = params.iconName,
50623      transform = params.transform,
50624      symbol = params.symbol,
50625      title = params.title,
50626      extra = params.extra,
50627      _params$watchable = params.watchable,
50628      watchable = _params$watchable === undefined ? false : _params$watchable;
50629
50630  var _ref = mask.found ? mask : main,
50631      width = _ref.width,
50632      height = _ref.height;
50633
50634  var widthClass = 'fa-w-' + Math.ceil(width / height * 16);
50635  var attrClass = [config.replacementClass, iconName ? config.familyPrefix + '-' + iconName : '', widthClass].filter(function (c) {
50636    return extra.classes.indexOf(c) === -1;
50637  }).concat(extra.classes).join(' ');
50638
50639  var content = {
50640    children: [],
50641    attributes: _extends({}, extra.attributes, {
50642      'data-prefix': prefix,
50643      'data-icon': iconName,
50644      'class': attrClass,
50645      'role': 'img',
50646      'xmlns': 'http://www.w3.org/2000/svg',
50647      'viewBox': '0 0 ' + width + ' ' + height
50648    })
50649  };
50650
50651  if (watchable) {
50652    content.attributes[DATA_FA_I2SVG] = '';
50653  }
50654
50655  if (title) content.children.push({ tag: 'title', attributes: { id: content.attributes['aria-labelledby'] || 'title-' + nextUniqueId() }, children: [title] });
50656
50657  var args = _extends({}, content, {
50658    prefix: prefix,
50659    iconName: iconName,
50660    main: main,
50661    mask: mask,
50662    transform: transform,
50663    symbol: symbol,
50664    styles: extra.styles
50665  });
50666
50667  var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),
50668      children = _ref2.children,
50669      attributes = _ref2.attributes;
50670
50671  args.children = children;
50672  args.attributes = attributes;
50673
50674  if (symbol) {
50675    return asSymbol(args);
50676  } else {
50677    return asIcon(args);
50678  }
50679}
50680
50681function makeLayersTextAbstract(params) {
50682  var content = params.content,
50683      width = params.width,
50684      height = params.height,
50685      transform = params.transform,
50686      title = params.title,
50687      extra = params.extra,
50688      _params$watchable2 = params.watchable,
50689      watchable = _params$watchable2 === undefined ? false : _params$watchable2;
50690
50691
50692  var attributes = _extends({}, extra.attributes, title ? { 'title': title } : {}, {
50693    'class': extra.classes.join(' ')
50694  });
50695
50696  if (watchable) {
50697    attributes[DATA_FA_I2SVG] = '';
50698  }
50699
50700  var styles = _extends({}, extra.styles);
50701
50702  if (transformIsMeaningful(transform)) {
50703    styles['transform'] = transformForCss({ transform: transform, startCentered: true, width: width, height: height });
50704    styles['-webkit-transform'] = styles['transform'];
50705  }
50706
vendor: 7,952 bytes, lines 50707-51035
50707  var styleString = joinStyles(styles);
50708
50709  if (styleString.length > 0) {
50710    attributes['style'] = styleString;
50711  }
50712
50713  var val = [];
50714
50715  val.push({
50716    tag: 'span',
50717    attributes: attributes,
50718    children: [content]
50719  });
50720
50721  if (title) {
50722    val.push({ tag: 'span', attributes: { class: 'sr-only' }, children: [title] });
50723  }
50724
50725  return val;
50726}
50727
50728function makeLayersCounterAbstract(params) {
50729  var content = params.content,
50730      title = params.title,
50731      extra = params.extra;
50732
50733
50734  var attributes = _extends({}, extra.attributes, title ? { 'title': title } : {}, {
50735    'class': extra.classes.join(' ')
50736  });
50737
50738  var styleString = joinStyles(extra.styles);
50739
50740  if (styleString.length > 0) {
50741    attributes['style'] = styleString;
50742  }
50743
50744  var val = [];
50745
50746  val.push({
50747    tag: 'span',
50748    attributes: attributes,
50749    children: [content]
50750  });
50751
50752  if (title) {
50753    val.push({ tag: 'span', attributes: { class: 'sr-only' }, children: [title] });
50754  }
50755
50756  return val;
50757}
50758
50759var noop$2 = function noop() {};
50760var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { mark: noop$2, measure: noop$2 };
50761var preamble = 'FA "5.2.0"';
50762
50763var begin = function begin(name) {
50764  p.mark(preamble + ' ' + name + ' begins');
50765  return function () {
50766    return end(name);
50767  };
50768};
50769
50770var end = function end(name) {
50771  p.mark(preamble + ' ' + name + ' ends');
50772  p.measure(preamble + ' ' + name, preamble + ' ' + name + ' begins', preamble + ' ' + name + ' ends');
50773};
50774
50775var perf = { begin: begin, end: end };
50776
50777'use strict';
50778
50779/**
50780 * Internal helper to bind a function known to have 4 arguments
50781 * to a given context.
50782 */
50783var bindInternal4 = function bindInternal4 (func, thisContext) {
50784  return function (a, b, c, d) {
50785    return func.call(thisContext, a, b, c, d);
50786  };
50787};
50788
50789'use strict';
50790
50791
50792
50793/**
50794 * # Reduce
50795 *
50796 * A fast object `.reduce()` implementation.
50797 *
50798 * @param  {Object}   subject      The object to reduce over.
50799 * @param  {Function} fn           The reducer function.
50800 * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].
50801 * @param  {Object}   thisContext  The context for the reducer.
50802 * @return {mixed}                 The final result.
50803 */
50804var reduce = function fastReduceObject (subject, fn, initialValue, thisContext) {
50805  var keys = Object.keys(subject),
50806      length = keys.length,
50807      iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,
50808      i, key, result;
50809
50810  if (initialValue === undefined) {
50811    i = 1;
50812    result = subject[keys[0]];
50813  }
50814  else {
50815    i = 0;
50816    result = initialValue;
50817  }
50818
50819  for (; i < length; i++) {
50820    key = keys[i];
50821    result = iterator(result, subject[key], key, subject);
50822  }
50823
50824  return result;
50825};
50826
50827var styles$2 = namespace.styles;
50828var shims = namespace.shims;
50829
50830
50831var _byUnicode = {};
50832var _byLigature = {};
50833var _byOldName = {};
50834
50835var build = function build() {
50836  var lookup = function lookup(reducer) {
50837    return reduce(styles$2, function (o, style, prefix) {
50838      o[prefix] = reduce(style, reducer, {});
50839      return o;
50840    }, {});
50841  };
50842
50843  _byUnicode = lookup(function (acc, icon, iconName) {
50844    acc[icon[3]] = iconName;
50845
50846    return acc;
50847  });
50848
50849  _byLigature = lookup(function (acc, icon, iconName) {
50850    var ligatures = icon[2];
50851
50852    acc[iconName] = iconName;
50853
50854    ligatures.forEach(function (ligature) {
50855      acc[ligature] = iconName;
50856    });
50857
50858    return acc;
50859  });
50860
50861  var hasRegular = 'far' in styles$2;
50862
50863  _byOldName = reduce(shims, function (acc, shim) {
50864    var oldName = shim[0];
50865    var prefix = shim[1];
50866    var iconName = shim[2];
50867
50868    if (prefix === 'far' && !hasRegular) {
50869      prefix = 'fas';
50870    }
50871
50872    acc[oldName] = { prefix: prefix, iconName: iconName };
50873
50874    return acc;
50875  }, {});
50876};
50877
50878build();
50879
50880function byUnicode(prefix, unicode) {
50881  return _byUnicode[prefix][unicode];
50882}
50883
50884function byLigature(prefix, ligature) {
50885  return _byLigature[prefix][ligature];
50886}
50887
50888function byOldName(name) {
50889  return _byOldName[name] || { prefix: null, iconName: null };
50890}
50891
50892var styles$1 = namespace.styles;
50893
50894
50895var emptyCanonicalIcon = function emptyCanonicalIcon() {
50896  return { prefix: null, iconName: null, rest: [] };
50897};
50898
50899function getCanonicalIcon(values) {
50900  return values.reduce(function (acc, cls) {
50901    var iconName = getIconName(config.familyPrefix, cls);
50902
50903    if (styles$1[cls]) {
50904      acc.prefix = cls;
50905    } else if (iconName) {
50906      var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};
50907
50908      acc.iconName = shim.iconName || iconName;
50909      acc.prefix = shim.prefix || acc.prefix;
50910    } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {
50911      acc.rest.push(cls);
50912    }
50913
50914    return acc;
50915  }, emptyCanonicalIcon());
50916}
50917
50918function iconFromMapping(mapping, prefix, iconName) {
50919  if (mapping && mapping[prefix] && mapping[prefix][iconName]) {
50920    return {
50921      prefix: prefix,
50922      iconName: iconName,
50923      icon: mapping[prefix][iconName]
50924    };
50925  }
50926}
50927
50928function toHtml(abstractNodes) {
50929  var tag = abstractNodes.tag,
50930      _abstractNodes$attrib = abstractNodes.attributes,
50931      attributes = _abstractNodes$attrib === undefined ? {} : _abstractNodes$attrib,
50932      _abstractNodes$childr = abstractNodes.children,
50933      children = _abstractNodes$childr === undefined ? [] : _abstractNodes$childr;
50934
50935
50936  if (typeof abstractNodes === 'string') {
50937    return htmlEscape(abstractNodes);
50938  } else {
50939    return '<' + tag + ' ' + joinAttributes(attributes) + '>' + children.map(toHtml).join('') + '</' + tag + '>';
50940  }
50941}
50942
50943var noop$1 = function noop() {};
50944
50945function isWatched(node) {
50946  var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;
50947
50948  return typeof i2svg === 'string';
50949}
50950
50951function getMutator() {
50952  if (config.autoReplaceSvg === true) {
50953    return mutators.replace;
50954  }
50955
50956  var mutator = mutators[config.autoReplaceSvg];
50957
50958  return mutator || mutators.replace;
50959}
50960
50961var mutators = {
50962  replace: function replace(mutation) {
50963    var node = mutation[0];
50964    var abstract = mutation[1];
50965    var newOuterHTML = abstract.map(function (a) {
50966      return toHtml(a);
50967    }).join('\n');
50968
50969    if (node.parentNode && node.outerHTML) {
50970      node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? '<!-- ' + node.outerHTML + ' -->' : '');
50971    } else if (node.parentNode) {
50972      var newNode = document.createElement('span');
50973      node.parentNode.replaceChild(newNode, node);
50974      newNode.outerHTML = newOuterHTML;
50975    }
50976  },
50977  nest: function nest(mutation) {
50978    var node = mutation[0];
50979    var abstract = mutation[1];
50980
50981    // If we already have a replaced node we do not want to continue nesting within it.
50982    // Short-circuit to the standard replacement
50983    if (~classArray(node).indexOf(config.replacementClass)) {
50984      return mutators.replace(mutation);
50985    }
50986
50987    var forSvg = new RegExp(config.familyPrefix + '-.*');
50988
50989    delete abstract[0].attributes.style;
50990
50991    var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {
50992      if (cls === config.replacementClass || cls.match(forSvg)) {
50993        acc.toSvg.push(cls);
50994      } else {
50995        acc.toNode.push(cls);
50996      }
50997
50998      return acc;
50999    }, { toNode: [], toSvg: [] });
51000
51001    abstract[0].attributes.class = splitClasses.toSvg.join(' ');
51002
51003    var newInnerHTML = abstract.map(function (a) {
51004      return toHtml(a);
51005    }).join('\n');
51006    node.setAttribute('class', splitClasses.toNode.join(' '));
51007    node.setAttribute(DATA_FA_I2SVG, '');
51008    node.innerHTML = newInnerHTML;
51009  }
51010};
51011
51012function perform(mutations, callback) {
51013  var callbackFunction = typeof callback === 'function' ? callback : noop$1;
51014
51015  if (mutations.length === 0) {
51016    callbackFunction();
51017  } else {
51018    var frame = WINDOW.requestAnimationFrame || function (op) {
51019      return op();
51020    };
51021
51022    frame(function () {
51023      var mutator = getMutator();
51024      var mark = perf.begin('mutate');
51025
51026      mutations.map(mutator);
51027
51028      mark();
51029
51030      callbackFunction();
51031    });
51032  }
51033}
51034
51035var disabled = false;
51036
51037function disableObservation(operation) {
51038  disabled = true;
51039  operation();
51040  disabled = false;
51041}
51042
51043var mo = null;
51044
51045function observe(options) {
51046  if (!MUTATION_OBSERVER) {
51047    return;
51048  }
51049
51050  if (!config.observeMutations) {
51051    return;
51052  }
51053
51054  var treeCallback = options.treeCallback,
51055      nodeCallback = options.nodeCallback,
51056      pseudoElementsCallback = options.pseudoElementsCallback,
51057      _options$observeMutat = options.observeMutationsRoot,
51058      observeMutationsRoot = _options$observeMutat === undefined ? DOCUMENT.body : _options$observeMutat;
51059
51060
51061  mo = new MUTATION_OBSERVER(function (objects) {
51062    if (disabled) return;
51063
51064    toArray(objects).forEach(function (mutationRecord) {
51065      if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {
51066        if (config.searchPseudoElements) {
51067          pseudoElementsCallback(mutationRecord.target);
51068        }
51069
51070        treeCallback(mutationRecord.target);
51071      }
51072
51073      if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {
51074        pseudoElementsCallback(mutationRecord.target.parentNode);
51075      }
51076
51077      if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {
51078        if (mutationRecord.attributeName === 'class') {
51079          var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),
51080              prefix = _getCanonicalIcon.prefix,
51081              iconName = _getCanonicalIcon.iconName;
51082
51083          if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);
51084          if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);
51085        } else {
51086          nodeCallback(mutationRecord.target);
51087        }
51088      }
51089    });
51090  });
51091
51092  if (!IS_DOM) return;
51093
51094  mo.observe(observeMutationsRoot, {
51095    childList: true, attributes: true, characterData: true, subtree: true
51096  });
51097}
51098
51099function disconnect() {
51100  if (!mo) return;
51101
51102  mo.disconnect();
51103}
51104
51105var styleParser = function (node) {
51106  var style = node.getAttribute('style');
51107
51108  var val = [];
51109
51110  if (style) {
51111    val = style.split(';').reduce(function (acc, style) {
51112      var styles = style.split(':');
51113      var prop = styles[0];
51114      var value = styles.slice(1);
51115
51116      if (prop && value.length > 0) {
51117        acc[prop] = value.join(':').trim();
51118      }
51119
51120      return acc;
51121    }, {});
51122  }
51123
51124  return val;
51125};
51126
51127function toHex(unicode) {
51128  var result = '';
51129
51130  for (var i = 0; i < unicode.length; i++) {
51131    var hex = unicode.charCodeAt(i).toString(16);
51132    result += ('000' + hex).slice(-4);
51133  }
51134
51135  return result;
51136}
51137
51138var classParser = function (node) {
51139  var existingPrefix = node.getAttribute('data-prefix');
51140  var existingIconName = node.getAttribute('data-icon');
51141  var innerText = node.innerText !== undefined ? node.innerText.trim() : '';
51142
51143  var val = getCanonicalIcon(classArray(node));
51144
51145  if (existingPrefix && existingIconName) {
51146    val.prefix = existingPrefix;
51147    val.iconName = existingIconName;
51148  }
51149
51150  if (val.prefix && innerText.length > 1) {
51151    val.iconName = byLigature(val.prefix, node.innerText);
51152  } else if (val.prefix && innerText.length === 1) {
51153    val.iconName = byUnicode(val.prefix, toHex(node.innerText));
51154  }
51155
51156  return val;
51157};
51158
51159var parseTransformString = function parseTransformString(transformString) {
51160  var transform = {
51161    size: 16,
51162    x: 0,
51163    y: 0,
51164    flipX: false,
51165    flipY: false,
51166    rotate: 0
51167  };
51168
51169  if (!transformString) {
51170    return transform;
51171  } else {
51172    return transformString.toLowerCase().split(' ').reduce(function (acc, n) {
51173      var parts = n.toLowerCase().split('-');
51174      var first = parts[0];
51175      var rest = parts.slice(1).join('-');
51176
51177      if (first && rest === 'h') {
51178        acc.flipX = true;
51179        return acc;
51180      }
51181
51182      if (first && rest === 'v') {
51183        acc.flipY = true;
51184        return acc;
51185      }
51186
51187      rest = parseFloat(rest);
51188
51189      if (isNaN(rest)) {
51190        return acc;
51191      }
51192
51193      switch (first) {
51194        case 'grow':
51195          acc.size = acc.size + rest;
51196          break;
51197        case 'shrink':
51198          acc.size = acc.size - rest;
51199          break;
51200        case 'left':
51201          acc.x = acc.x - rest;
51202          break;
51203        case 'right':
51204          acc.x = acc.x + rest;
51205          break;
51206        case 'up':
51207          acc.y = acc.y - rest;
51208          break;
51209        case 'down':
51210          acc.y = acc.y + rest;
51211          break;
51212        case 'rotate':
51213          acc.rotate = acc.rotate + rest;
51214          break;
51215      }
51216
51217      return acc;
51218    }, transform);
51219  }
51220};
51221
51222var transformParser = function (node) {
51223  return parseTransformString(node.getAttribute('data-fa-transform'));
51224};
51225
51226var symbolParser = function (node) {
51227  var symbol = node.getAttribute('data-fa-symbol');
51228
51229  return symbol === null ? false : symbol === '' ? true : symbol;
51230};
51231
51232var attributesParser = function (node) {
51233  var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {
51234    if (acc.name !== 'class' && acc.name !== 'style') {
51235      acc[attr.name] = attr.value;
51236    }
51237    return acc;
51238  }, {});
51239
51240  var title = node.getAttribute('title');
51241
51242  if (config.autoA11y) {
51243    if (title) {
51244      extraAttributes['aria-labelledby'] = config.replacementClass + '-title-' + nextUniqueId();
51245    } else {
51246      extraAttributes['aria-hidden'] = 'true';
51247    }
51248  }
51249
51250  return extraAttributes;
51251};
51252
51253var maskParser = function (node) {
51254  var mask = node.getAttribute('data-fa-mask');
51255
51256  if (!mask) {
51257    return emptyCanonicalIcon();
51258  } else {
51259    return getCanonicalIcon(mask.split(' ').map(function (i) {
51260      return i.trim();
51261    }));
51262  }
51263};
51264
51265var blankMeta = {
51266  iconName: null,
51267  title: null,
51268  prefix: null,
51269  transform: meaninglessTransform,
51270  symbol: false,
51271  mask: null,
51272  extra: { classes: [], styles: {}, attributes: {} }
51273};
51274
51275function parseMeta(node) {
51276  var _classParser = classParser(node),
51277      iconName = _classParser.iconName,
51278      prefix = _classParser.prefix,
51279      extraClasses = _classParser.rest;
51280
51281  var extraStyles = styleParser(node);
51282  var transform = transformParser(node);
51283  var symbol = symbolParser(node);
51284  var extraAttributes = attributesParser(node);
51285  var mask = maskParser(node);
51286
51287  return {
51288    iconName: iconName,
51289    title: node.getAttribute('title'),
51290    prefix: prefix,
51291    transform: transform,
51292    symbol: symbol,
51293    mask: mask,
51294    extra: {
51295      classes: extraClasses,
51296      styles: extraStyles,
51297      attributes: extraAttributes
51298    }
51299  };
51300}
51301
51302function MissingIcon(error) {
51303  this.name = 'MissingIcon';
51304  this.message = error || 'Icon unavailable';
51305  this.stack = new Error().stack;
51306}
51307
51308MissingIcon.prototype = Object.create(Error.prototype);
51309MissingIcon.prototype.constructor = MissingIcon;
51310
51311var FILL = { fill: 'currentColor' };
51312var ANIMATION_BASE = {
51313  attributeType: 'XML',
51314  repeatCount: 'indefinite',
51315  dur: '2s'
51316};
51317var RING = {
51318  tag: 'path',
51319  attributes: _extends({}, FILL, {
51320    d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'
51321  })
51322};
51323var OPACITY_ANIMATE = _extends({}, ANIMATION_BASE, {
51324  attributeName: 'opacity'
51325});
51326var DOT = {
51327  tag: 'circle',
51328  attributes: _extends({}, FILL, {
51329    cx: '256',
51330    cy: '364',
51331    r: '28'
51332  }),
51333  children: [{ tag: 'animate', attributes: _extends({}, ANIMATION_BASE, { attributeName: 'r', values: '28;14;28;28;14;28;' }) }, { tag: 'animate', attributes: _extends({}, OPACITY_ANIMATE, { values: '1;0;1;1;0;1;' }) }]
51334};
51335var QUESTION = {
51336  tag: 'path',
51337  attributes: _extends({}, FILL, {
51338    opacity: '1',
51339    d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'
51340  }),
51341  children: [{ tag: 'animate', attributes: _extends({}, OPACITY_ANIMATE, { values: '1;0;0;0;0;1;' }) }]
51342};
51343var EXCLAMATION = {
51344  tag: 'path',
51345  attributes: _extends({}, FILL, {
51346    opacity: '0',
51347    d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'
51348  }),
51349  children: [{ tag: 'animate', attributes: _extends({}, OPACITY_ANIMATE, { values: '0;0;1;1;0;0;' }) }]
51350};
51351
51352var missing = { tag: 'g', children: [RING, DOT, QUESTION, EXCLAMATION] };
51353
51354var styles = namespace.styles;
51355
51356var LAYERS_TEXT_CLASSNAME = 'fa-layers-text';
51357var FONT_FAMILY_PATTERN = /Font Awesome 5 (Solid|Regular|Light|Brands|Free|Pro)/;
51358var STYLE_TO_PREFIX = {
51359  'Solid': 'fas',
51360  'Regular': 'far',
51361  'Light': 'fal',
51362  'Brands': 'fab'
51363};
51364var FONT_WEIGHT_TO_PREFIX = {
51365  '900': 'fas',
51366  '400': 'far',
51367  '300': 'fal'
51368};
51369
51370function findIcon(iconName, prefix) {
51371  var val = {
51372    found: false,
51373    width: 512,
51374    height: 512,
51375    icon: missing
51376  };
51377
51378  if (iconName && prefix && styles[prefix] && styles[prefix][iconName]) {
51379    var icon = styles[prefix][iconName];
51380    var width = icon[0];
51381    var height = icon[1];
51382    var vectorData = icon.slice(4);
51383
51384    val = {
51385      found: true,
51386      width: width,
51387      height: height,
51388      icon: { tag: 'path', attributes: { fill: 'currentColor', d: vectorData[0] } }
51389    };
51390  } else if (iconName && prefix && !config.showMissingIcons) {
51391    throw new MissingIcon('Icon is missing for prefix ' + prefix + ' with icon name ' + iconName);
51392  }
51393
51394  return val;
51395}
51396
51397function generateSvgReplacementMutation(node, nodeMeta) {
51398  var iconName = nodeMeta.iconName,
51399      title = nodeMeta.title,
51400      prefix = nodeMeta.prefix,
51401      transform = nodeMeta.transform,
51402      symbol = nodeMeta.symbol,
51403      mask = nodeMeta.mask,
51404      extra = nodeMeta.extra;
51405
51406
51407  return [node, makeInlineSvgAbstract({
51408    icons: {
51409      main: findIcon(iconName, prefix),
51410      mask: findIcon(mask.iconName, mask.prefix)
51411    },
51412    prefix: prefix,
51413    iconName: iconName,
51414    transform: transform,
51415    symbol: symbol,
51416    mask: mask,
51417    title: title,
51418    extra: extra,
51419    watchable: true
51420  })];
51421}
51422
51423function generateLayersText(node, nodeMeta) {
51424  var title = nodeMeta.title,
51425      transform = nodeMeta.transform,
51426      extra = nodeMeta.extra;
51427
51428
51429  var width = null;
51430  var height = null;
51431
51432  if (IS_IE) {
51433    var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);
51434    var boundingClientRect = node.getBoundingClientRect();
51435    width = boundingClientRect.width / computedFontSize;
51436    height = boundingClientRect.height / computedFontSize;
51437  }
51438
51439  if (config.autoA11y && !title) {
51440    extra.attributes['aria-hidden'] = 'true';
51441  }
51442
51443  return [node, makeLayersTextAbstract({
51444    content: node.innerHTML,
51445    width: width,
51446    height: height,
51447    transform: transform,
51448    title: title,
51449    extra: extra,
51450    watchable: true
51451  })];
51452}
51453
51454function generateMutation(node) {
51455  var nodeMeta = parseMeta(node);
51456
51457  if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {
51458    return generateLayersText(node, nodeMeta);
51459  } else {
51460    return generateSvgReplacementMutation(node, nodeMeta);
51461  }
51462}
51463
51464function searchPseudoElements(root) {
51465  if (!IS_DOM) return;
51466
51467  var end = perf.begin('searchPseudoElements');
51468
51469  disableObservation(function () {
51470    toArray(root.querySelectorAll('*')).filter(function (n) {
51471      return n.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(n.tagName.toUpperCase()) && !n.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!n.parentNode || n.parentNode.tagName !== 'svg');
51472    }
51472).forEach(function (node) {
51473      [':before', ':after'].forEach(function (pos) {
51474        var children = toArray(node.children);
51475        var alreadyProcessedPseudoElement = children.filter(function (c) {
51476          return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === pos;
51477        })[0];
51478
51479        var styles = WINDOW.getComputedStyle(node, pos);
51480        var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);
51481        var fontWeight = styles.getPropertyValue('font-weight');
51482
51483        if (alreadyProcessedPseudoElement && !fontFamily) {
51484          // If we've already processed it but the current computed style does not result in a font-family,
51485          // that probably means that a class name that was previously present to make the icon has been
51486          // removed. So we now should delete the icon.
51487          node.removeChild(alreadyProcessedPseudoElement);
51488        } else if (fontFamily) {
51489          var content = styles.getPropertyValue('content');
51490          var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1]] : FONT_WEIGHT_TO_PREFIX[fontWeight];
51491          var iconName = byUnicode(prefix, toHex(content.length === 3 ? content.substr(1, 1) : content));
51492          // Only convert the pseudo element in this :before/:after position into an icon if we haven't
51493          // already done so with the same prefix and iconName
51494          if (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconName) {
51495            if (alreadyProcessedPseudoElement) {
51496              // Delete the old one, since we're replacing it with a new one
51497              node.removeChild(alreadyProcessedPseudoElement);
51498            }
51499
51500            var extra = blankMeta.extra;
51501
51502            extra.attributes[DATA_FA_PSEUDO_ELEMENT] = pos;
51503            var abstract = makeInlineSvgAbstract(_extends({}, blankMeta, {
51504              icons: {
51505                main: findIcon(iconName, prefix),
51506                mask: emptyCanonicalIcon()
51507              },
51508              prefix: prefix,
51509              iconName: iconName,
51510              extra: extra,
51511              watchable: true
51512            }));
51513
51514            var element = DOCUMENT.createElement('svg');
51515
51516            if (pos === ':before') {
51517              node.insertBefore(element, node.firstChild);
51518            } else {
51519              node.appendChild(element);
51520            }
51521
51522            element.outerHTML = abstract.map(function (a) {
51523              return toHtml(a);
51524            }).join('\n');
51525          }
51526        }
51527      });
51528    });
51529  });
51530
51531  end();
51532}
51533
51534function onTree(root) {
51535  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
51536
51537  if (!IS_DOM) return;
51538
51539  var htmlClassList = DOCUMENT.documentElement.classList;
51540  var hclAdd = function hclAdd(suffix) {
51541    return htmlClassList.add(HTML_CLASS_I2SVG_BASE_CLASS + '-' + suffix);
51542  };
51543  var hclRemove = function hclRemove(suffix) {
51544    return htmlClassList.remove(HTML_CLASS_I2SVG_BASE_CLASS + '-' + suffix);
51545  };
51546  var prefixes = Object.keys(styles);
51547  var prefixesDomQuery = ['.' + LAYERS_TEXT_CLASSNAME + ':not([' + DATA_FA_I2SVG + '])'].concat(prefixes.map(function (p) {
51548    return '.' + p + ':not([' + DATA_FA_I2SVG + '])';
51549  })).join(', ');
51550
51551  if (prefixesDomQuery.length === 0) {
51552    return;
51553  }
51554
51555  var candidates = toArray(root.querySelectorAll(prefixesDomQuery));
51556
51557  if (candidates.length > 0) {
51558    hclAdd('pending');
51559    hclRemove('complete');
51560  } else {
51561    return;
51562  }
51563
51564  var mark = perf.begin('onTree');
51565
51566  var mutations = candidates.reduce(function (acc, node) {
51567    try {
51568      var mutation = generateMutation(node);
51569
51570      if (mutation) {
51571        acc.push(mutation);
51572      }
51573    } catch (e) {
51574      if (!PRODUCTION) {
51575        if (e instanceof MissingIcon) {
51576          console.error(e);
51577        }
51578      }
51579    }
51580
51581    return acc;
51582  }, []);
51583
51584  mark();
51585
51586  perform(mutations, function () {
51587    hclAdd('active');
51588    hclAdd('complete');
51589    hclRemove('pending');
51590
51591    if (typeof callback === 'function') callback();
51592  });
51593}
51594
51595function onNode(node) {
51596  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
51597
51598  var mutation = generateMutation(node);
51599
51600  if (mutation) {
51601    perform([mutation], callback);
51602  }
51603}
51604
51605var baseStyles = "svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}
51605.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}
51605.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}";
51606
51607var css = function () {
51608  var dfp = DEFAULT_FAMILY_PREFIX;
51609  var drc = DEFAULT_REPLACEMENT_CLASS;
51610  var fp = config.familyPrefix;
51611  var rc = config.replacementClass;
51612  var s = baseStyles;
51613
51614  if (fp !== dfp || rc !== drc) {
51615    var dPatt = new RegExp('\\.' + dfp + '\\-', 'g');
51616    var rPatt = new RegExp('\\.' + drc, 'g');
51617
51618    s = s.replace(dPatt, '.' + fp + '-').replace(rPatt, '.' + rc);
51619  }
51620
51621  return s;
51622};
51623
51624function define(prefix, icons) {
51625  var normalized = Object.keys(icons).reduce(function (acc, iconName) {
51626    var icon = icons[iconName];
51627    var expanded = !!icon.icon;
51628
51629    if (expanded) {
51630      acc[icon.iconName] = icon.icon;
51631    } else {
51632      acc[iconName] = icon;
51633    }
51634    return acc;
51635  }, {});
51636
51637  if (typeof namespace.hooks.addPack === 'function') {
51638    namespace.hooks.addPack(prefix, normalized);
51639  } else {
51640    namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized);
51641  }
51642
51643  /**
51644   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction
51645   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias
51646   * for `fas` so we'll easy the upgrade process for our users by automatically defining
51647   * this as well.
51648   */
51649  if (prefix === 'fas') {
51650    define('fa', icons);
51651  }
51652}
51653
51654var Library = function () {
51655  function Library() {
51656    classCallCheck(this, Library);
51657
51658    this.definitions = {};
51659  }
51660
51661  createClass(Library, [{
51662    key: 'add',
51663    value: function add() {
51664      var _this = this;
51665
51666      for (var _len = arguments.length, definitions = Array(_len), _key = 0; _key < _len; _key++) {
51667        definitions[_key] = arguments[_key];
51668      }
51669
51670      var additions = definitions.reduce(this._pullDefinitions, {});
51671
51672      Object.keys(additions).forEach(function (key) {
51673        _this.definitions[key] = _extends({}, _this.definitions[key] || {}, additions[key]);
51674        define(key, additions[key]);
51675        build();
51676      });
51677    }
51678  }, {
51679    key: 'reset',
51680    value: function reset() {
51681      this.definitions = {};
51682    }
51683  }, {
51684    key: '_pullDefinitions',
51685    value: function _pullDefinitions(additions, definition) {
51686      var normalized = definition.prefix && definition.iconName && definition.icon ? { 0: definition } : definition;
51687
51688      Object.keys(normalized).map(function (key) {
51689        var _normalized$key = normalized[key],
51690            prefix = _normalized$key.prefix,
51691            iconName = _normalized$key.iconName,
51692            icon = _normalized$key.icon;
51693
51694
51695        if (!additions[prefix]) additions[prefix] = {};
51696
51697        additions[prefix][iconName] = icon;
51698      });
51699
51700      return additions;
51701    }
51702  }]);
51703  return Library;
51704}();
51705
51706function prepIcon(icon) {
51707  var width = icon[0];
51708  var height = icon[1];
51709  var vectorData = icon.slice(4);
51710
51711  return {
51712    found: true,
51713    width: width,
51714    height: height,
51715    icon: { tag: 'path', attributes: { fill: 'currentColor', d: vectorData[0] } }
51716  };
51717}
51718
51719function ensureCss() {
51720  if (config.autoAddCss && !_cssInserted) {
51721    insertCss(css());
51722    _cssInserted = true;
51723  }
51724}
51725
51726function apiObject(val, abstractCreator) {
51727  Object.defineProperty(val, 'abstract', {
51728    get: abstractCreator
51729  });
51730
51731  Object.defineProperty(val, 'html', {
51732    get: function get() {
51733      return val.abstract.map(function (a) {
51734        return toHtml(a);
51735      });
51736    }
51737  });
51738
51739  Object.defineProperty(val, 'node', {
51740    get: function get() {
51741      if (!IS_DOM) return;
51742
51743      var container = DOCUMENT.createElement('div');
51744      container.innerHTML = val.html;
51745      return container.children;
51746    }
51747  });
51748
51749  return val;
51750}
51751
51752function findIconDefinition(params) {
51753  var _params$prefix = params.prefix,
51754      prefix = _params$prefix === undefined ? 'fa' : _params$prefix,
51755      iconName = params.iconName;
51756
51757
51758  if (!iconName) return;
51759
51760  return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);
51761}
51762
51763function resolveIcons(next) {
51764  return function (maybeIconDefinition) {
51765    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
51766
51767    var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});
51768
51769    var mask = params.mask;
51770
51771
51772    if (mask) {
51773      mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});
51774    }
51775
51776    return next(iconDefinition, _extends({}, params, { mask: mask }));
51777  };
51778}
51779
51780var library = new Library();
51781
51782var noAuto = function noAuto() {
51783  config.autoReplaceSvg = false;
51784  config.observeMutations = false;
51785
51786  disconnect();
51787};
51788
51789var _cssInserted = false;
51790
51791var dom = {
51792  i2svg: function i2svg() {
51793    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
51794
51795    if (IS_DOM) {
51796      ensureCss();
51797
51798      var _params$node = params.node,
51799          node = _params$node === undefined ? DOCUMENT : _params$node,
51800          _params$callback = params.callback,
51801          callback = _params$callback === undefined ? function () {} : _params$callback;
51802
51803
51804      if (config.searchPseudoElements) {
51805        searchPseudoElements(node);
51806      }
51807
51808      onTree(node, callback);
51809    }
51810  },
51811
51812  css: css,
51813
51814  insertCss: function insertCss$$1() {
51815    if (!_cssInserted) {
51816      insertCss(css());
51817      _cssInserted = true;
51818    }
51819  },
51820
51821  watch: function watch() {
51822    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
51823    var autoReplaceSvgRoot = params.autoReplaceSvgRoot,
51824        observeMutationsRoot = params.observeMutationsRoot;
51825
51826
51827    if (config.autoReplaceSvg === false) {
51828      config.autoReplaceSvg = true;
51829    }
51830
51831    config.observeMutations = true;
51832
51833    domready(function () {
51834      autoReplace({
51835        autoReplaceSvgRoot: autoReplaceSvgRoot
51836      });
51837
51838      observe({
51839        treeCallback: onTree,
51840        nodeCallback: onNode,
51841        pseudoElementsCallback: searchPseudoElements,
51842        observeMutationsRoot: observeMutationsRoot
51843      });
51844    });
51845  }
51846};
51847
51848var parse = {
51849  transform: function transform(transformString) {
51850    return parseTransformString(transformString);
51851  }
51852};
51853
51854var icon = resolveIcons(function (iconDefinition) {
51855  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
51856  var _params$transform = params.transform,
51857      transform = _params$transform === undefined ? meaninglessTransform : _params$transform,
51858      _params$symbol = params.symbol,
51859      symbol = _params$symbol === undefined ? false : _params$symbol,
51860      _params$mask = params.mask,
51861      mask = _params$mask === undefined ? null : _params$mask,
51862      _params$title = params.title,
51863      title = _params$title === undefined ? null : _params$title,
51864      _params$classes = params.classes,
51865      classes = _params$classes === undefined ? [] : _params$classes,
51866      _params$attributes = params.attributes,
51867      attributes = _params$attributes === undefined ? {} : _params$attributes,
51868      _params$styles = params.styles,
51869      styles = _params$styles === undefined ? {} : _params$styles;
51870
51871
51872  if (!iconDefinition) return;
51873
51874  var prefix = iconDefinition.prefix,
51875      iconName = iconDefinition.iconName,
51876      icon = iconDefinition.icon;
51877
51878
51879  return apiObject(_extends({ type: 'icon' }, iconDefinition), function () {
51880    ensureCss();
51881
51882    if (config.autoA11y) {
51883      if (title) {
51884        attributes['aria-labelledby'] = config.replacementClass + '-title-' + nextUniqueId();
51885      } else {
51886        attributes['aria-hidden'] = 'true';
51887      }
51888    }
51889
51890    return makeInlineSvgAbstract({
51891      icons: {
51892        main: prepIcon(icon),
51893        mask: mask ? prepIcon(mask.icon) : { found: false, width: null, height: null, icon: {} }
51894      },
51895      prefix: prefix,
51896      iconName: iconName,
51897      transform: _extends({}, meaninglessTransform, transform),
51898      symbol: symbol,
51899      title: title,
51900      extra: {
51901        attributes: attributes,
51902        styles: styles,
51903        classes: classes
51904      }
51905    });
51906  });
51907});
51908
51909var text = function text(content) {
51910  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
51911  var _params$transform2 = params.transform,
51912      transform = _params$transform2 === undefined ? meaninglessTransform : _params$transform2,
51913      _params$title2 = params.title,
51914      title = _params$title2 === undefined ? null : _params$title2,
51915      _params$classes2 = params.classes,
51916      classes = _params$classes2 === undefined ? [] : _params$classes2,
51917      _params$attributes2 = params.attributes,
51918      attributes = _params$attributes2 === undefined ? {} : _params$attributes2,
51919      _params$styles2 = params.styles,
51920      styles = _params$styles2 === undefined ? {} : _params$styles2;
51921
51922
51923  return apiObject({ type: 'text', content: content }, function () {
51924    ensureCss();
51925
51926    return makeLayersTextAbstract({
51927      content: content,
51928      transform: _extends({}, meaninglessTransform, transform),
51929      title: title,
51930      extra: {
51931        attributes: attributes,
51932        styles: styles,
51933        classes: [config.familyPrefix + '-layers-text'].concat(toConsumableArray(classe
51933s))
51934      }
51935    });
51936  });
51937};
51938
51939var counter = function counter(content) {
51940  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
51941  var _params$title3 = params.title,
51942      title = _params$title3 === undefined ? null : _params$title3,
51943      _params$classes3 = params.classes,
51944      classes = _params$classes3 === undefined ? [] : _params$classes3,
51945      _params$attributes3 = params.attributes,
51946      attributes = _params$attributes3 === undefined ? {} : _params$attributes3,
51947      _params$styles3 = params.styles,
51948      styles = _params$styles3 === undefined ? {} : _params$styles3;
51949
51950
51951  return apiObject({ type: 'counter', content: content }, function () {
51952    ensureCss();
51953
51954    return makeLayersCounterAbstract({
51955      content: content.toString(),
51956      title: title,
51957      extra: {
51958        attributes: attributes,
51959        styles: styles,
51960        classes: [config.familyPrefix + '-layers-counter'].concat(toConsumableArray(classes))
51961      }
51962    });
51963  });
51964};
51965
51966var layer = function layer(assembler) {
51967  return apiObject({ type: 'layer' }, function () {
51968    ensureCss();
51969
51970    var children = [];
51971
51972    assembler(function (args) {
51973      Array.isArray(args) ? args.map(function (a) {
51974        children = children.concat(a.abstract);
51975      }) : children = children.concat(args.abstract);
51976    });
51977
51978    return [{
51979      tag: 'span',
51980      attributes: { class: config.familyPrefix + '-layers' },
51981      children: children
51982    }];
51983  });
51984};
51985
51986var api = {
51987  noAuto: noAuto,
51988  config: config,
51989  dom: dom,
51990  library: library,
51991  parse: parse,
51992  findIconDefinition: findIconDefinition,
51993  icon: icon,
51994  text: text,
51995  counter: counter,
51996  layer: layer,
51997  toHtml: toHtml
51998};
51999
52000var autoReplace = function autoReplace() {
52001  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
52002  var _params$autoReplaceSv = params.autoReplaceSvgRoot,
52003      autoReplaceSvgRoot = _params$autoReplaceSv === undefined ? DOCUMENT : _params$autoReplaceSv;
52004
52005
52006  if (Object.keys(namespace.styles).length > 0 && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({ node: autoReplaceSvgRoot });
52007};
52008
52009function bootstrap() {
52010  if (IS_BROWSER) {
52011    if (!WINDOW.FontAwesome) {
52012      WINDOW.FontAwesome = api;
52013    }
52014
52015    domready(function () {
52016      autoReplace();
52017
52018      observe({
52019        treeCallback: onTree,
52020        nodeCallback: onNode,
52021        pseudoElementsCallback: searchPseudoElements
52022      });
52023    });
52024  }
52025
52026  namespace.hooks = _extends({}, namespace.hooks, {
52027
52028    addPack: function addPack(prefix, icons) {
52029      namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, icons);
52030
52031      build();
52032      autoReplace();
52033    },
52034
52035    addShims: function addShims(shims) {
52036      var _namespace$shims;
52037
52038      (_namespace$shims = namespace.shims).push.apply(_namespace$shims, toConsumableArray(shims));
52039
52040      build();
52041      autoReplace();
52042    }
52043  });
52044}
52045
52046bunker(bootstrap);
52047
52048}());
52049
52050jQuery(function ($) {
52051    function showFullScreenMenu(callback) {
52052        if (callback) {
52053            $fullScreenMenu.one('transitionend', callback);
52054        }
52055
52056        $bodyHtml.stop().animate({ scrollTop: 0 }, 300, 'swing');
52057        $fullScreenMenu.show();
52058        $body.addClass('full-screen-open');
52059    }
52060
52061    function hideFullScreenMenu() {
52062        $(window).scrollTop(0);
52063
52064        $fullScreenMenu.one('transitionend', function() {
52065            $fullScreenMenu.hide();
52066        });
52067
52068        $body.removeClass('full-screen-open');
52069    }
52070
52071    var $body = $('body');
52072    var $bodyHtml = $('body, html');
52073    var $fullScreenMenu = $('#full-screen-menu');
52074    var $world = $('#world');
52075    var $worldContent = $world.find('.world-content');
52076
52077    $fullScreenMenu.find('.close-button').on('click', function() {
52078        hideFullScreenMenu();
52079    });
52080
52081    $('.show-full-screen-menu').on('click', function() {
52082        var callback = null;
52083
52084        if ($(this).hasClass('search-button')) {
52085            callback = function() {
52086                $('#full-screen-menu-search-field').focus();
52087            }
52088        }
52089
52090        showFullScreenMenu(callback);
52091    });
52092
52093    $body.on('teha.cookie.consent', function() {
52094        console.log('Cookie consent: Loading GA');
vendor: 384 bytes, lines 52094-52101
52094
52095
52096        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
52097            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
52098            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
52099        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
52100
52101        ga('create', '
52101UA-2803438-1
vendor: 20 bytes, lines 52101-52102
52101', 'auto');
52102        
52102ga('set', 'anonymizeIp', true);
52103        ga('send', 'pageview');
52104    });
52105
52106    skCookieConsent({
52107        infoLinkLabel: 'Les mer om informasjonskapsler i personvernserklæringen',
52108        message: 'Vi benytter cookies/informasjonskapsler for å forbedre brukeropplevelsen og optimalisere vår hjemmeside. Ved å trykke OK godtar du bruken av informasjonskapsler på afag.no.',
52109        acceptButtonLabel: 'OK',
52110
52111        infoLinkUrl: '/personvernerklaering',
52112        infoLinkTemplate: '<a target="_blank" class="more-button" href="%url%">%label%</a>',
52113        acceptButtonTemplate: '<button type="button" class="cookie-consent-accept-button more-button">%label%</button>'
52114    });
52115});
52116

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.