{
  "version": 3,
  "sources": ["/cdn/shop/t/28/assets/empire.js?t=070313"],
  "sourcesContent": ["var bcSections, bcStaticCollection, bcHeaderSearch;\n(function () {\n'use strict';\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar jquery$1 = createCommonjsModule(function (module) {\n/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\t{\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : commonjsGlobal, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof undefined === \"function\" && undefined.amd ) {\n\tundefined( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n});\n\n// jQuery plugins expect to find a global `jQuery` object, so we\n// need to attach it to the window.\n//\n// This is in its own file because we have to attach it before any\n// other imports happen, but with ES6 modules, all `import`s have\n// to be at the top.\nwindow.jQuery = jquery$1;\nwindow.$ = jquery$1;\n\n/*!\n * Trend 0.2.0\n *\n * Fail-safe TransitionEnd event for jQuery.\n *\n * Adds a new \"trend\" event that can be used in browsers that don't\n * support \"transitionend\".\n *\n * NOTE: Only supports being bound with \"jQuery.one\".\n *\n * Copyright 2014, Pixel Union - http://pixelunion.net\n * Released under the MIT license\n */\n(function($){\n\n  // Prefixed transitionend event names\n  var transitionEndEvents =\n    \"webkitTransitionEnd \" +\n    \"otransitionend \" +\n    \"oTransitionEnd \" +\n    \"msTransitionEnd \" +\n    \"transitionend\";\n\n  // Prefixed transition duration property names\n  var transitionDurationProperties = [\n    \"transition-duration\",\n    \"-moz-transition-duration\",\n    \"-webkit-transition-duration\",\n    \"-ms-transition-duration\",\n    \"-o-transition-duration\",\n    \"-khtml-transition-duration\"\n  ];\n\n  // Prefixed transition delay property names\n  var transitionDelayProperties = [\n    \"transition-delay\",\n    \"-moz-transition-delay\",\n    \"-webkit-transition-delay\",\n    \"-ms-transition-delay\",\n    \"-o-transition-delay\",\n    \"-khtml-transition-delay\"\n  ];\n\n  // Parses a CSS time value into milliseconds.\n  var parseTime = function(s) {\n    s = s.replace(/\\s/, \"\");\n    var v = window.parseFloat(s);\n\n    return s.match(/[^m]s$/i)\n      ? v * 1000\n      : v;\n  };\n\n  // Parses the longest time unit found in a series of CSS properties.\n  // Returns a value in milliseconds.\n  var parseProperties = function(el, properties) {\n    var duration = 0;\n\n    for (var i = 0; i < properties.length; i++) {\n      // Get raw CSS value\n      var value = el.css(properties[i]);\n      if (!value) continue;\n\n      // Multiple transitions--pick the longest\n      if (value.indexOf(\",\") !== -1) {\n        var values = value.split(\",\");\n        var durations = (function(){\n          var results = [];\n          for (var i = 0; i < values.length; i++) {\n            var duration = parseTime(values[i]);\n            results.push(duration);\n          }\n          return results;\n        })();\n\n        duration = Math.max.apply(Math, durations);\n      }\n\n      // Single transition\n      else {\n        duration = parseTime(value);\n      }\n\n      // Accept first vaue\n      break;\n    }\n\n    return duration;\n  };\n\n  $.event.special.trend = {\n    // Triggers an event handler when an element is done transitioning.\n    //\n    // Handles browsers that don't support transitionend by adding a\n    // timeout with the transition duration.\n    add: function(handleObj) {\n      var el = $(this);\n      var fired = false;\n\n      // Mark element as being in transition\n      el.data(\"trend\", true);\n\n      // Calculate a fallback duration. + 20 because some browsers fire\n      // timeouts faster than transitionend.\n      var time =\n        parseProperties(el, transitionDurationProperties) +\n        parseProperties(el, transitionDelayProperties) +\n        20;\n\n      var cb = function(e) {\n        // transitionend events can be sent for each property. Let's just\n        // skip all but the first. Also handles the timeout callback.\n        if (fired) return;\n\n        // Child elements that also have transitions can be fired before we\n        // complete. This will catch and ignore those. Unfortunately, we'll\n        // have to rely on the timeout in these cases.\n        if (e && e.srcElement !== el[0]) return;\n\n        // Mark element has not being in transition\n        el.data(\"trend\", false);\n\n        // Callback\n        fired = true;\n        if (handleObj.handler) handleObj.handler();\n      };\n\n      el.one(transitionEndEvents, cb);\n      el.data(\"trend-timeout\", window.setTimeout(cb, time));\n    },\n\n    remove: function(handleObj) {\n      var el = $(this);\n      el.off(transitionEndEvents);\n      window.clearTimeout(el.data(\"trend-timeout\"));\n    }\n  };\n\n})(jQuery);\n\n/*!\n * Revealer 2.0.1\n *\n * Copyright 2015, Pixel Union - http://pixelunion.net\n * Released under the MIT license\n */\n(function($){\n  // check for trend event (make sure jquery.trend is included)\n  if (typeof $.event.special.trend !== \"object\") {\n    console.warn(\"Please make sure jquery.trend is included! Otherwise revealer won't work.\");\n  }\n\n  // Simple requestAnimationFrame polyfill\n  var raf = window.requestAnimationFrame ||\n    window.mozRequestAnimationFrame ||\n    window.webkitRequestAnimationFrame ||\n    function(fn) { window.setTimeout(fn, 1000/60); };\n\n\n  // Public API\n  var methods = {\n    isVisible: function(el) {\n      return !!el.data(\"revealer-visible\");\n    },\n\n    show: function(el, force) {\n      // Check state\n      if (methods.isVisible(el)) {\n        el.removeClass(\"animating animating-in\");\n        el.off(\"revealer-animating revealer-show\");\n        return;\n      }\n\n      // Remove previous event listeners\n      el.data(\"revealer-visible\", true);\n      el.off(\"trend\");\n\n      if (force) {\n        el.addClass(\"visible\");\n        raf(function(){\n          el.trigger(\"revealer-animating\");\n          el.trigger(\"revealer-show\");\n        });\n        return;\n      }\n\n      raf(function(){\n        // Start animation state transition\n        el.addClass(\"animating animating-in\");\n        el.trigger(\"revealer-animating\");\n\n        raf(function(){\n          el.addClass(\"visible\");\n\n          el.one(\"trend\", function(){\n            el.removeClass(\"animating animating-in\");\n            el.trigger(\"revealer-show\");\n          });\n        });\n      });\n    },\n\n    hide: function(el, force) {\n      // Check state\n      if (!methods.isVisible(el)) {\n        el.removeClass(\"animating animating-out visible\");\n        el.off(\"revealer-animating revealer-hide\");\n        return;\n      }\n\n      // Remove previous event listeners\n      el.data(\"revealer-visible\", false);\n      el.off(\"trend\");\n\n      if (force) {\n        el.removeClass(\"visible\");\n        raf(function(){\n          el.trigger(\"revealer-animating\");\n          el.trigger(\"revealer-hide\");\n        });\n        return;\n      }\n\n      raf(function(){\n        el.addClass(\"animating animating-out\");\n        el.trigger(\"revealer-animating\");\n\n        raf(function(){\n          el.removeClass(\"visible\");\n\n          el.one(\"trend\", function(){\n            el.removeClass(\"animating animating-in animating-out\");\n            el.trigger(\"revealer-hide\");\n          });\n        });\n      });\n    },\n\n    toggle: function(el, force) {\n      if (methods.isVisible(el)) {\n        methods.hide(el, force);\n      } else {\n        methods.show(el, force);\n      }\n    }\n  };\n\n  // jQuery plugin\n  $.fn.revealer = function(method, force) {\n    // Get action\n    var action = methods[method || \"toggle\"];\n    if (!action) return this;\n\n    // Run action\n    if (method === \"isVisible\") {\n      return action(this);\n    }\n\n    return this.each(function(){\n      action($(this), force);\n    });\n  };\n})(jQuery);\n\nvar evEmitter = createCommonjsModule(function (module) {\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD - RequireJS\n    undefined( factory );\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : commonjsGlobal, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice(0);\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( var i=0; i < listeners.length; i++ ) {\n    var listener = listeners[i];\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n});\n\nvar getSize = createCommonjsModule(function (module) {\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n  /* jshint strict: false */ /* globals define, module */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( factory );\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.getSize = factory();\n  }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') == -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    logError( 'Style returned ' + style +\n      '. Are you running this code in a hidden iframe on Firefox? ' +\n      'See https://bit.ly/getsizebug1' );\n  }\n  return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  // -------------------------- box sizing -------------------------- //\n\n  /**\n   * Chrome & Safari measure the outer-width on style.width on border-box elems\n   * IE11 & Firefox<29 measures the inner-width\n   */\n  var div = document.createElement('div');\n  div.style.width = '200px';\n  div.style.padding = '1px 2px 3px 4px';\n  div.style.borderStyle = 'solid';\n  div.style.borderWidth = '1px 2px 3px 4px';\n  div.style.boxSizing = 'border-box';\n\n  var body = document.body || document.documentElement;\n  body.appendChild( div );\n  var style = getStyle( div );\n  // round value for browser zoom. desandro/masonry#928\n  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n  getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n  body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem == 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display == 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n  // get all measurements\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\nreturn getSize;\n\n});\n});\n\nvar matchesSelector = createCommonjsModule(function (module) {\n/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false */\n  'use strict';\n  // universal module definition\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( factory );\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.matchesSelector = factory();\n  }\n\n}( window, function factory() {\n  'use strict';\n\n  var matchesMethod = ( function() {\n    var ElemProto = window.Element.prototype;\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0; i < prefixes.length; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  return function matchesSelector( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  };\n\n}));\n});\n\nvar utils = createCommonjsModule(function (module) {\n/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'desandro-matches-selector/matches-selector'\n    ], function( matchesSelector$$1 ) {\n      return factory( window, matchesSelector$$1 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      matchesSelector\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, matchesSelector$$1 ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n  // return empty array if undefined or null. #6\n  if ( obj === null || obj === undefined ) {\n    return [];\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = ary.indexOf( obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem.parentNode && elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector$$1( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  elems.forEach( function( elem ) {\n    // check that elem is an actual element\n    if ( !( elem instanceof HTMLElement ) ) {\n      return;\n    }\n    // add elem if no selector\n    if ( !selector ) {\n      ffElems.push( elem );\n      return;\n    }\n    // filter & find items if we have a selector\n    // filter\n    if ( matchesSelector$$1( elem, selector ) ) {\n      ffElems.push( elem );\n    }\n    // find children\n    var childElems = elem.querySelectorAll( selector );\n    // concat childElems to filterFound array\n    for ( var i=0; i < childElems.length; i++ ) {\n      ffElems.push( childElems[i] );\n    }\n  });\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  threshold = threshold || 100;\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    clearTimeout( timeout );\n\n    var args = arguments;\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold );\n  };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n  var readyState = document.readyState;\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\n    // do async to allow for other scripts to run. metafizzy/flickity#441\n    setTimeout( callback );\n  } else {\n    document.addEventListener( 'DOMContentLoaded', callback );\n  }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  utils.docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var dataAttr = 'data-' + dashedNamespace;\n    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var elems = utils.makeArray( dataAttrElems )\n      .concat( utils.makeArray( jsDashElems ) );\n    var dataOptionsAttr = dataAttr + '-options';\n    var jQuery = window.jQuery;\n\n    elems.forEach( function( elem ) {\n      var attr = elem.getAttribute( dataAttr ) ||\n        elem.getAttribute( dataOptionsAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n          ': ' + error );\n        }\n        return;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('namespace')\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    });\n\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n});\n\nvar cell = createCommonjsModule(function (module) {\n// Flickity.Cell\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'get-size/get-size'\n    ], function( getSize$$1 ) {\n      return factory( window, getSize$$1 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      getSize\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Cell = factory(\n      window,\n      window.getSize\n    );\n  }\n\n}( window, function factory( window, getSize$$1 ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n  this.element = elem;\n  this.parent = parent;\n\n  this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n  this.element.style.position = 'absolute';\n  this.element.setAttribute( 'aria-selected', 'false' );\n  this.x = 0;\n  this.shift = 0;\n};\n\nproto.destroy = function() {\n  // reset style\n  this.element.style.position = '';\n  var side = this.parent.originSide;\n  this.element.removeAttribute('aria-selected');\n  this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n  this.size = getSize$$1( this.element );\n};\n\nproto.setPosition = function( x ) {\n  this.x = x;\n  this.updateTarget();\n  this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n  var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n  this.target = this.x + this.size[ marginProperty ] +\n    this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n  // render position of cell with in slider\n  var side = this.parent.originSide;\n  this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n  this.shift = shift;\n  this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n  this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n});\n\nvar slide = createCommonjsModule(function (module) {\n// slide\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( factory );\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Slide = factory();\n  }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n  this.parent = parent;\n  this.isOriginLeft = parent.originSide == 'left';\n  this.cells = [];\n  this.outerWidth = 0;\n  this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n  this.cells.push( cell );\n  this.outerWidth += cell.size.outerWidth;\n  this.height = Math.max( cell.size.outerHeight, this.height );\n  // first cell stuff\n  if ( this.cells.length == 1 ) {\n    this.x = cell.x; // x comes from first cell\n    var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n    this.firstMargin = cell.size[ beginMargin ];\n  }\n};\n\nproto.updateTarget = function() {\n  var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n  var lastCell = this.getLastCell();\n  var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n  var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n  this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n  this.changeSelected( true );\n};\n\nproto.unselect = function() {\n  this.changeSelected( false );\n};\n\nproto.changeSelected = function( isSelected ) {\n  var classMethod = isSelected ? 'add' : 'remove';\n  this.cells.forEach( function( cell ) {\n    cell.element.classList[ classMethod ]('is-selected');\n    cell.element.setAttribute( 'aria-selected', isSelected.toString() );\n  });\n};\n\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  });\n};\n\nreturn Slide;\n\n}));\n});\n\nvar animate = createCommonjsModule(function (module) {\n// animate\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'fizzy-ui-utils/utils'\n    ], function( utils$$1 ) {\n      return factory( window, utils$$1 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      utils\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.animatePrototype = factory(\n      window,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, utils$$1 ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n  if ( this.isAnimating ) {\n    return;\n  }\n\n  this.isAnimating = true;\n  this.restingFrames = 0;\n  this.animate();\n};\n\nproto.animate = function() {\n  this.applyDragForce();\n  this.applySelectedAttraction();\n\n  var previousX = this.x;\n\n  this.integratePhysics();\n  this.positionSlider();\n  this.settle( previousX );\n  // animate next frame\n  if ( this.isAnimating ) {\n    var _this = this;\n    requestAnimationFrame( function animateFrame() {\n      _this.animate();\n    });\n  }\n};\n\nproto.positionSlider = function() {\n  var x = this.x;\n  // wrap position around\n  if ( this.options.wrapAround && this.cells.length > 1 ) {\n    x = utils$$1.modulo( x, this.slideableWidth );\n    x = x - this.slideableWidth;\n    this.shiftWrapCells( x );\n  }\n\n  x = x + this.cursorPosition;\n  // reverse if right-to-left and using transform\n  x = this.options.rightToLeft ? -x : x;\n  var value = this.getPositionValue( x );\n  // use 3D tranforms for hardware acceleration on iOS\n  // but use 2D when settled, for better font-rendering\n  this.slider.style.transform = this.isAnimating ?\n    'translate3d(' + value + ',0,0)' : 'translateX(' + value + ')';\n\n  // scroll event\n  var firstSlide = this.slides[0];\n  if ( firstSlide ) {\n    var positionX = -this.x - firstSlide.target;\n    var progress = positionX / this.slidesWidth;\n    this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n  }\n};\n\nproto.positionSliderAtSelected = function() {\n  if ( !this.cells.length ) {\n    return;\n  }\n  this.x = -this.selectedSlide.target;\n  this.velocity = 0; // stop wobble\n  this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n  if ( this.options.percentPosition ) {\n    // percent position, round to 2 digits, like 12.34%\n    return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n  } else {\n    // pixel positioning\n    return Math.round( position ) + 'px';\n  }\n};\n\nproto.settle = function( previousX ) {\n  // keep track of frames where x hasn't moved\n  if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n    this.restingFrames++;\n  }\n  // stop animating if resting for 3 or more frames\n  if ( this.restingFrames > 2 ) {\n    this.isAnimating = false;\n    delete this.isFreeScrolling;\n    // render position with translateX when settled\n    this.positionSlider();\n    this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n  }\n};\n\nproto.shiftWrapCells = function( x ) {\n  // shift before cells\n  var beforeGap = this.cursorPosition + x;\n  this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n  // shift after cells\n  var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n  this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n  for ( var i=0; i < cells.length; i++ ) {\n    var cell = cells[i];\n    var cellShift = gap > 0 ? shift : 0;\n    cell.wrapShift( cellShift );\n    gap -= cell.size.outerWidth;\n  }\n};\n\nproto._unshiftCells = function( cells ) {\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  for ( var i=0; i < cells.length; i++ ) {\n    cells[i].wrapShift( 0 );\n  }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n  this.x += this.velocity;\n  this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n  this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n  return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n  // my thanks to Steven Wittens, who simplified this math greatly\n  return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n  if ( !this.isDraggable || !this.isPointerDown ) {\n    return;\n  }\n  // change the position to drag position by applying force\n  var dragVelocity = this.dragX - this.x;\n  var dragForce = dragVelocity - this.velocity;\n  this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n  // do not attract if pointer down or no slides\n  var dragDown = this.isDraggable && this.isPointerDown;\n  if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n    return;\n  }\n  var distance = this.selectedSlide.target * -1 - this.x;\n  var force = distance * this.options.selectedAttraction;\n  this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n});\n\nvar flickity = createCommonjsModule(function (module) {\n// Flickity main\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'ev-emitter/ev-emitter',\n      'get-size/get-size',\n      'fizzy-ui-utils/utils',\n      './cell',\n      './slide',\n      './animate'\n    ], function( EvEmitter, getSize$$1, utils$$1, Cell, Slide, animatePrototype ) {\n      return factory( window, EvEmitter, getSize$$1, utils$$1, Cell, Slide, animatePrototype );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      evEmitter,\n      getSize,\n      utils,\n      cell,\n      slide,\n      animate\n    );\n  } else {\n    // browser global\n    var _Flickity = window.Flickity;\n\n    window.Flickity = factory(\n      window,\n      window.EvEmitter,\n      window.getSize,\n      window.fizzyUIUtils,\n      _Flickity.Cell,\n      _Flickity.Slide,\n      _Flickity.animatePrototype\n    );\n  }\n\n}( window, function factory( window, EvEmitter, getSize$$1,\n  utils$$1, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n  elems = utils$$1.makeArray( elems );\n  while ( elems.length ) {\n    toElem.appendChild( elems.shift() );\n  }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n  var queryElement = utils$$1.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // do not initialize twice on same element\n  if ( this.element.flickityGUID ) {\n    var instance = instances[ this.element.flickityGUID ];\n    instance.option( options );\n    return instance;\n  }\n\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n  // options\n  this.options = utils$$1.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // kick things off\n  this._create();\n}\n\nFlickity.defaults = {\n  accessibility: true,\n  // adaptiveHeight: false,\n  cellAlign: 'center',\n  // cellSelector: undefined,\n  // contain: false,\n  freeScrollFriction: 0.075, // friction when free-scrolling\n  friction: 0.28, // friction when selecting\n  namespaceJQueryEvents: true,\n  // initialIndex: 0,\n  percentPosition: true,\n  resize: true,\n  selectedAttraction: 0.025,\n  setGallerySize: true\n  // watchCSS: false,\n  // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils$$1.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n  // add id for Flickity.data\n  var id = this.guid = ++GUID;\n  this.element.flickityGUID = id; // expando\n  instances[ id ] = this; // associate via id\n  // initial properties\n  this.selectedIndex = 0;\n  // how many frames slider has been in same position\n  this.restingFrames = 0;\n  // initial physics properties\n  this.x = 0;\n  this.velocity = 0;\n  this.originSide = this.options.rightToLeft ? 'right' : 'left';\n  // create viewport & slider\n  this.viewport = document.createElement('div');\n  this.viewport.className = 'flickity-viewport';\n  this._createSlider();\n\n  if ( this.options.resize || this.options.watchCSS ) {\n    window.addEventListener( 'resize', this );\n  }\n\n  // add listeners from on option\n  for ( var eventName in this.options.on ) {\n    var listener = this.options.on[ eventName ];\n    this.on( eventName, listener );\n  }\n\n  Flickity.createMethods.forEach( function( method ) {\n    this[ method ]();\n  }, this );\n\n  if ( this.options.watchCSS ) {\n    this.watchCSS();\n  } else {\n    this.activate();\n  }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n  utils$$1.extend( this.options, opts );\n};\n\nproto.activate = function() {\n  if ( this.isActive ) {\n    return;\n  }\n  this.isActive = true;\n  this.element.classList.add('flickity-enabled');\n  if ( this.options.rightToLeft ) {\n    this.element.classList.add('flickity-rtl');\n  }\n\n  this.getSize();\n  // move initial cell elements so they can be loaded as cells\n  var cellElems = this._filterFindCellElements( this.element.children );\n  moveElements( cellElems, this.slider );\n  this.viewport.appendChild( this.slider );\n  this.element.appendChild( this.viewport );\n  // get cells from children\n  this.reloadCells();\n\n  if ( this.options.accessibility ) {\n    // allow element to focusable\n    this.element.tabIndex = 0;\n    // listen for key presses\n    this.element.addEventListener( 'keydown', this );\n  }\n\n  this.emitEvent('activate');\n\n  var index;\n  var initialIndex = this.options.initialIndex;\n  if ( this.isInitActivated ) {\n    index = this.selectedIndex;\n  } else if ( initialIndex !== undefined ) {\n    index = this.cells[ initialIndex ] ? initialIndex : 0;\n  } else {\n    index = 0;\n  }\n  // select instantly\n  this.select( index, false, true );\n  // flag for initial activation, for using initialIndex\n  this.isInitActivated = true;\n  // ready event. #493\n  this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n  // slider element does all the positioning\n  var slider = document.createElement('div');\n  slider.className = 'flickity-slider';\n  slider.style[ this.originSide ] = 0;\n  this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n  return utils$$1.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n  // collection of item elements\n  this.cells = this._makeCells( this.slider.children );\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n  var cellElems = this._filterFindCellElements( elems );\n\n  // create new Flickity for collection\n  var cells = cellElems.map( function( cellElem ) {\n    return new Cell( cellElem, this );\n  }, this );\n\n  return cells;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n  return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n  // size all cells\n  this._sizeCells( this.cells );\n  // position all cells\n  this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n  index = index || 0;\n  // also measure maxCellHeight\n  // start 0 if positioning all cells\n  this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n  var cellX = 0;\n  // get cellX\n  if ( index > 0 ) {\n    var startCell = this.cells[ index - 1 ];\n    cellX = startCell.x + startCell.size.outerWidth;\n  }\n  var len = this.cells.length;\n  for ( var i=index; i < len; i++ ) {\n    var cell$$1 = this.cells[i];\n    cell$$1.setPosition( cellX );\n    cellX += cell$$1.size.outerWidth;\n    this.maxCellHeight = Math.max( cell$$1.size.outerHeight, this.maxCellHeight );\n  }\n  // keep track of cellX for wrap-around\n  this.slideableWidth = cellX;\n  // slides\n  this.updateSlides();\n  // contain slides target\n  this._containSlides();\n  // update slidesWidth\n  this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n  cells.forEach( function( cell$$1 ) {\n    cell$$1.getSize();\n  });\n};\n\n// --------------------------  -------------------------- //\n\nproto.updateSlides = function() {\n  this.slides = [];\n  if ( !this.cells.length ) {\n    return;\n  }\n\n  var slide$$1 = new Slide( this );\n  this.slides.push( slide$$1 );\n  var isOriginLeft = this.originSide == 'left';\n  var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n  var canCellFit = this._getCanCellFit();\n\n  this.cells.forEach( function( cell$$1, i ) {\n    // just add cell if first cell in slide\n    if ( !slide$$1.cells.length ) {\n      slide$$1.addCell( cell$$1 );\n      return;\n    }\n\n    var slideWidth = ( slide$$1.outerWidth - slide$$1.firstMargin ) +\n      ( cell$$1.size.outerWidth - cell$$1.size[ nextMargin ] );\n\n    if ( canCellFit.call( this, i, slideWidth ) ) {\n      slide$$1.addCell( cell$$1 );\n    } else {\n      // doesn't fit, new slide\n      slide$$1.updateTarget();\n\n      slide$$1 = new Slide( this );\n      this.slides.push( slide$$1 );\n      slide$$1.addCell( cell$$1 );\n    }\n  }, this );\n  // last slide\n  slide$$1.updateTarget();\n  // update .selectedSlide\n  this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n  var groupCells = this.options.groupCells;\n  if ( !groupCells ) {\n    return function() {\n      return false;\n    };\n  } else if ( typeof groupCells == 'number' ) {\n    // group by number. 3 -> [0,1,2], [3,4,5], ...\n    var number = parseInt( groupCells, 10 );\n    return function( i ) {\n      return ( i % number ) !== 0;\n    };\n  }\n  // default, group by width of slide\n  // parse '75%\n  var percentMatch = typeof groupCells == 'string' &&\n    groupCells.match(/^(\\d+)%$/);\n  var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n  return function( i, slideWidth ) {\n    return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n  };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n  this.positionCells();\n  this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n  this.size = getSize$$1( this.element );\n  this.setCellAlign();\n  this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n  // cell align, then based on origin side\n  center: {\n    left: 0.5,\n    right: 0.5\n  },\n  left: {\n    left: 0,\n    right: 1\n  },\n  right: {\n    right: 0,\n    left: 1\n  }\n};\n\nproto.setCellAlign = function() {\n  var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n  this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n  if ( this.options.setGallerySize ) {\n    var height = this.options.adaptiveHeight && this.selectedSlide ?\n      this.selectedSlide.height : this.maxCellHeight;\n    this.viewport.style.height = height + 'px';\n  }\n};\n\nproto._getWrapShiftCells = function() {\n  // only for wrap-around\n  if ( !this.options.wrapAround ) {\n    return;\n  }\n  // unshift previous cells\n  this._unshiftCells( this.beforeShiftCells );\n  this._unshiftCells( this.afterShiftCells );\n  // get before cells\n  // initial gap\n  var gapX = this.cursorPosition;\n  var cellIndex = this.cells.length - 1;\n  this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n  // get after cells\n  // ending gap between last cell and end of gallery viewport\n  gapX = this.size.innerWidth - this.cursorPosition;\n  // start cloning at first cell, working forwards\n  this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n  // keep adding cells until the cover the initial gap\n  var cells = [];\n  while ( gapX > 0 ) {\n    var cell$$1 = this.cells[ cellIndex ];\n    if ( !cell$$1 ) {\n      break;\n    }\n    cells.push( cell$$1 );\n    cellIndex += increment;\n    gapX -= cell$$1.size.outerWidth;\n  }\n  return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n  if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n    return;\n  }\n  var isRightToLeft = this.options.rightToLeft;\n  var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n  var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n  var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n  // content is less than gallery size\n  var isContentSmaller = contentWidth < this.size.innerWidth;\n  // bounds\n  var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n  var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n  // contain each cell target\n  this.slides.forEach( function( slide$$1 ) {\n    if ( isContentSmaller ) {\n      // all cells fit inside gallery\n      slide$$1.target = contentWidth * this.cellAlign;\n    } else {\n      // contain to bounds\n      slide$$1.target = Math.max( slide$$1.target, beginBound );\n      slide$$1.target = Math.min( slide$$1.target, endBound );\n    }\n  }, this );\n};\n\n// -----  ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery && this.$element ) {\n    // default trigger with type if no event\n    type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n    var $event = type;\n    if ( event ) {\n      // create jQuery event\n      var jQEvent = jQuery.Event( event );\n      jQEvent.type = type;\n      $event = jQEvent;\n    }\n    this.$element.trigger( $event, args );\n  }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n  if ( !this.isActive ) {\n    return;\n  }\n  index = parseInt( index, 10 );\n  this._wrapSelect( index );\n\n  if ( this.options.wrapAround || isWrap ) {\n    index = utils$$1.modulo( index, this.slides.length );\n  }\n  // bail if invalid index\n  if ( !this.slides[ index ] ) {\n    return;\n  }\n  var prevIndex = this.selectedIndex;\n  this.selectedIndex = index;\n  this.updateSelectedSlide();\n  if ( isInstant ) {\n    this.positionSliderAtSelected();\n  } else {\n    this.startAnimation();\n  }\n  if ( this.options.adaptiveHeight ) {\n    this.setGallerySize();\n  }\n  // events\n  this.dispatchEvent( 'select', null, [ index ] );\n  // change event if new index\n  if ( index != prevIndex ) {\n    this.dispatchEvent( 'change', null, [ index ] );\n  }\n  // old v1 event name, remove in v3\n  this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n  var len = this.slides.length;\n  var isWrapping = this.options.wrapAround && len > 1;\n  if ( !isWrapping ) {\n    return index;\n  }\n  var wrapIndex = utils$$1.modulo( index, len );\n  // go to shortest\n  var delta = Math.abs( wrapIndex - this.selectedIndex );\n  var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n  var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n  if ( !this.isDragSelect && backWrapDelta < delta ) {\n    index += len;\n  } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n    index -= len;\n  }\n  // wrap position so slider is within normal area\n  if ( index < 0 ) {\n    this.x -= this.slideableWidth;\n  } else if ( index >= len ) {\n    this.x += this.slideableWidth;\n  }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n  var slide$$1 = this.slides[ this.selectedIndex ];\n  // selectedIndex could be outside of slides, if triggered before resize()\n  if ( !slide$$1 ) {\n    return;\n  }\n  // unselect previous selected slide\n  this.unselectSelectedSlide();\n  // update new selected slide\n  this.selectedSlide = slide$$1;\n  slide$$1.select();\n  this.selectedCells = slide$$1.cells;\n  this.selectedElements = slide$$1.getCellElements();\n  // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n  // Remove in v3?\n  this.selectedCell = slide$$1.cells[0];\n  this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n  if ( this.selectedSlide ) {\n    this.selectedSlide.unselect();\n  }\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n  // get cell\n  var cell$$1 = this.queryCell( value );\n  if ( !cell$$1 ) {\n    return;\n  }\n\n  var index = this.getCellSlideIndex( cell$$1 );\n  this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell$$1 ) {\n  // get index of slides that has cell\n  for ( var i=0; i < this.slides.length; i++ ) {\n    var slide$$1 = this.slides[i];\n    var index = slide$$1.cells.indexOf( cell$$1 );\n    if ( index != -1 ) {\n      return i;\n    }\n  }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n  // loop through cells to get the one that matches\n  for ( var i=0; i < this.cells.length; i++ ) {\n    var cell$$1 = this.cells[i];\n    if ( cell$$1.element == elem ) {\n      return cell$$1;\n    }\n  }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n  elems = utils$$1.makeArray( elems );\n  var cells = [];\n  elems.forEach( function( elem ) {\n    var cell$$1 = this.getCell( elem );\n    if ( cell$$1 ) {\n      cells.push( cell$$1 );\n    }\n  }, this );\n  return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n  return this.cells.map( function( cell$$1 ) {\n    return cell$$1.element;\n  });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n  // first check if elem is cell\n  var cell$$1 = this.getCell( elem );\n  if ( cell$$1 ) {\n    return cell$$1;\n  }\n  // try to get parent cell elem\n  elem = utils$$1.getParent( elem, '.flickity-slider > *' );\n  return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n  if ( !adjCount ) {\n    return this.selectedSlide.getCellElements();\n  }\n  index = index === undefined ? this.selectedIndex : index;\n\n  var len = this.slides.length;\n  if ( 1 + ( adjCount * 2 ) >= len ) {\n    return this.getCellElements();\n  }\n\n  var cellElems = [];\n  for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n    var slideIndex = this.options.wrapAround ? utils$$1.modulo( i, len ) : i;\n    var slide$$1 = this.slides[ slideIndex ];\n    if ( slide$$1 ) {\n      cellElems = cellElems.concat( slide$$1.getCellElements() );\n    }\n  }\n  return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n  if ( typeof selector == 'number' ) {\n    // use number as index\n    return this.cells[ selector ];\n  }\n  if ( typeof selector == 'string' ) {\n    // use string as selector, get element\n    selector = this.element.querySelector( selector );\n  }\n  // get cell from element\n  return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n  this.emitEvent('uiChange');\n};\n\nproto.childUIPointerDown = function( event ) {\n  this.emitEvent( 'childUIPointerDown', [ event ] );\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n  this.watchCSS();\n  this.resize();\n};\n\nutils$$1.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.getSize();\n  // wrap values\n  if ( this.options.wrapAround ) {\n    this.x = utils$$1.modulo( this.x, this.slideableWidth );\n  }\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  this.emitEvent('resize');\n  // update selected index for group slides, instant\n  // TODO: position can be lost between groups of various numbers\n  var selectedElement = this.selectedElements && this.selectedElements[0];\n  this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n  var watchOption = this.options.watchCSS;\n  if ( !watchOption ) {\n    return;\n  }\n\n  var afterContent = getComputedStyle( this.element, ':after' ).content;\n  // activate if :after { content: 'flickity' }\n  if ( afterContent.indexOf('flickity') != -1 ) {\n    this.activate();\n  } else {\n    this.deactivate();\n  }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n  // only work if element is in focus\n  var isNotFocused = document.activeElement && document.activeElement != this.element;\n  if ( !this.options.accessibility ||isNotFocused ) {\n    return;\n  }\n\n  var handler = Flickity.keyboardHandlers[ event.keyCode ];\n  if ( handler ) {\n    handler.call( this );\n  }\n};\n\nFlickity.keyboardHandlers = {\n  // left arrow\n  37: function() {\n    var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n    this.uiChange();\n    this[ leftMethod ]();\n  },\n  // right arrow\n  39: function() {\n    var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n    this.uiChange();\n    this[ rightMethod ]();\n  },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n  var prevScrollY = window.pageYOffset;\n  this.element.focus();\n  // hack to fix scroll jump after focus, #76\n  if ( window.pageYOffset != prevScrollY ) {\n    window.scrollTo( window.pageXOffset, prevScrollY );\n  }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.element.classList.remove('flickity-enabled');\n  this.element.classList.remove('flickity-rtl');\n  this.unselectSelectedSlide();\n  // destroy cells\n  this.cells.forEach( function( cell$$1 ) {\n    cell$$1.destroy();\n  });\n  this.element.removeChild( this.viewport );\n  // move child elements back into element\n  moveElements( this.slider.children, this.element );\n  if ( this.options.accessibility ) {\n    this.element.removeAttribute('tabIndex');\n    this.element.removeEventListener( 'keydown', this );\n  }\n  // set flags\n  this.isActive = false;\n  this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n  this.deactivate();\n  window.removeEventListener( 'resize', this );\n  this.emitEvent('destroy');\n  if ( jQuery && this.$element ) {\n    jQuery.removeData( this.element, 'flickity' );\n  }\n  delete this.element.flickityGUID;\n  delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils$$1.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n  elem = utils$$1.getQueryElement( elem );\n  var id = elem && elem.flickityGUID;\n  return id && instances[ id ];\n};\n\nutils$$1.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n  jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n  jQuery = jq;\n};\n\nFlickity.Cell = Cell;\n\nreturn Flickity;\n\n}));\n});\n\nvar unipointer = createCommonjsModule(function (module) {\n/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*global define, module, require */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      evEmitter\n    );\n  } else {\n    // browser global\n    window.Unipointer = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n  // default to mouse events\n  var startEvent = 'mousedown';\n  if ( window.PointerEvent ) {\n    // Pointer Events\n    startEvent = 'pointerdown';\n  } else if ( 'ontouchstart' in window ) {\n    // Touch Events. iOS Safari\n    startEvent = 'touchstart';\n  }\n  elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n  for ( var i=0; i < touches.length; i++ ) {\n    var touch = touches[i];\n    if ( touch.identifier == this.pointerIdentifier ) {\n      return touch;\n    }\n  }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n  // dismiss clicks from right or middle buttons\n  var button = event.button;\n  if ( button && ( button !== 0 && button !== 1 ) ) {\n    return;\n  }\n  this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n  this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n  this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n  // dismiss right click and other pointers\n  // button = 0 is okay, 1-4 not\n  if ( event.button || this.isPointerDown ) {\n    return;\n  }\n\n  this.isPointerDown = true;\n  // save pointer identifier to match up touch events\n  this.pointerIdentifier = pointer.pointerId !== undefined ?\n    // pointerId for pointer events, touch.indentifier for touch events\n    pointer.pointerId : pointer.identifier;\n\n  this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n  mousedown: [ 'mousemove', 'mouseup' ],\n  touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n  pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n  if ( !event ) {\n    return;\n  }\n  // get proper events to match start event\n  var events = postStartEvents[ event.type ];\n  // bind events to node\n  events.forEach( function( eventName ) {\n    window.addEventListener( eventName, this );\n  }, this );\n  // save these arguments\n  this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n  // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n  if ( !this._boundPointerEvents ) {\n    return;\n  }\n  this._boundPointerEvents.forEach( function( eventName ) {\n    window.removeEventListener( eventName, this );\n  }, this );\n\n  delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n  this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerMove( event, event );\n  }\n};\n\nproto.ontouchmove = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerMove( event, touch );\n  }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n  this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n  this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n  this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerUp( event, event );\n  }\n};\n\nproto.ontouchend = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerUp( event, touch );\n  }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n  this._pointerReset();\n  this._unbindPostStartEvents();\n  this.pointerDone();\n};\n\nproto._pointerReset = function() {\n  // reset properties\n  this.isPointerDown = false;\n  delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerCancel( event, event );\n  }\n};\n\nproto.ontouchcancel = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerCancel( event, touch );\n  }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n  this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// -----  ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n  return {\n    x: pointer.pageX,\n    y: pointer.pageY\n  };\n};\n\n// -----  ----- //\n\nreturn Unipointer;\n\n}));\n});\n\nvar unidragger = createCommonjsModule(function (module) {\n/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'unipointer/unipointer'\n    ], function( Unipointer ) {\n      return factory( window, Unipointer );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      unipointer\n    );\n  } else {\n    // browser global\n    window.Unidragger = factory(\n      window,\n      window.Unipointer\n    );\n  }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n  this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n  this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  // bind each handle\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n  var touchAction = isAdd ? this._touchActionValue : '';\n  for ( var i=0; i < this.handles.length; i++ ) {\n    var handle = this.handles[i];\n    this._bindStartEvent( handle, isAdd );\n    handle[ bindMethod ]( 'click', this );\n    // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n    if ( window.PointerEvent ) {\n      handle.style.touchAction = touchAction;\n    }\n  }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n  // track start event position\n  this.pointerDownPointer = pointer;\n\n  event.preventDefault();\n  this.pointerDownBlur();\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n  TEXTAREA: true,\n  INPUT: true,\n  SELECT: true,\n  OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n  radio: true,\n  checkbox: true,\n  button: true,\n  submit: true,\n  image: true,\n  file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n  var isCursorNode = cursorNodes[ event.target.nodeName ];\n  var isClickType = clickTypes[ event.target.type ];\n  var isOkay = !isCursorNode || isClickType;\n  if ( !isOkay ) {\n    this._pointerReset();\n  }\n  return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n  var focused = document.activeElement;\n  // do not blur body for IE10, metafizzy/flickity#117\n  var canBlur = focused && focused.blur && focused != document.body;\n  if ( canBlur ) {\n    focused.blur();\n  }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n  var moveVector = {\n    x: pointer.pageX - this.pointerDownPointer.pageX,\n    y: pointer.pageY - this.pointerDownPointer.pageY\n  };\n  // start drag if pointer has moved far enough to start drag\n  if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n    this._dragStart( event, pointer );\n  }\n  return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n  if ( this.isDragging ) {\n    this._dragEnd( event, pointer );\n  } else {\n    // pointer didn't move enough for drag to start\n    this._staticClick( event, pointer );\n  }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n  this.isDragging = true;\n  // prevent clicks\n  this.isPreventingClicks = true;\n  this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n  this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n  // do not drag if not dragging yet\n  if ( !this.isDragging ) {\n    return;\n  }\n\n  this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  event.preventDefault();\n  this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n  // set flags\n  this.isDragging = false;\n  // re-enable clicking async\n  setTimeout( function() {\n    delete this.isPreventingClicks;\n  }.bind( this ) );\n\n  this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n  if ( this.isPreventingClicks ) {\n    event.preventDefault();\n  }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n  // ignore emulated mouse up clicks\n  if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n    return;\n  }\n\n  this.staticClick( event, pointer );\n\n  // set flag for emulated clicks 300ms after touchend\n  if ( event.type != 'mouseup' ) {\n    this.isIgnoringMouseUp = true;\n    // reset flag after 300ms\n    setTimeout( function() {\n      delete this.isIgnoringMouseUp;\n    }.bind( this ), 400 );\n  }\n};\n\nproto.staticClick = function( event, pointer ) {\n  this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// -----  ----- //\n\nreturn Unidragger;\n\n}));\n});\n\nvar drag = createCommonjsModule(function (module) {\n// drag\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      './flickity',\n      'unidragger/unidragger',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unidragger, utils$$2 ) {\n      return factory( window, Flickity, Unidragger, utils$$2 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      flickity,\n      unidragger,\n      utils\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n      window,\n      window.Flickity,\n      window.Unidragger,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unidragger, utils$$2 ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils$$2.extend( Flickity.defaults, {\n  draggable: '>1',\n  dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils$$2.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// --------------------------  -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n  this.on( 'activate', this.onActivateDrag );\n  this.on( 'uiChange', this._uiChangeDrag );\n  this.on( 'childUIPointerDown', this._childUIPointerDownDrag );\n  this.on( 'deactivate', this.unbindDrag );\n  this.on( 'cellChange', this.updateDraggable );\n  // TODO updateDraggable on resize? if groupCells & slides change\n  // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n  // #457, RubaXa/Sortable#973\n  if ( isTouch && !isTouchmoveScrollCanceled ) {\n    window.addEventListener( 'touchmove', function() {});\n    isTouchmoveScrollCanceled = true;\n  }\n};\n\nproto.onActivateDrag = function() {\n  this.handles = [ this.viewport ];\n  this.bindHandles();\n  this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n  this.unbindHandles();\n  this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n  // disable dragging if less than 2 slides. #278\n  if ( this.options.draggable == '>1' ) {\n    this.isDraggable = this.slides.length > 1;\n  } else {\n    this.isDraggable = this.options.draggable;\n  }\n  if ( this.isDraggable ) {\n    this.element.classList.add('is-draggable');\n  } else {\n    this.element.classList.remove('is-draggable');\n  }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n  this.options.draggable = true;\n  this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n  this.options.draggable = false;\n  this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n  delete this.isFreeScrolling;\n};\n\nproto._childUIPointerDownDrag = function( event ) {\n  // allow focus & preventDefault even when not draggable\n  // so child UI elements keep focus on carousel. #721\n  event.preventDefault();\n  this.pointerDownFocus( event );\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    this._pointerDownDefault( event, pointer );\n    return;\n  }\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n\n  this._pointerDownPreventDefault( event );\n  this.pointerDownFocus( event );\n  // blur\n  if ( document.activeElement != this.element ) {\n    // do not blur if already focused\n    this.pointerDownBlur();\n  }\n\n  // stop if it was moving\n  this.dragX = this.x;\n  this.viewport.classList.add('is-pointer-down');\n  // track scrolling\n  this.pointerDownScroll = getScrollPosition();\n  window.addEventListener( 'scroll', this );\n\n  this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n  // track start event position\n  this.pointerDownPointer = pointer;\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n  INPUT: true,\n  TEXTAREA: true,\n  SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isFocusNode ) {\n    this.focus();\n  }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n  var isTouchStart = event.type == 'touchstart';\n  var isTouchPointer = event.pointerType == 'touch';\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n    event.preventDefault();\n  }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n  delete this.isTouchScrolling;\n  this.viewport.classList.remove('is-pointer-down');\n  this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n  window.removeEventListener( 'scroll', this );\n  delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  this.dragStartPosition = this.x;\n  this.startAnimation();\n  window.removeEventListener( 'scroll', this );\n  this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  event.preventDefault();\n\n  this.previousDragX = this.dragX;\n  // reverse if right-to-left\n  var direction = this.options.rightToLeft ? -1 : 1;\n  if ( this.options.wrapAround ) {\n    // wrap around move. #589\n    moveVector.x = moveVector.x % this.slideableWidth;\n  }\n  var dragX = this.dragStartPosition + moveVector.x * direction;\n\n  if ( !this.options.wrapAround && this.slides.length ) {\n    // slow drag\n    var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n    dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n    var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n    dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n  }\n\n  this.dragX = dragX;\n\n  this.dragMoveTime = new Date();\n  this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  if ( this.options.freeScroll ) {\n    this.isFreeScrolling = true;\n  }\n  // set selectedIndex based on where flick will end up\n  var index = this.dragEndRestingSelect();\n\n  if ( this.options.freeScroll && !this.options.wrapAround ) {\n    // if free-scroll & not wrap around\n    // do not free-scroll if going outside of bounding slides\n    // so bounding slides can attract slider, and keep it in bounds\n    var restingX = this.getRestingPosition();\n    this.isFreeScrolling = -restingX > this.slides[0].target &&\n      -restingX < this.getLastSlide().target;\n  } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n    // boost selection if selected index has not changed\n    index += this.dragEndBoostSelect();\n  }\n  delete this.previousDragX;\n  // apply selection\n  // TODO refactor this, selecting here feels weird\n  // HACK, set flag so dragging stays in correct direction\n  this.isDragSelect = this.options.wrapAround;\n  this.select( index );\n  delete this.isDragSelect;\n  this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n  var restingX = this.getRestingPosition();\n  // how far away from selected slide\n  var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n  // get closet resting going up and going down\n  var positiveResting = this._getClosestResting( restingX, distance, 1 );\n  var negativeResting = this._getClosestResting( restingX, distance, -1 );\n  // use closer resting for wrap-around\n  var index = positiveResting.distance < negativeResting.distance ?\n    positiveResting.index : negativeResting.index;\n  return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n  var index = this.selectedIndex;\n  var minDistance = Infinity;\n  var condition = this.options.contain && !this.options.wrapAround ?\n    // if contain, keep going if distance is equal to minDistance\n    function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n  while ( condition( distance, minDistance ) ) {\n    // measure distance to next cell\n    index += increment;\n    minDistance = distance;\n    distance = this.getSlideDistance( -restingX, index );\n    if ( distance === null ) {\n      break;\n    }\n    distance = Math.abs( distance );\n  }\n  return {\n    distance: minDistance,\n    // selected was previous index\n    index: index - increment\n  };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n  var len = this.slides.length;\n  // wrap around if at least 2 slides\n  var isWrapAround = this.options.wrapAround && len > 1;\n  var slideIndex = isWrapAround ? utils$$2.modulo( index, len ) : index;\n  var slide = this.slides[ slideIndex ];\n  if ( !slide ) {\n    return null;\n  }\n  // add distance for wrap-around slides\n  var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n  return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n  // do not boost if no previousDragX or dragMoveTime\n  if ( this.previousDragX === undefined || !this.dragMoveTime ||\n    // or if drag was held for 100 ms\n    new Date() - this.dragMoveTime > 100 ) {\n    return 0;\n  }\n\n  var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n  var delta = this.previousDragX - this.dragX;\n  if ( distance > 0 && delta > 0 ) {\n    // boost to next if moving towards the right, and positive velocity\n    return 1;\n  } else if ( distance < 0 && delta < 0 ) {\n    // boost to previous if moving towards the left, and negative velocity\n    return -1;\n  }\n  return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n  // get clickedCell, if cell was clicked\n  var clickedCell = this.getParentCell( event.target );\n  var cellElem = clickedCell && clickedCell.element;\n  var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n  this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n  var scroll = getScrollPosition();\n  var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n  var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n  // cancel click/tap if scroll is too much\n  if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n    this._pointerDone();\n  }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset\n  };\n}\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n});\n\nvar tapListener = createCommonjsModule(function (module) {\n/*!\n * Tap listener v2.0.0\n * listens to taps\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false*/ /*globals define, module, require */\n\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'unipointer/unipointer'\n    ], function( Unipointer ) {\n      return factory( window, Unipointer );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      unipointer\n    );\n  } else {\n    // browser global\n    window.TapListener = factory(\n      window,\n      window.Unipointer\n    );\n  }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// --------------------------  TapListener -------------------------- //\n\nfunction TapListener( elem ) {\n  this.bindTap( elem );\n}\n\n// inherit Unipointer & EventEmitter\nvar proto = TapListener.prototype = Object.create( Unipointer.prototype );\n\n/**\n * bind tap event to element\n * @param {Element} elem\n */\nproto.bindTap = function( elem ) {\n  if ( !elem ) {\n    return;\n  }\n  this.unbindTap();\n  this.tapElement = elem;\n  this._bindStartEvent( elem, true );\n};\n\nproto.unbindTap = function() {\n  if ( !this.tapElement ) {\n    return;\n  }\n  this._bindStartEvent( this.tapElement, true );\n  delete this.tapElement;\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n  // ignore emulated mouse up clicks\n  if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n    return;\n  }\n\n  var pointerPoint = Unipointer.getPointerPoint( pointer );\n  var boundingRect = this.tapElement.getBoundingClientRect();\n  var scrollX = window.pageXOffset;\n  var scrollY = window.pageYOffset;\n  // calculate if pointer is inside tapElement\n  var isInside = pointerPoint.x >= boundingRect.left + scrollX &&\n    pointerPoint.x <= boundingRect.right + scrollX &&\n    pointerPoint.y >= boundingRect.top + scrollY &&\n    pointerPoint.y <= boundingRect.bottom + scrollY;\n  // trigger callback if pointer is inside element\n  if ( isInside ) {\n    this.emitEvent( 'tap', [ event, pointer ] );\n  }\n\n  // set flag for emulated clicks 300ms after touchend\n  if ( event.type != 'mouseup' ) {\n    this.isIgnoringMouseUp = true;\n    // reset flag after 300ms\n    var _this = this;\n    setTimeout( function() {\n      delete _this.isIgnoringMouseUp;\n    }, 400 );\n  }\n};\n\nproto.destroy = function() {\n  this.pointerDone();\n  this.unbindTap();\n};\n\n// -----  ----- //\n\nreturn TapListener;\n\n}));\n});\n\nvar prevNextButton = createCommonjsModule(function (module) {\n// prev/next buttons\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      './flickity',\n      'tap-listener/tap-listener',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, TapListener, utils$$2 ) {\n      return factory( window, Flickity, TapListener, utils$$2 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      flickity,\n      tapListener,\n      utils\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.TapListener,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, TapListener, utils$$2 ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n  this.direction = direction;\n  this.parent = parent;\n  this._create();\n}\n\nPrevNextButton.prototype = Object.create( TapListener.prototype );\n\nPrevNextButton.prototype._create = function() {\n  // properties\n  this.isEnabled = true;\n  this.isPrevious = this.direction == -1;\n  var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n  this.isLeft = this.direction == leftDirection;\n\n  var element = this.element = document.createElement('button');\n  element.className = 'flickity-button flickity-prev-next-button';\n  element.className += this.isPrevious ? ' previous' : ' next';\n  // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n  element.setAttribute( 'type', 'button' );\n  // init as disabled\n  this.disable();\n\n  element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n  // create arrow\n  var svg = this.createSVG();\n  element.appendChild( svg );\n  // events\n  this.on( 'tap', this.onTap );\n  this.parent.on( 'select', this.update.bind( this ) );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n  this.bindTap( this.element );\n  // click events from keyboard\n  this.element.addEventListener( 'click', this );\n  // add to DOM\n  this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n  // remove from DOM\n  this.parent.element.removeChild( this.element );\n  // do regular TapListener destroy\n  TapListener.prototype.destroy.call( this );\n  // click events from keyboard\n  this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n  var svg = document.createElementNS( svgURI, 'svg');\n  svg.setAttribute( 'class', 'flickity-button-icon' );\n  svg.setAttribute( 'viewBox', '0 0 100 100' );\n  var path = document.createElementNS( svgURI, 'path');\n  var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n  path.setAttribute( 'd', pathMovements );\n  path.setAttribute( 'class', 'arrow' );\n  // rotate arrow\n  if ( !this.isLeft ) {\n    path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n  }\n  svg.appendChild( path );\n  return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n  // use shape as movement if string\n  if ( typeof shape == 'string' ) {\n    return shape;\n  }\n  // create movement string\n  return 'M ' + shape.x0 + ',50' +\n    ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n    ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n    ' L ' + shape.x3 + ',50 ' +\n    ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n    ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n    ' Z';\n}\n\nPrevNextButton.prototype.onTap = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.parent.uiChange();\n  var method = this.isPrevious ? 'previous' : 'next';\n  this.parent[ method ]();\n};\n\nPrevNextButton.prototype.handleEvent = utils$$2.handleEvent;\n\nPrevNextButton.prototype.onclick = function( event ) {\n  // only allow clicks from keyboard\n  var focused = document.activeElement;\n  if ( focused && focused == this.element ) {\n    this.onTap( event, event );\n  }\n};\n\n// -----  ----- //\n\nPrevNextButton.prototype.enable = function() {\n  if ( this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = false;\n  this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = true;\n  this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n  // index of first or last slide, if previous or next\n  var slides = this.parent.slides;\n  // enable is wrapAround and at least 2 slides\n  if ( this.parent.options.wrapAround && slides.length > 1 ) {\n    this.enable();\n    return;\n  }\n  var lastIndex = slides.length ? slides.length - 1 : 0;\n  var boundIndex = this.isPrevious ? 0 : lastIndex;\n  var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n  this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n  this.deactivate();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils$$2.extend( Flickity.defaults, {\n  prevNextButtons: true,\n  arrowShape: {\n    x0: 10,\n    x1: 60, y1: 50,\n    x2: 70, y2: 40,\n    x3: 30\n  }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n  if ( !this.options.prevNextButtons ) {\n    return;\n  }\n\n  this.prevButton = new PrevNextButton( -1, this );\n  this.nextButton = new PrevNextButton( 1, this );\n\n  this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n  this.prevButton.activate();\n  this.nextButton.activate();\n  this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n  this.prevButton.deactivate();\n  this.nextButton.deactivate();\n  this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// --------------------------  -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n});\n\nvar pageDots = createCommonjsModule(function (module) {\n// page dots\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      './flickity',\n      'tap-listener/tap-listener',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, TapListener, utils$$2 ) {\n      return factory( window, Flickity, TapListener, utils$$2 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      flickity,\n      tapListener,\n      utils\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.TapListener,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, TapListener, utils$$2 ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n  this.parent = parent;\n  this._create();\n}\n\nPageDots.prototype = new TapListener();\n\nPageDots.prototype._create = function() {\n  // create holder element\n  this.holder = document.createElement('ol');\n  this.holder.className = 'flickity-page-dots';\n  // create dots, array of elements\n  this.dots = [];\n  // events\n  this.on( 'tap', this.onTap );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n  this.setDots();\n  this.bindTap( this.holder );\n  // add to DOM\n  this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n  // remove from DOM\n  this.parent.element.removeChild( this.holder );\n  TapListener.prototype.destroy.call( this );\n};\n\nPageDots.prototype.setDots = function() {\n  // get difference between number of slides and number of dots\n  var delta = this.parent.slides.length - this.dots.length;\n  if ( delta > 0 ) {\n    this.addDots( delta );\n  } else if ( delta < 0 ) {\n    this.removeDots( -delta );\n  }\n};\n\nPageDots.prototype.addDots = function( count ) {\n  var fragment = document.createDocumentFragment();\n  var newDots = [];\n  var length = this.dots.length;\n  var max = length + count;\n\n  for ( var i = length; i < max; i++ ) {\n    var dot = document.createElement('li');\n    dot.className = 'dot';\n    dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n    fragment.appendChild( dot );\n    newDots.push( dot );\n  }\n\n  this.holder.appendChild( fragment );\n  this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n  // remove from this.dots collection\n  var removeDots = this.dots.splice( this.dots.length - count, count );\n  // remove from DOM\n  removeDots.forEach( function( dot ) {\n    this.holder.removeChild( dot );\n  }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n  // remove selected class on previous\n  if ( this.selectedDot ) {\n    this.selectedDot.className = 'dot';\n    this.selectedDot.removeAttribute('aria-current');\n  }\n  // don't proceed if no dots\n  if ( !this.dots.length ) {\n    return;\n  }\n  this.selectedDot = this.dots[ this.parent.selectedIndex ];\n  this.selectedDot.className = 'dot is-selected';\n  this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = function( event ) {\n  var target = event.target;\n  // only care about dot clicks\n  if ( target.nodeName != 'LI' ) {\n    return;\n  }\n\n  this.parent.uiChange();\n  var index = this.dots.indexOf( target );\n  this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n  this.deactivate();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils$$2.extend( Flickity.defaults, {\n  pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n  if ( !this.options.pageDots ) {\n    return;\n  }\n  this.pageDots = new PageDots( this );\n  // events\n  this.on( 'activate', this.activatePageDots );\n  this.on( 'select', this.updateSelectedPageDots );\n  this.on( 'cellChange', this.updatePageDots );\n  this.on( 'resize', this.updatePageDots );\n  this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n  this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n  this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n  this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n  this.pageDots.deactivate();\n};\n\n// -----  ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n});\n\nvar player = createCommonjsModule(function (module) {\n// player & autoPlay\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      'ev-emitter/ev-emitter',\n      'fizzy-ui-utils/utils',\n      './flickity'\n    ], function( EvEmitter, utils$$2, Flickity ) {\n      return factory( EvEmitter, utils$$2, Flickity );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      evEmitter,\n      utils,\n      flickity\n    );\n  } else {\n    // browser global\n    factory(\n      window.EvEmitter,\n      window.fizzyUIUtils,\n      window.Flickity\n    );\n  }\n\n}( window, function factory( EvEmitter, utils$$2, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n  this.parent = parent;\n  this.state = 'stopped';\n  // visibility change event handler\n  this.onVisibilityChange = this.visibilityChange.bind( this );\n  this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n  if ( this.state == 'playing' ) {\n    return;\n  }\n  // do not play if page is hidden, start playing when page is visible\n  var isPageHidden = document.hidden;\n  if ( isPageHidden ) {\n    document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n    return;\n  }\n\n  this.state = 'playing';\n  // listen to visibility change\n  document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n  // start ticking\n  this.tick();\n};\n\nPlayer.prototype.tick = function() {\n  // do not tick if not playing\n  if ( this.state != 'playing' ) {\n    return;\n  }\n\n  var time = this.parent.options.autoPlay;\n  // default to 3 seconds\n  time = typeof time == 'number' ? time : 3000;\n  var _this = this;\n  // HACK: reset ticks if stopped and started within interval\n  this.clear();\n  this.timeout = setTimeout( function() {\n    _this.parent.next( true );\n    _this.tick();\n  }, time );\n};\n\nPlayer.prototype.stop = function() {\n  this.state = 'stopped';\n  this.clear();\n  // remove visibility change event\n  document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n  clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n  if ( this.state == 'playing' ) {\n    this.state = 'paused';\n    this.clear();\n  }\n};\n\nPlayer.prototype.unpause = function() {\n  // re-start play if paused\n  if ( this.state == 'paused' ) {\n    this.play();\n  }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n  var isPageHidden = document.hidden;\n  this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n  this.play();\n  document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils$$2.extend( Flickity.defaults, {\n  pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n  this.player = new Player( this );\n\n  this.on( 'activate', this.activatePlayer );\n  this.on( 'uiChange', this.stopPlayer );\n  this.on( 'pointerDown', this.stopPlayer );\n  this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n  if ( !this.options.autoPlay ) {\n    return;\n  }\n  this.player.play();\n  this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n  this.player.play();\n};\n\nproto.stopPlayer = function() {\n  this.player.stop();\n};\n\nproto.pausePlayer = function() {\n  this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n  this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n  this.player.stop();\n  this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n  if ( !this.options.pauseAutoPlayOnHover ) {\n    return;\n  }\n  this.player.pause();\n  this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n  this.player.unpause();\n  this.element.removeEventListener( 'mouseleave', this );\n};\n\n// -----  ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n});\n\nvar addRemoveCell = createCommonjsModule(function (module) {\n// add, remove cell\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      './flickity',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, utils$$2 ) {\n      return factory( window, Flickity, utils$$2 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      flickity,\n      utils\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils$$2 ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n  var fragment = document.createDocumentFragment();\n  cells.forEach( function( cell ) {\n    fragment.appendChild( cell.element );\n  });\n  return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n  var cells = this._makeCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  var len = this.cells.length;\n  // default to append\n  index = index === undefined ? len : index;\n  // add cells with document fragment\n  var fragment = getCellsFragment( cells );\n  // append to slider\n  var isAppend = index == len;\n  if ( isAppend ) {\n    this.slider.appendChild( fragment );\n  } else {\n    var insertCellElement = this.cells[ index ].element;\n    this.slider.insertBefore( fragment, insertCellElement );\n  }\n  // add to this.cells\n  if ( index === 0 ) {\n    // prepend, add to start\n    this.cells = cells.concat( this.cells );\n  } else if ( isAppend ) {\n    // append, add to end\n    this.cells = this.cells.concat( cells );\n  } else {\n    // insert in this.cells\n    var endCells = this.cells.splice( index, len - index );\n    this.cells = this.cells.concat( cells ).concat( endCells );\n  }\n\n  this._sizeCells( cells );\n  this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n  this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n  this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n  var cells = this.getCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n\n  var minCellIndex = this.cells.length - 1;\n  // remove cells from collection & DOM\n  cells.forEach( function( cell ) {\n    cell.remove();\n    var index = this.cells.indexOf( cell );\n    minCellIndex = Math.min( index, minCellIndex );\n    utils$$2.removeFrom( this.cells, cell );\n  }, this );\n\n  this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n  var cell = this.getCell( elem );\n  if ( !cell ) {\n    return;\n  }\n  cell.getSize();\n\n  var index = this.cells.indexOf( cell );\n  this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n  var prevSelectedElem = this.selectedElement;\n  this._positionCells( changedCellIndex );\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  // update selectedIndex\n  // try to maintain position & select previous selected element\n  var cell = this.getCell( prevSelectedElem );\n  if ( cell ) {\n    this.selectedIndex = this.getCellSlideIndex( cell );\n  }\n  this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n  this.emitEvent( 'cellChange', [ changedCellIndex ] );\n  // position slider\n  this.select( this.selectedIndex );\n  // do not position slider after lazy load\n  if ( isPositioningSlider ) {\n    this.positionSliderAtSelected();\n  }\n};\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n});\n\nvar lazyload = createCommonjsModule(function (module) {\n// lazyload\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      './flickity',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, utils$$2 ) {\n      return factory( window, Flickity, utils$$2 );\n    });\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      flickity,\n      utils\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils$$2 ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n  this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n  var lazyLoad = this.options.lazyLoad;\n  if ( !lazyLoad ) {\n    return;\n  }\n  // get adjacent cells, use lazyLoad option for adjacent count\n  var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n  var cellElems = this.getAdjacentCellElements( adjCount );\n  // get lazy images in those cells\n  var lazyImages = [];\n  cellElems.forEach( function( cellElem ) {\n    var lazyCellImages = getCellLazyImages( cellElem );\n    lazyImages = lazyImages.concat( lazyCellImages );\n  });\n  // load lazy images\n  lazyImages.forEach( function( img ) {\n    new LazyLoader( img, this );\n  }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n  // check if cell element is lazy image\n  if ( cellElem.nodeName == 'IMG' ) {\n    var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n    var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n    var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n    if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n      return [ cellElem ];\n    }\n  }\n  // select lazy images in cell\n  var lazySelector = 'img[data-flickity-lazyload], ' +\n    'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n  var imgs = cellElem.querySelectorAll( lazySelector );\n  return utils$$2.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity$$2 ) {\n  this.img = img;\n  this.flickity = flickity$$2;\n  this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils$$2.handleEvent;\n\nLazyLoader.prototype.load = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  // get src & srcset\n  var src = this.img.getAttribute('data-flickity-lazyload') ||\n    this.img.getAttribute('data-flickity-lazyload-src');\n  var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n  // set src & serset\n  this.img.src = src;\n  if ( srcset ) {\n    this.img.setAttribute( 'srcset', srcset );\n  }\n  // remove attr\n  this.img.removeAttribute('data-flickity-lazyload');\n  this.img.removeAttribute('data-flickity-lazyload-src');\n  this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n  this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n  this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n  // unbind events\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n\n  var cell = this.flickity.getParentCell( this.img );\n  var cellElem = cell && cell.element;\n  this.flickity.cellSizeChange( cellElem );\n\n  this.img.classList.add( className );\n  this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -----  ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n});\n\nvar js$1 = createCommonjsModule(function (module) {\n/*!\n * Flickity v2.1.1\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof undefined == 'function' && undefined.amd ) {\n    // AMD\n    undefined( [\n      './flickity',\n      './drag',\n      './prev-next-button',\n      './page-dots',\n      './player',\n      './add-remove-cell',\n      './lazyload'\n    ], factory );\n  } else if ( 'object' == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      flickity,\n      drag,\n      prevNextButton,\n      pageDots,\n      player,\n      addRemoveCell,\n      lazyload\n    );\n  }\n\n})( window, function factory( Flickity ) {\n  /*jshint strict: false*/\n  return Flickity;\n});\n});\n\n// This is required to fix an iOS10 bug for Flickity.\n// It is our own implementation of the Flickity 2.0 fix found here: http://bit.ly/2kU4mKW\njquery$1(window).on('dragStart', function (event) {\n  var $target = jquery$1(event.target);\n  var $flickityEnabledEl = $target.closest('.flickity-enabled');\n\n  if ($flickityEnabledEl.length) {\n    var flickity = js$1.data($flickityEnabledEl[0]);\n\n    window.removeEventListener('scroll', flickity);\n  }\n});\n\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n *  https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n    'IntersectionObserverEntry' in window &&\n    'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n  // Minimal polyfill for Edge 15's lack of `isIntersecting`\n  // See: https://github.com/w3c/IntersectionObserver/issues/211\n  if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n    Object.defineProperty(window.IntersectionObserverEntry.prototype,\n      'isIntersecting', {\n      get: function () {\n        return this.intersectionRatio > 0;\n      }\n    });\n  }\n  return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observering a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n  this.time = entry.time;\n  this.target = entry.target;\n  this.rootBounds = entry.rootBounds;\n  this.boundingClientRect = entry.boundingClientRect;\n  this.intersectionRect = entry.intersectionRect || getEmptyRect();\n  this.isIntersecting = !!entry.intersectionRect;\n\n  // Calculates the intersection ratio.\n  var targetRect = this.boundingClientRect;\n  var targetArea = targetRect.width * targetRect.height;\n  var intersectionRect = this.intersectionRect;\n  var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n  // Sets intersection ratio.\n  if (targetArea) {\n    this.intersectionRatio = intersectionArea / targetArea;\n  } else {\n    // If area is zero and is intersecting, sets to 1, otherwise to 0\n    this.intersectionRatio = this.isIntersecting ? 1 : 0;\n  }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n *     changes have queued. The function is not invoked if the queue has\n *     been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n  var options = opt_options || {};\n\n  if (typeof callback != 'function') {\n    throw new Error('callback must be a function');\n  }\n\n  if (options.root && options.root.nodeType != 1) {\n    throw new Error('root must be an Element');\n  }\n\n  // Binds and throttles `this._checkForIntersections`.\n  this._checkForIntersections = throttle(\n      this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n  // Private properties.\n  this._callback = callback;\n  this._observationTargets = [];\n  this._queuedEntries = [];\n  this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n  // Public properties.\n  this.thresholds = this._initThresholds(options.threshold);\n  this.root = options.root || null;\n  this.rootMargin = this._rootMarginValues.map(function(margin) {\n    return margin.value + margin.unit;\n  }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n  var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n    return item.element == target;\n  });\n\n  if (isTargetAlreadyObserved) {\n    return;\n  }\n\n  if (!(target && target.nodeType == 1)) {\n    throw new Error('target must be an Element');\n  }\n\n  this._registerInstance();\n  this._observationTargets.push({element: target, entry: null});\n  this._monitorIntersections();\n  this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n  this._observationTargets =\n      this._observationTargets.filter(function(item) {\n\n    return item.element != target;\n  });\n  if (!this._observationTargets.length) {\n    this._unmonitorIntersections();\n    this._unregisterInstance();\n  }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n  this._observationTargets = [];\n  this._unmonitorIntersections();\n  this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n  var records = this._queuedEntries.slice();\n  this._queuedEntries = [];\n  return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n *     a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n  var threshold = opt_threshold || [0];\n  if (!Array.isArray(threshold)) threshold = [threshold];\n\n  return threshold.sort().filter(function(t, i, a) {\n    if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n      throw new Error('threshold must be a number between 0 and 1 inclusively');\n    }\n    return t !== a[i - 1];\n  });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n *     defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n *     value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n  var marginString = opt_rootMargin || '0px';\n  var margins = marginString.split(/\\s+/).map(function(margin) {\n    var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n    if (!parts) {\n      throw new Error('rootMargin must be specified in pixels or percent');\n    }\n    return {value: parseFloat(parts[1]), unit: parts[2]};\n  });\n\n  // Handles shorthand.\n  margins[1] = margins[1] || margins[0];\n  margins[2] = margins[2] || margins[0];\n  margins[3] = margins[3] || margins[1];\n\n  return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibilty state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n  if (!this._monitoringIntersections) {\n    this._monitoringIntersections = true;\n\n    // If a poll interval is set, use polling instead of listening to\n    // resize and scroll events or DOM mutations.\n    if (this.POLL_INTERVAL) {\n      this._monitoringInterval = setInterval(\n          this._checkForIntersections, this.POLL_INTERVAL);\n    }\n    else {\n      addEvent(window, 'resize', this._checkForIntersections, true);\n      addEvent(document, 'scroll', this._checkForIntersections, true);\n\n      if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n        this._domObserver = new MutationObserver(this._checkForIntersections);\n        this._domObserver.observe(document, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          subtree: true\n        });\n      }\n    }\n  }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n  if (this._monitoringIntersections) {\n    this._monitoringIntersections = false;\n\n    clearInterval(this._monitoringInterval);\n    this._monitoringInterval = null;\n\n    removeEvent(window, 'resize', this._checkForIntersections, true);\n    removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n    if (this._domObserver) {\n      this._domObserver.disconnect();\n      this._domObserver = null;\n    }\n  }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n  var rootIsInDom = this._rootIsInDom();\n  var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n  this._observationTargets.forEach(function(item) {\n    var target = item.element;\n    var targetRect = getBoundingClientRect(target);\n    var rootContainsTarget = this._rootContainsTarget(target);\n    var oldEntry = item.entry;\n    var intersectionRect = rootIsInDom && rootContainsTarget &&\n        this._computeTargetAndRootIntersection(target, rootRect);\n\n    var newEntry = item.entry = new IntersectionObserverEntry({\n      time: now(),\n      target: target,\n      boundingClientRect: targetRect,\n      rootBounds: rootRect,\n      intersectionRect: intersectionRect\n    });\n\n    if (!oldEntry) {\n      this._queuedEntries.push(newEntry);\n    } else if (rootIsInDom && rootContainsTarget) {\n      // If the new entry intersection ratio has crossed any of the\n      // thresholds, add a new entry.\n      if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n        this._queuedEntries.push(newEntry);\n      }\n    } else {\n      // If the root is not in the DOM or target is not contained within\n      // root but the previous entry for this target had an intersection,\n      // add a new record indicating removal.\n      if (oldEntry && oldEntry.isIntersecting) {\n        this._queuedEntries.push(newEntry);\n      }\n    }\n  }, this);\n\n  if (this._queuedEntries.length) {\n    this._callback(this.takeRecords(), this);\n  }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n *     expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n *     intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n    function(target, rootRect) {\n\n  // If the element isn't displayed, an intersection can't happen.\n  if (window.getComputedStyle(target).display == 'none') return;\n\n  var targetRect = getBoundingClientRect(target);\n  var intersectionRect = targetRect;\n  var parent = getParentNode(target);\n  var atRoot = false;\n\n  while (!atRoot) {\n    var parentRect = null;\n    var parentComputedStyle = parent.nodeType == 1 ?\n        window.getComputedStyle(parent) : {};\n\n    // If the parent isn't displayed, an intersection can't happen.\n    if (parentComputedStyle.display == 'none') return;\n\n    if (parent == this.root || parent == document) {\n      atRoot = true;\n      parentRect = rootRect;\n    } else {\n      // If the element has a non-visible overflow, and it's not the <body>\n      // or <html> element, update the intersection rect.\n      // Note: <body> and <html> cannot be clipped to a rect that's not also\n      // the document rect, so no need to compute a new intersection.\n      if (parent != document.body &&\n          parent != document.documentElement &&\n          parentComputedStyle.overflow != 'visible') {\n        parentRect = getBoundingClientRect(parent);\n      }\n    }\n\n    // If either of the above conditionals set a new parentRect,\n    // calculate new intersection data.\n    if (parentRect) {\n      intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n      if (!intersectionRect) break;\n    }\n    parent = getParentNode(parent);\n  }\n  return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n  var rootRect;\n  if (this.root) {\n    rootRect = getBoundingClientRect(this.root);\n  } else {\n    // Use <html>/<body> instead of window since scroll bars affect size.\n    var html = document.documentElement;\n    var body = document.body;\n    rootRect = {\n      top: 0,\n      left: 0,\n      right: html.clientWidth || body.clientWidth,\n      width: html.clientWidth || body.clientWidth,\n      bottom: html.clientHeight || body.clientHeight,\n      height: html.clientHeight || body.clientHeight\n    };\n  }\n  return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n  var margins = this._rootMarginValues.map(function(margin, i) {\n    return margin.unit == 'px' ? margin.value :\n        margin.value * (i % 2 ? rect.width : rect.height) / 100;\n  });\n  var newRect = {\n    top: rect.top - margins[0],\n    right: rect.right + margins[1],\n    bottom: rect.bottom + margins[2],\n    left: rect.left - margins[3]\n  };\n  newRect.width = newRect.right - newRect.left;\n  newRect.height = newRect.bottom - newRect.top;\n\n  return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n *    particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n *    particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n    function(oldEntry, newEntry) {\n\n  // To make comparing easier, an entry that has a ratio of 0\n  // but does not actually intersect is given a value of -1\n  var oldRatio = oldEntry && oldEntry.isIntersecting ?\n      oldEntry.intersectionRatio || 0 : -1;\n  var newRatio = newEntry.isIntersecting ?\n      newEntry.intersectionRatio || 0 : -1;\n\n  // Ignore unchanged ratios\n  if (oldRatio === newRatio) return;\n\n  for (var i = 0; i < this.thresholds.length; i++) {\n    var threshold = this.thresholds[i];\n\n    // Return true if an entry matches a threshold or if the new ratio\n    // and the old ratio are on the opposite sides of a threshold.\n    if (threshold == oldRatio || threshold == newRatio ||\n        threshold < oldRatio !== threshold < newRatio) {\n      return true;\n    }\n  }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n  return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n  return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n  if (registry.indexOf(this) < 0) {\n    registry.push(this);\n  }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n  var index = registry.indexOf(this);\n  if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n  return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its executiong, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n *     function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n  var timer = null;\n  return function () {\n    if (!timer) {\n      timer = setTimeout(function() {\n        fn();\n        timer = null;\n      }, timeout);\n    }\n  };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n *     phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.addEventListener == 'function') {\n    node.addEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.attachEvent == 'function') {\n    node.attachEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n *     flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.removeEventListener == 'function') {\n    node.removeEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.detatchEvent == 'function') {\n    node.detatchEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n *     is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n  var top = Math.max(rect1.top, rect2.top);\n  var bottom = Math.min(rect1.bottom, rect2.bottom);\n  var left = Math.max(rect1.left, rect2.left);\n  var right = Math.min(rect1.right, rect2.right);\n  var width = right - left;\n  var height = bottom - top;\n\n  return (width >= 0 && height >= 0) && {\n    top: top,\n    bottom: bottom,\n    left: left,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n  var rect;\n\n  try {\n    rect = el.getBoundingClientRect();\n  } catch (err) {\n    // Ignore Windows 7 IE11 \"Unspecified error\"\n    // https://github.com/w3c/IntersectionObserver/pull/205\n  }\n\n  if (!rect) return getEmptyRect();\n\n  // Older IE\n  if (!(rect.width && rect.height)) {\n    rect = {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n  }\n  return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n  return {\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    width: 0,\n    height: 0\n  };\n}\n\n/**\n * Checks to see if a parent element contains a child elemnt (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n  var node = child;\n  while (node) {\n    if (node == parent) return true;\n\n    node = getParentNode(node);\n  }\n  return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n  var parent = node.parentNode;\n\n  if (parent && parent.nodeType == 11 && parent.host) {\n    // If the parent is a shadow root, return the host element.\n    return parent.host;\n  }\n  return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n\n/*!\n * rimg v2.1.4\n * (c) 2018 Pixel Union\n */\n/**\n * The default template render function. Turns a template string into an image\n * URL.\n *\n * @param {String} template\n * @param {Size} size\n * @returns {String}\n */\nfunction defaultTemplateRender(template, size) {\n  return template.replace('{size}', size.width + 'x' + size.height);\n}\n\n/**\n * @type Settings\n */\nvar defaults = {\n  scale: 1,\n  template: false,\n  templateRender: defaultTemplateRender,\n  max: { width: Infinity, height: Infinity },\n  round: 32,\n  placeholder: false,\n  crop: null\n};\n\n/**\n * Get a data attribute value from an element, with a default fallback and\n * sanitization step.\n *\n * @param {Element} el\n *\n * @param {String} name\n *        The data attribute name.\n *\n * @param {Object} options\n *        An object holding fallback values if the data attribute does not\n *        exist. If this object doesn't have the property, we further fallback\n *        to our defaults.\n *\n * @param {Function} [sanitize]\n *        A function to sanitize the data attribute value with.\n *\n * @returns {String|*}\n */\nfunction getData(el, name, options, sanitize) {\n  var attr = 'data-rimg-' + name;\n  if (!el.hasAttribute(attr)) return options[name] || defaults[name];\n\n  var value = el.getAttribute(attr);\n\n  return sanitize ? sanitize(value) : value;\n}\n\n/**\n * Sanitize data attributes that represent a size (in the form of `10x10`).\n *\n * @param {String} value\n * @returns {Object} An object with `width` and `height` properties.\n */\nfunction parseSize(value) {\n  value = value.split('x');\n  return { width: parseInt(value[0], 10), height: parseInt(value[1], 10) };\n}\n\n/**\n * Loads information about an element.\n *\n * Options can be set on the element itself using data attributes, or through\n * the `options` parameter. Data attributes take priority.\n *\n * @param {HTMLElement} el\n * @param {Settings} options\n * @returns {Item}\n */\nfunction parseItem(el) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var isImage = el.hasAttribute('data-rimg-template');\n\n  /**\n   * @typedef {Settings} Item\n   */\n  return {\n    el: el,\n\n    // Type of element\n    isImage: isImage,\n    isBackgroundImage: isImage && el.tagName !== 'IMG',\n\n    // Image scale\n    scale: getData(el, 'scale', options),\n\n    // Device density\n    density: window.devicePixelRatio || 1,\n\n    // Image template URL\n    template: getData(el, 'template', options),\n    templateRender: options.templateRender || defaults.templateRender,\n\n    // Maximum image dimensions\n    max: getData(el, 'max', options, parseSize),\n\n    // Round image dimensions to the nearest multiple\n    round: getData(el, 'round', options),\n\n    // Placeholder image dimensions\n    placeholder: getData(el, 'placeholder', options, parseSize),\n\n    // Crop value; null if image is uncropped, otherwise equal to the Shopify crop parameter ('center', 'top', etc.)\n    crop: getData(el, 'crop', options, function (value) {\n      return value === '' ? null : value;\n    })\n  };\n}\n\n/**\n * Round to the nearest multiple.\n *\n * This is so we don't tax the image server too much.\n *\n * @param {Number} size The size, in pixels.\n * @param {Number} [multiple] The multiple to round to the nearest.\n * @param {Number} [maxLimit] Maximum allowed value - value to return if rounded multiple is above this limit\n * @returns {Number}\n */\nfunction roundSize(size) {\n  var multiple = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n  var maxLimit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity;\n\n  return size === 0 ? multiple : Math.min(Math.ceil(size / multiple) * multiple, maxLimit);\n}\n\n/**\n * Get the size of an element.\n *\n * If it is too small, it's parent element is checked, and so on. This helps\n * avoid the situation where an element doesn't have a size yet or is positioned\n * out of the layout.\n *\n * @param {HTMLElement} el\n * @return {Object} size\n * @return {Number} size.width The width, in pixels.\n * @return {Number} size.height The height, in pixels.\n */\nfunction getElementSize(el) {\n  var size = { width: 0, height: 0 };\n\n  while (el) {\n    size.width = el.offsetWidth;\n    size.height = el.offsetHeight;\n    if (size.width > 20 && size.height > 20) break;\n    el = el.parentNode;\n  }\n\n  return size;\n}\n\n/**\n * Trigger a custom event.\n *\n * Note: this approach is deprecated, but still required to support older\n * browsers such as IE 10.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events\n *\n * @param {HTMLElement} el\n *        The element to trigger the event on.\n *\n * @param {String} name\n *        The event name.\n *\n * @returns {Boolean}\n *          True if the event was canceled.\n */\nfunction trigger(el, name) {\n  var event = document.createEvent('Event');\n  event.initEvent(name, true, true);\n  return !el.dispatchEvent(event);\n}\n\n/**\n * Return the maximum supported density of the image, given the container.\n *\n * @param {Item} item\n * @param {Size} size\n */\nfunction supportedDensity(item, size) {\n  return Math.min(Math.min(Math.max(item.max.width / size.width, 1), item.density), Math.min(Math.max(item.max.height / size.height, 1), item.density)).toFixed(2);\n}\n\n/**\n * Set the image URL on the element. Supports background images and `srcset`.\n *\n * @param {Item} item\n * @param {Size} size\n * @param {Boolean} isPlaceholder\n */\nfunction setImage(item, size, isPlaceholder, onLoad) {\n  var render = item.templateRender;\n  var density = isPlaceholder ? 1 : supportedDensity(item, size);\n  var round = isPlaceholder ? 1 : item.round;\n\n  // Calculate the final display size, taking into account the image's\n  // maximum dimensions.\n  var targetWidth = size.width * density;\n  var targetHeight = size.height * density;\n\n  var displaySize = void 0;\n\n  if (item.crop) {\n    displaySize = {\n      width: roundSize(targetWidth, round, item.max.width),\n      height: roundSize(targetHeight, round, item.max.height)\n    };\n  } else {\n    // Shopify serves images clamped by the requested dimensions (fitted to the smallest dimension).\n    // To get the desired and expected pixel density we need to request cover dimensions (fitted to largest dimension).\n    // This isn't a problem with cropped images which are served at the exact dimension requested.\n    var containerAspectRatio = size.width / size.height;\n    var imageAspectRatio = item.max.width / item.max.height;\n\n    if (containerAspectRatio > imageAspectRatio) {\n      // fit width\n      displaySize = {\n        width: roundSize(targetWidth, round, item.max.width),\n        height: roundSize(targetWidth / imageAspectRatio, round, item.max.height)\n      };\n    } else {\n      // fit height\n      displaySize = {\n        width: roundSize(targetHeight * imageAspectRatio, round, item.max.width),\n        height: roundSize(targetHeight, round, item.max.height)\n      };\n    }\n  }\n\n  var url = render(item.template, displaySize);\n\n  // On load callback\n  var image = new Image();\n  image.onload = onLoad;\n  image.src = url;\n\n  // Set image\n  if (item.isBackgroundImage) {\n    item.el.style.backgroundImage = 'url(\\'' + url + '\\')';\n  } else {\n    item.el.setAttribute('srcset', url + ' ' + density + 'x');\n  }\n}\n\n/**\n * Load the image, set loaded status, and trigger the load event.\n *\n * @fires rimg:load\n * @fires rimg:error\n * @param {Item} item\n * @param {Size} size\n */\nfunction loadFullImage(item, size) {\n  var el = item.el;\n\n  setImage(item, size, false, function (event) {\n    if (event.type === 'load') {\n      el.setAttribute('data-rimg', 'loaded');\n    } else {\n      el.setAttribute('data-rimg', 'error');\n      trigger(el, 'rimg:error');\n    }\n\n    trigger(el, 'rimg:load');\n  });\n}\n\n/**\n * Load in a responsive image.\n *\n * Sets the image's `srcset` attribute to the final image URLs, calculated based\n * on the actual size the image is being shown at.\n *\n * @fires rimg:loading\n *        The image URLs have been set and we are waiting for them to load.\n *\n * @fires rimg:loaded\n *        The final image has loaded.\n *\n * @fires rimg:error\n *        The final image failed loading.\n *\n * @param {Item} item\n */\nfunction loadImage(item) {\n  var el = item.el;\n\n  // Already loaded?\n  var status = el.getAttribute('data-rimg');\n  if (status === 'loading' || status === 'loaded') return;\n\n  // Is the SVG loaded?\n  if (!el.complete && !item.isBackgroundImage) {\n    // Wait for the load event, then call load image\n    el.addEventListener('load', function cb() {\n      el.removeEventListener('load', cb);\n      loadImage(item);\n    });\n\n    return;\n  }\n\n  // Trigger loading event, and stop if cancelled\n  if (trigger(el, 'rimg:loading')) return;\n\n  // Mark as loading\n  el.setAttribute('data-rimg', 'loading');\n\n  // Get element size. This is used as the ideal display size.\n  var size = getElementSize(item.el);\n\n  size.width *= item.scale;\n  size.height *= item.scale;\n\n  if (item.placeholder) {\n    // Load a placeholder image first, followed by the full image. Force the\n    // element to keep its dimensions while it loads. If the image is smaller\n    // than the element size, use the image's size. Density is taken into account\n    // for HiDPI devices to avoid blurry images.\n    if (!item.isBackgroundImage) {\n      el.setAttribute('width', Math.min(Math.floor(item.max.width / item.density), size.width));\n      el.setAttribute('height', Math.min(Math.floor(item.max.height / item.density), size.height));\n    }\n\n    setImage(item, item.placeholder, true, function () {\n      return loadFullImage(item, size);\n    });\n  } else {\n    loadFullImage(item, size);\n  }\n}\n\n/**\n * Prepare an element to be displayed on the screen.\n *\n * Images have special logic applied to them to swap out the different sources.\n *\n * @fires rimg:enter\n *        The element is entering the viewport.\n *\n * @param {HTMLElement} el\n * @param {Settings} options\n */\nfunction load(el, options) {\n  if (!el) return;\n  trigger(el, 'rimg:enter');\n\n  var item = parseItem(el, options);\n\n  if (item.isImage) {\n    if (!item.isBackgroundImage) {\n      el.setAttribute('data-rimg-template-svg', el.getAttribute('srcset'));\n    }\n\n    loadImage(item);\n  }\n}\n\n/**\n * Reset an element's state so that its image can be recalculated.\n *\n * @fires rimg:update\n *        The element is being updated.\n *\n * @param {HTMLElement} el\n * @param {Settings} options\n */\nfunction update(el, options) {\n  if (!el) return;\n  trigger(el, 'rimg:update');\n\n  var item = parseItem(el, options);\n\n  if (item.isImage) {\n    if (!item.isBackgroundImage) {\n      el.setAttribute('data-rimg', 'lazy');\n      el.setAttribute('srcset', el.getAttribute('data-rimg-template-svg'));\n    }\n\n    loadImage(item);\n  }\n}\n\n/**\n * Returns true if the element is within the viewport.\n * @param {HTMLElement} el\n * @returns {Boolean}\n */\nfunction inViewport(el) {\n  var root = document.documentElement;\n  var width = Math.min(root.clientWidth, window.innerWidth);\n  var height = Math.min(root.clientHeight, window.innerHeight);\n  var rect = el.getBoundingClientRect();\n\n  return rect.bottom >= 0 && rect.right >= 0 && rect.top <= height && rect.left <= width;\n}\n\n/**\n * @typedef {Object} Size\n * @property {Number} width\n * @property {Number} height\n */\n\n/**\n * A function to turn a template string into a URL.\n *\n * @callback TemplateRenderer\n * @param {String} template\n * @param {Size} size\n * @returns {String}\n */\n\n/**\n * @typedef {Object} Settings\n *\n * @property {String} [template]\n *           A template string used to generate URLs for an image. This allows us to\n *           dynamically load images with sizes to match the container's size.\n *\n * @property {TemplateRenderer} [templateRender]\n *           A function to turn a template string into a URL.\n *\n * @property {Size} [max]\n *           The maximum available size for the image. This ensures we don't\n *           try to load an image larger than is possible.\n * \n * @property {Number} [scale]\n *           A number to scale the final image dimensions by. \n *           Only applies to lazy-loaded images. Defaults to 1.\n *\n * @property {Number} [round]\n *           Round image dimensions to the nearest multiple. This is intended to\n *           tax the image server less by lowering the number of possible image\n *           sizes requested.\n *\n * @property {Size} [placeholder]\n *           The size of the lo-fi image to load before the full image.\n * \n * @property {String} [crop]\n *           Crop value; null if image is uncropped, otherwise equal \n *           to the Shopify crop parameter ('center', 'top', etc.).\n */\n\n/**\n * Initialize the responsive image handler.\n *\n * @param {String|HTMLElement|NodeList} selector\n *        The CSS selector, element, or elements to track for lazy-loading.\n *\n * @param {Settings} options\n *\n * @returns {PublicApi}\n */\nfunction rimg$1() {\n  var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"lazy\"]';\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  // Intersections\n  var io = new IntersectionObserver(function (entries) {\n    entries.forEach(function (entry) {\n      if (entry.isIntersecting || entry.intersectionRatio > 0) {\n        io.unobserve(entry.target);\n        load(entry.target, options);\n      }\n    });\n  }, {\n    // Watch the viewport, with 20% vertical margins\n    rootMargin: '20% 0px'\n  });\n\n  /**\n   * @typedef {Object} PublicApi\n   */\n  var api = {\n    /**\n     * Track a new selector, element, or nodelist for lazy-loading.\n     * @type Function\n     * @param {String|HTMLElement|NodeList} selector\n     */\n    track: function track() {\n      var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"lazy\"]';\n\n      var els = querySelector(selector);\n\n      for (var i = 0; i < els.length; i++) {\n        // If an element is already in the viewport, load it right away. This\n        // fixes a race-condition with dynamically added elements.\n        if (inViewport(els[i])) {\n          load(els[i], options);\n        } else {\n          io.observe(els[i]);\n        }\n      }\n    },\n\n\n    /**\n     * Update element(s) that have already been loaded to force their images\n     * to be recalculated.\n     * @type Function\n     * @param {String|HTMLElement|NodeList} selector\n     */\n    update: function update$$1() {\n      var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"loaded\"]';\n\n      var els = querySelector(selector);\n      for (var i = 0; i < els.length; i++) {\n        update(els[i], options);\n      }\n    },\n\n\n    /**\n     * Stop tracking element(s) for lazy-loading.\n     * @type Function\n     * @param {String|HTMLElement|NodeList} selector\n     */\n    untrack: function untrack() {\n      var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg]';\n\n      var els = querySelector(selector);\n      for (var i = 0; i < els.length; i++) {\n        io.unobserve(els[i]);\n      }\n    },\n\n\n    /**\n     * Unload all event handlers and observers.\n     * @type Function\n     */\n    unload: function unload() {\n      io.disconnect();\n    }\n  };\n\n  // Add initial elements\n  api.track(selector);\n\n  return api;\n}\n\n/**\n * Finds a group of elements on the page.\n *\n * @param {String|HTMLElement|NodeList} selector\n * @returns {Object} An array-like object.\n */\nfunction querySelector(selector) {\n  if (typeof selector === 'string') {\n    return document.querySelectorAll(selector);\n  }\n\n  if (selector instanceof HTMLElement) {\n    return [selector];\n  }\n\n  if (selector instanceof NodeList) {\n    return selector;\n  }\n\n  return [];\n}\n\n/*!\n * rimg-shopify v2.2.3\n * (c) 2018 Pixel Union\n */\n/**\n * Polyfill for Element.matches().\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\nif (!Element.prototype.matches) {\n  Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {\n    var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n        i = matches.length;\n    while (--i >= 0 && matches.item(i) !== this) {}\n    return i > -1;\n  };\n}\n\nvar state = {\n  init: init,\n  watch: watch,\n  unwatch: unwatch\n};\n\nfunction init() {\n  var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"lazy\"]';\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  state.selector = selector;\n  state.instance = rimg$1(selector, options);\n  state.loadedWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n  // Listen for Shopify theme editor events\n  document.addEventListener('shopify:section:load', function (event) {\n    return watch(event.target);\n  });\n\n  window.addEventListener('resize', function () {\n    return _update();\n  });\n\n  document.addEventListener('shopify:section:unload', function (event) {\n    return unwatch(event.target);\n  });\n\n  // Listen for custom events to allow themes to hook into rimg\n  document.addEventListener('theme:rimg:watch', function (event) {\n    return watch(event.target);\n  });\n\n  document.addEventListener('theme:rimg:unwatch', function (event) {\n    return unwatch(event.target);\n  });\n\n  // Support custom events triggered through jQuery\n  // See: https://github.com/jquery/jquery/issues/3347\n  if (window.jQuery) {\n    jQuery(document).on({\n      'theme:rimg:watch': function themeRimgWatch(event) {\n        return watch(event.target);\n      },\n      'theme:rimg:unwatch': function themeRimgUnwatch(event) {\n        return unwatch(event.target);\n      }\n    });\n  }\n}\n\n/**\n * Track an element, and its children.\n *\n * @param {HTMLElement} el\n */\nfunction watch(el) {\n  // Track element\n  if (typeof el.matches === 'function' && el.matches(state.selector)) {\n    state.instance.track(el);\n  }\n\n  // Track element's children\n  state.instance.track(el.querySelectorAll(state.selector));\n}\n\n/**\n * Untrack an element, and its children\n *\n * @param {HTMLElement} el\n * @private\n */\nfunction unwatch(el) {\n  // Untrack element's children\n  state.instance.untrack(el.querySelectorAll(state.selector));\n\n  // Untrack element\n  if (typeof el.matches === 'function' && el.matches(state.selector)) {\n    state.instance.untrack(el);\n  }\n}\n\n/**\n * Update an element, and its children.\n *\n * @param {HTMLElement} el\n */\nfunction _update() {\n  var currentWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n  // Return if we're not 2x smaller, or larger than the existing loading size\n  if (currentWidth / state.loadedWidth > 0.5 && currentWidth / state.loadedWidth < 2) {\n    return;\n  }\n\n  state.loadedWidth = currentWidth;\n  state.instance.update();\n}\n\nvar asyncGenerator = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\nvar Quantity = function () {\n  function Quantity(el) {\n    classCallCheck(this, Quantity);\n\n    this.$el = $(el);\n    this.$inputParent = this.$el.find('.form-field--qty-input');\n    this.$input = this.$el.find('[data-quantity-input]');\n    this.$selectParent = this.$el.find('.form-field--qty-select');\n    this.$select = this.$el.find('[data-quantity-select]');\n\n    this._watchSelect = this._watchSelect.bind(this);\n    this._watchInput = this._watchInput.bind(this);\n\n    this.$select.on('change.quantity', this._watchSelect);\n    this.$input.on('change.quantity', this._watchInput);\n  }\n\n  createClass(Quantity, [{\n    key: 'unload',\n    value: function unload() {\n      this.$el.off('.quantity');\n    }\n  }, {\n    key: '_validateValue',\n    value: function _validateValue(event) {\n      var baseValue = parseInt(event.currentTarget.value, 10);\n\n      return isNaN(baseValue) ? 1 : baseValue;\n    }\n  }, {\n    key: '_watchSelect',\n    value: function _watchSelect(event) {\n      var value = this._validateValue(event);\n\n      // Update input to match select\n      this.$input.val(value).trigger('change');\n\n      // Switch to quantity input when 10 or more\n      if (value >= 10) {\n        this.$inputParent.removeClass('hidden').addClass('visible');\n\n        this.$input.focus().removeAttr('tabindex').select();\n\n        this.$selectParent.removeClass('visible').addClass('hidden');\n\n        this.$select.attr('tabindex', '-1');\n      }\n    }\n  }, {\n    key: '_watchInput',\n    value: function _watchInput(event) {\n      this.$input.val(this._validateValue(event));\n    }\n  }]);\n  return Quantity;\n}();\n\nvar Forms = function () {\n  function Forms($el) {\n    var _this = this;\n\n    var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.form-field-input';\n    classCallCheck(this, Forms);\n\n    this.$el = $el;\n    this.filledClass = 'form-field-filled';\n    this.fieldSelector = selector;\n\n    this.quantityItems = [];\n    this.$quantityWrapper = this.$el.find('[data-quantity-wrapper]');\n\n    this._toggleFilled = this._toggleFilled.bind(this);\n    this.$el.on('focus.forms', this.fieldSelector, this._toggleFilled);\n    this.$el.on('blur.forms', this.fieldSelector, this._toggleFilled);\n\n    this._checkFilled();\n\n    if (this.$quantityWrapper.length) {\n      this.$quantityWrapper.each(function (i, el) {\n        _this.quantityItems.push(new Quantity(el));\n      });\n    }\n  }\n\n  createClass(Forms, [{\n    key: 'unload',\n    value: function unload() {\n      this.$el.off('.forms');\n\n      this.quantityItems.forEach(function (quantityItem) {\n        quantityItem.unload();\n      });\n    }\n  }, {\n    key: '_checkFilled',\n    value: function _checkFilled() {\n      var _this2 = this;\n\n      this.$el.find(this.fieldSelector).each(function (i, el) {\n        if (jquery$1(el).hasClass(_this2.filledClass)) return;\n\n        _this2._toggleFilled(null, el);\n      });\n    }\n  }, {\n    key: '_toggleFilled',\n    value: function _toggleFilled() {\n      var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var $el = event ? jquery$1(event.currentTarget) : jquery$1(el);\n      var value = $el.val();\n\n      var isFilled = value && value.length > 0 ? true : false;\n\n      $el.toggleClass(this.filledClass, isFilled);\n    }\n  }]);\n  return Forms;\n}();\n\nvar Account = function () {\n  function Account() {\n    classCallCheck(this, Account);\n\n    this.$accountContents = jquery$1('[data-template-account]');\n    this.$loginContent = jquery$1('[data-template-account-login]');\n    this.$addressesContent = jquery$1('[data-template-account-addresses]');\n    this.$addressButtonFocus = null;\n\n    this._loginToggle = this._loginToggle.bind(this);\n\n    if (this.$loginContent.length) {\n      this._initLoginPage();\n    }\n\n    if (this.$addressesContent.length) {\n      this._initAddressPage();\n    }\n\n    if (this.$accountContents.length) {\n      this._init();\n    }\n  }\n\n  createClass(Account, [{\n    key: '_init',\n    value: function _init() {\n      new Forms(this.$accountContents);\n    }\n  }, {\n    key: '_initLoginPage',\n    value: function _initLoginPage() {\n      this.$loginToggle = this.$loginContent.find('[data-login-toggle]');\n      this.$login = this.$loginContent.find('[data-account-login-main]');\n      this.$recovery = this.$loginContent.find('[data-account-login-recovery]');\n      this.$recoveryHasMessage = this.$recovery.find('[data-recovery-has-message]');\n\n      this.$loginToggle.on('click', this._loginToggle);\n\n      if (this.$recoveryHasMessage.length) {\n        this._loginToggle();\n      }\n    }\n  }, {\n    key: '_loginToggle',\n    value: function _loginToggle() {\n      var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      this.$login.toggleClass('visible');\n      this.$recovery.toggleClass('visible');\n    }\n  }, {\n    key: '_initAddressPage',\n    value: function _initAddressPage() {\n      var _this = this;\n\n      var $customerAddresses = this.$addressesContent.find('[data-address-id]');\n\n      this.$addressesContent.on('click', '[data-edit-address]', function (event) {\n        var $target = jquery$1(event.currentTarget);\n        var itemId = $target.attr('data-edit-address');\n\n        $customerAddresses.removeClass('visible');\n        _this.$addressButtonFocus = $target;\n\n        jquery$1('[data-address-id=\"' + itemId + '\"]').addClass('visible').find('.form-field-input').eq(0).focus();\n      });\n\n      this.$addressesContent.on('click', '[data-edit-address-cancel]', function () {\n        $customerAddresses.removeClass('visible');\n        jquery$1('[data-address-id=\"new\"]').addClass('visible');\n\n        // Return focus to last used button\n        _this.$addressButtonFocus.focus();\n        _this.$addressButtonFocus = null;\n      });\n\n      this.$addressesContent.on('click', '[data-delete-address]', function (event) {\n        var itemId = jquery$1(event.target).attr('data-delete-address');\n        Shopify.CustomerAddress.destroy(itemId, '');\n      });\n\n      $customerAddresses.each(function (i, el) {\n        var id = jquery$1(el).attr('data-address-id');\n\n        var countryEl = 'customer_addr_' + id + '_country';\n        var provinceEl = 'customer_addr_' + id + '_province';\n        var options = { hideElement: 'address_province_container_' + id };\n\n        // Initiate provinces for address forms\n        new Shopify.CountryProvinceSelector(countryEl, provinceEl, options);\n      });\n    }\n  }]);\n  return Account;\n}();\n\nvar Contact = function Contact() {\n  classCallCheck(this, Contact);\n\n  this.$contactContents = jquery$1('[data-template-contact]');\n\n  if (this.$contactContents.length) {\n    new Forms(this.$contactContents);\n  }\n};\n\n'use strict';\n\nvar selectors = [\n\t'iframe[src*=\"player.vimeo.com\"]',\n\t'iframe[src*=\"youtube.com\"]',\n\t'iframe[src*=\"youtube-nocookie.com\"]',\n\t'iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n\t'object'\n];\n\nvar css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';\n\nvar fitvids = function (parentSelector, opts) {\n\tparentSelector = parentSelector || 'body';\n\topts = opts || {};\n\n\tif (isObject(parentSelector)) {\n\t\topts = parentSelector;\n\t\tparentSelector = 'body';\n\t}\n\n\topts.ignore = opts.ignore || '';\n\topts.players = opts.players || '';\n\n\tvar containers = queryAll(parentSelector);\n\tif (!hasLength(containers)) return\n\n\tif (!document.getElementById('fit-vids-style')) {\n\t\tvar head = document.head || document.getElementsByTagName('head')[0];\n\t\thead.appendChild(styles());\n\t}\n\n\tvar custom = toSelectorArray(opts.players) || [];\n\tvar ignored = toSelectorArray(opts.ignore) || [];\n\tvar selector = selectors\n\t\t.filter(notIgnored(ignored))\n\t\t.concat(custom)\n\t\t.join();\n\n\tif (!hasLength(selector)) return\n\n\tcontainers.forEach(function (container) {\n\t\tvar videos = queryAll(container, selector);\n\t\tvideos.forEach(function (video) {\n\t\t\twrap(video);\n\t\t});\n\t});\n};\n\nfunction queryAll (el, selector) {\n\tif (typeof el === 'string') {\n\t\tselector = el;\n\t\tel = document;\n\t}\n\treturn Array.prototype.slice.call(el.querySelectorAll(selector))\n}\n\nfunction toSelectorArray (input) {\n\tif (typeof input === 'string') {\n\t\treturn input.split(',').map(trim).filter(hasLength)\n\t} else if (isArray(input)) {\n\t\treturn flatten(input.map(toSelectorArray).filter(hasLength))\n\t}\n\treturn input || []\n}\n\nfunction wrap (el) {\n\tif (/fluid-width-video-wrapper/.test(el.parentNode.className)) return\n\n\tvar widthAttr = parseInt(el.getAttribute('width'), 10);\n\tvar heightAttr = parseInt(el.getAttribute('height'), 10);\n\n\tvar width = !isNaN(widthAttr) ? widthAttr : el.clientWidth;\n\tvar height = !isNaN(heightAttr) ? heightAttr : el.clientHeight;\n\tvar aspect = height / width;\n\n\tel.removeAttribute('width');\n\tel.removeAttribute('height');\n\n\tvar wrapper = document.createElement('div');\n\tel.parentNode.insertBefore(wrapper, el);\n\twrapper.className = 'fluid-width-video-wrapper';\n\twrapper.style.paddingTop = (aspect * 100) + '%';\n\twrapper.appendChild(el);\n}\n\nfunction styles () {\n\tvar div = document.createElement('div');\n\tdiv.innerHTML = '<p>x</p><style id=\"fit-vids-style\">' + css + '</style>';\n\treturn div.childNodes[1]\n}\n\nfunction notIgnored (ignored) {\n\tif (ignored.length < 1) {\n\t\treturn function () {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn function (selector) {\n\t\treturn ignored.indexOf(selector) === -1\n\t}\n}\n\nfunction hasLength (input) {\n\treturn input.length > 0\n}\n\nfunction trim (str) {\n\treturn str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction flatten (input) {\n\treturn [].concat.apply([], input)\n}\n\nfunction isObject (input) {\n\treturn Object.prototype.toString.call(input) === '[object Object]'\n}\n\nfunction isArray (input) {\n\treturn Object.prototype.toString.call(input) === '[object Array]'\n}\n\n'use strict';\n\n// forEach method, could be shipped as part of an Object Literal/Module\nfunction forEach(array, callback, scope) {\n  var index = 0;\n\n  for (index = 0; index < array.length; index += 1) {\n    callback.call(scope, array[index], index); // passes back stuff we need\n  }\n}\n\nfunction hasClass(el, className) {\n  var regex = new RegExp('^' + className + '| +' + className, 'g');\n\n  return el.className.match(regex);\n}\n\nfunction addClass(el, className) {\n  // Return if it already has the className\n  if (hasClass(el, className)) return;\n\n  el.className += ' ' + className;\n}\n\nfunction removeClass(el, className) {\n  // Return if it doesn't already have the className\n  if (!hasClass(el, className)) return;\n\n  var regex = new RegExp('^' + className + '| +' + className, 'g');\n\n  el.className = el.className.replace(regex, '');\n}\n\nfunction toggleClass(el, className) {\n  if (hasClass(el, className)) {\n    removeClass(el, className);\n  } else {\n    addClass(el, className);\n  }\n}\n\nfunction findPairingFromPairingTrigger(pairings, pairingTrigger) {\n  var foundPairing = null;\n\n  forEach(pairings, function (pairing) {\n    if (pairing.trigger === pairingTrigger) {\n      foundPairing = pairing;\n    }\n  });\n\n  return foundPairing;\n}\n\n/**\n * See {@link https://stackoverflow.com/revisions/2117523/11 Stack Overflow}\n * An RFC4122 v4 compliant uuid solution\n */\nfunction uuidv4() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0;\n    var v = c === 'x' ? r : r & 0x3 | 0x8;\n\n    return v.toString(16);\n  });\n}\n\nfunction init$1(groupedContent) {\n  var triggers = groupedContent.triggers;\n  var pairings = groupedContent.pairings;\n\n  triggers.setAttribute('role', 'tablist');\n\n  forEach(pairings, function (pairing, index) {\n    pairing.trigger.setAttribute('role', 'tab');\n    pairing.trigger.setAttribute('aria-controls', groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content');\n\n    if (pairing.trigger.children.length > 0) {\n      forEach(pairing.trigger.children, function (child) {\n        child.setAttribute('tabIndex', '-1');\n      });\n    }\n\n    if (hasClass(pairing.trigger, 'active')) {\n      pairing.trigger.setAttribute('aria-selected', 'true');\n      pairing.trigger.setAttribute('tabIndex', '0');\n    } else {\n      pairing.trigger.setAttribute('tabIndex', '-1');\n    }\n\n    pairing.content.id = groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content';\n    pairing.content.setAttribute('role', 'tabpanel');\n\n    if (!hasClass(pairing.content, 'active')) {\n      pairing.content.setAttribute('aria-hidden', 'true');\n    }\n  });\n}\n\nfunction update$1(groupedContent) {\n  var pairings = groupedContent.pairings;\n\n  forEach(pairings, function (pairing) {\n    pairing.trigger.removeAttribute('aria-selected');\n    pairing.content.removeAttribute('aria-hidden');\n\n    if (hasClass(pairing.trigger, 'active')) {\n      pairing.trigger.setAttribute('aria-selected', 'true');\n      pairing.trigger.setAttribute('tabIndex', '0');\n    } else {\n      pairing.trigger.setAttribute('tabIndex', '-1');\n    }\n\n    if (!hasClass(pairing.content, 'active')) {\n      pairing.content.setAttribute('aria-hidden', 'true');\n    }\n  });\n}\n\nvar a11y = {\n  init: init$1,\n  update: update$1\n};\n\nvar asyncGenerator$1 = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\nvar classCallCheck$1 = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass$1 = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n/** A class for creating, managing, and destroying groupable content as tabs. */\n\nvar TabsLayout = function () {\n  function TabsLayout(groupedContent) {\n    classCallCheck$1(this, TabsLayout);\n\n    this.groupedContent = groupedContent;\n    this.pairings = groupedContent.pairings;\n    this.events = [];\n\n    this._handleKeydown = this._handleKeydown.bind(this);\n    this._handleClick = this._handleClick.bind(this);\n\n    this._init();\n    a11y.init(this.groupedContent);\n  }\n\n  createClass$1(TabsLayout, [{\n    key: 'unload',\n    value: function unload() {\n      forEach(this.events, function (event) {\n        event.trigger.removeEventListener(event.type, event.fn);\n      });\n    }\n  }, {\n    key: '_init',\n    value: function _init() {\n      var _this = this;\n\n      var existingActive = false;\n\n      forEach(this.pairings, function (pairing) {\n        var trigger = pairing.trigger;\n\n        if (hasClass(trigger, 'active')) {\n          existingActive = true;\n        }\n\n        trigger.addEventListener('keydown', _this._handleKeydown);\n        trigger.addEventListener('click', _this._handleClick);\n\n        _this.events.push({\n          trigger: trigger,\n          type: 'keydown',\n          fn: _this._handleKeydown\n        });\n\n        _this.events.push({\n          trigger: trigger,\n          type: 'click',\n          fn: _this._handleClick\n        });\n      });\n\n      if (!existingActive) {\n        addClass(this.pairings[0].trigger, 'active');\n        addClass(this.pairings[0].content, 'active');\n      }\n    }\n  }, {\n    key: '_handleKeydown',\n    value: function _handleKeydown(event) {\n      var trigger = event.currentTarget;\n      var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n      var pairingIndex = this.pairings.indexOf(pairing);\n      var prevIndex = pairingIndex - 1 < 0 ? this.pairings.length - 1 : pairingIndex - 1;\n      var nextIndex = pairingIndex + 1 >= this.pairings.length ? 0 : pairingIndex + 1;\n\n      var nextPairing = null;\n\n      switch (event.key) {\n        case 'ArrowLeft':\n          nextPairing = this.pairings[prevIndex];\n          break;\n        case 'ArrowRight':\n          nextPairing = this.pairings[nextIndex];\n          break;\n        default:\n          nextPairing = null;\n          break;\n      }\n\n      // Fast exit if we can't find the tab or tabs\n      if (nextPairing === null) return;\n\n      event.preventDefault();\n\n      forEach(this.pairings, function (inactivePairing) {\n        removeClass(inactivePairing.trigger, 'active');\n        removeClass(inactivePairing.content, 'active');\n      });\n\n      addClass(nextPairing.trigger, 'active');\n      addClass(nextPairing.content, 'active');\n\n      nextPairing.trigger.focus();\n\n      a11y.update(this.groupedContent);\n    }\n  }, {\n    key: '_handleClick',\n    value: function _handleClick(event) {\n      var trigger = event.currentTarget;\n      var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n\n      // Fast exit if we can't find the tab or tabs\n      if (pairing === null) return;\n\n      event.preventDefault();\n\n      forEach(this.pairings, function (inactivePairing) {\n        removeClass(inactivePairing.trigger, 'active');\n        removeClass(inactivePairing.content, 'active');\n      });\n\n      addClass(pairing.trigger, 'active');\n      addClass(pairing.content, 'active');\n\n      a11y.update(this.groupedContent);\n    }\n  }]);\n  return TabsLayout;\n}();\n\nfunction init$1$1(groupedContent) {\n  var pairings = groupedContent.pairings;\n\n  forEach(pairings, function (pairing, index) {\n    pairing.trigger.setAttribute('role', 'button');\n    pairing.trigger.setAttribute('aria-controls', groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content');\n    pairing.trigger.setAttribute('tabIndex', '0');\n\n    if (pairing.trigger.children.length > 0) {\n      forEach(pairing.trigger.children, function (child) {\n        child.setAttribute('tabIndex', '-1');\n      });\n    }\n\n    if (hasClass(pairing.trigger, 'active')) {\n      pairing.trigger.setAttribute('aria-expanded', 'true');\n    } else {\n      pairing.trigger.setAttribute('aria-expanded', 'false');\n    }\n\n    pairing.content.id = groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content';\n\n    if (!hasClass(pairing.content, 'active')) {\n      pairing.content.setAttribute('aria-hidden', 'true');\n    }\n  });\n}\n\nfunction update$1$1(groupedContent) {\n  var pairings = groupedContent.pairings;\n\n  forEach(pairings, function (pairing) {\n    pairing.content.removeAttribute('aria-hidden');\n\n    if (hasClass(pairing.trigger, 'active')) {\n      pairing.trigger.setAttribute('aria-expanded', 'true');\n    } else {\n      pairing.trigger.setAttribute('aria-expanded', 'false');\n    }\n\n    if (!hasClass(pairing.content, 'active')) {\n      pairing.content.setAttribute('aria-hidden', 'true');\n    }\n  });\n}\n\nvar a11y$1 = {\n  init: init$1$1,\n  update: update$1$1\n};\n\n/** A class for creating, managing, and destroying groupable content as an accordion. */\n\nvar AccordionLayout = function () {\n  function AccordionLayout(groupedContent) {\n    classCallCheck$1(this, AccordionLayout);\n\n    this.groupedContent = groupedContent;\n    this.pairings = groupedContent.pairings;\n    this.events = [];\n\n    this._handleKeydown = this._handleKeydown.bind(this);\n    this._handleClick = this._handleClick.bind(this);\n\n    this._init(this.pairings);\n    a11y$1.init(this.groupedContent);\n  }\n\n  createClass$1(AccordionLayout, [{\n    key: 'unload',\n    value: function unload() {\n      forEach(this.events, function (event) {\n        event.trigger.removeEventListener(event.type, event.fn);\n      });\n    }\n  }, {\n    key: '_init',\n    value: function _init() {\n      var _this = this;\n\n      forEach(this.pairings, function (pairing) {\n        var trigger = pairing.trigger;\n        var content = pairing.content;\n\n        trigger.parentNode.insertBefore(content, trigger.nextSibling);\n\n        trigger.addEventListener('keydown', _this._handleKeydown);\n        trigger.addEventListener('click', _this._handleClick);\n\n        _this.events.push({\n          trigger: trigger,\n          type: 'keydown',\n          fn: _this._handleKeydown\n        });\n\n        _this.events.push({\n          trigger: trigger,\n          type: 'click',\n          fn: _this._handleClick\n        });\n      });\n\n      this.groupedContent.contents.remove();\n    }\n  }, {\n    key: '_handleKeydown',\n    value: function _handleKeydown(event) {\n      var trigger = event.currentTarget;\n      var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n\n      // Fast exit if enter isn't pressed or we can't find the group\n      if (event.key !== 'Enter' || pairing === null) return;\n\n      event.preventDefault();\n\n      toggleClass(pairing.trigger, 'active');\n      toggleClass(pairing.content, 'active');\n      a11y$1.update(this.groupedContent);\n    }\n  }, {\n    key: '_handleClick',\n    value: function _handleClick(event) {\n      var trigger = event.currentTarget;\n      var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n\n      // Fast exit if we can't find the group\n      if (pairing === null) return;\n\n      event.preventDefault();\n\n      toggleClass(pairing.trigger, 'active');\n      toggleClass(pairing.content, 'active');\n      a11y$1.update(this.groupedContent);\n    }\n  }]);\n  return AccordionLayout;\n}();\n\n/**\n * Returns an array of nodes related to the heading node.\n * @param {node} heading - The heading node to search for content from.\n * @returns {node[]}\n */\nfunction getHeadingContent(heading) {\n  var headingTagNames = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n  var tagNameIndex = headingTagNames.indexOf(heading.tagName);\n  var content = [];\n\n  var sibling = heading.nextElementSibling;\n\n  while (sibling !== null && (headingTagNames.indexOf(sibling.tagName) === -1 || headingTagNames.indexOf(sibling.tagName) > tagNameIndex)) {\n    content.push(sibling);\n\n    sibling = sibling.nextElementSibling;\n  }\n\n  return content;\n}\n\n/**\n * Returns an object array representing the heading tree from a given node.\n * Root nodes are evaluated differently, and requires the evaluatingRoot flag\n * to be true.\n * @param {node} el - The node being evaluated.\n * @param {node[]} children - The children of the evaluated node.\n * @param {boolean} [evaluatingRoot] - Whether to evaluate as root node.\n * @returns {Object[]}\n */\nfunction getHeadingTree(el, children) {\n  var evaluatingRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var headingTagNames = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n  var tagNameIndex = headingTagNames.indexOf(el.tagName);\n  var headings = [];\n\n  var currentLowestTagNameIndex = 5;\n\n  for (var i = 0; i < children.length; i += 1) {\n    var child = children[i];\n    var childTagNameIndex = headingTagNames.indexOf(child.tagName);\n\n    if (childTagNameIndex !== -1 && childTagNameIndex < currentLowestTagNameIndex) {\n      currentLowestTagNameIndex = childTagNameIndex;\n    }\n\n    if (evaluatingRoot && childTagNameIndex !== -1 && childTagNameIndex <= currentLowestTagNameIndex || !evaluatingRoot && childTagNameIndex !== -1 && childTagNameIndex === tagNameIndex + 1) {\n      var siblings = getHeadingContent(child);\n\n      var childNode = {\n        el: child,\n        content: siblings,\n        children: getHeadingTree(child, siblings)\n      };\n\n      headings.push(childNode);\n    }\n  }\n\n  return headings;\n}\n\n/**\n * Returns groupings of headings that meet the minimum sequence value\n * and don't contain any invalid headings.\n * @param {Object[]} headings - An array of heading objects.\n * @param {int[]} invalidHeadings - An array of invalid heading integers,\n *                                  representing indexes of headings.\n * @param {*} minInSequence - Minimum headings in sequence before being considered\n *                            as a grouping.\n * @returns {Object[][]}\n */\nfunction getHeadingGroupsInSequence(headings, invalidHeadings, minInSequence) {\n  var headingGroupsInSequence = [];\n  var currentHeadingGroupInSequence = [];\n  var currentSequence = 0;\n\n  for (var i = 0; i < headings.length; i += 1) {\n    if (invalidHeadings.indexOf(i) === -1) {\n      currentHeadingGroupInSequence.push(headings[i]);\n      currentSequence += 1;\n\n      if (i !== headings.length - 1 && headings[i].el.tagName !== headings[i + 1].el.tagName && invalidHeadings.indexOf(i + 1)) {\n        currentHeadingGroupInSequence = [];\n        currentSequence = 0;\n      } else if (i !== 0 && headings[i].el.tagName !== headings[i - 1].el.tagName) {\n        currentHeadingGroupInSequence.pop();\n        currentSequence -= 1;\n\n        if (currentSequence >= minInSequence) {\n          headingGroupsInSequence.push(currentHeadingGroupInSequence);\n        }\n\n        currentHeadingGroupInSequence = [headings[i]];\n        currentSequence = 1;\n      }\n    }\n  }\n\n  if (currentSequence >= minInSequence) {\n    headingGroupsInSequence.push(currentHeadingGroupInSequence);\n  }\n\n  return headingGroupsInSequence;\n}\n\n/**\n * Generates necessary DOM elements to group related content.\n * Returns a object array representing the grouped content.\n * @param {Object[]} children - An array of objects.\n * @returns {Object[]}\n */\nfunction createGroupedContent(children) {\n  var pairings = [];\n\n  var firstChild = children[0].el;\n  var triggers = document.createElement('div');\n  var contents = document.createElement('div');\n\n  contents = firstChild.parentNode.insertBefore(contents, firstChild.nextSibling);\n  triggers = firstChild.parentNode.insertBefore(triggers, firstChild.nextSibling);\n\n  for (var i = 0; i < children.length; i += 1) {\n    var child = children[i];\n    var trigger = child.el;\n    var content = document.createElement('div');\n\n    trigger = triggers.appendChild(trigger);\n    content = contents.appendChild(content);\n\n    for (var j = 0; j < child.content.length; j += 1) {\n      content.appendChild(child.content[j]);\n    }\n\n    pairings.push({\n      trigger: trigger,\n      content: content\n    });\n  }\n\n  return {\n    triggers: triggers,\n    contents: contents,\n    pairings: pairings\n  };\n}\n\n/**\n * Returns all groupable content within the supplied node.\n * @param {node} node - A node to traverse for groupable content.\n * @returns {Object[][]}\n */\n/*\n * Recursive function:\n *  Returns all groups of headings that\n *  are elegible to become grouped content.\n */\nfunction getGroupedContentSet(node) {\n  var children = node.children;\n  var childrenWithGroupableContent = [];\n  var groupedContentSet = [];\n\n  if (children.length === 0) {\n    return [];\n  }\n\n  for (var i = 0; i < children.length; i += 1) {\n    var childGroupableContent = getGroupedContentSet(children[i]);\n\n    if (childGroupableContent.length > 0) {\n      childrenWithGroupableContent.push(i);\n      groupedContentSet = groupedContentSet.concat(childGroupableContent);\n    }\n  }\n\n  var headingGroupsInSequence = getHeadingGroupsInSequence(children, childrenWithGroupableContent, 3);\n\n  for (var _i = 0; _i < headingGroupsInSequence.length; _i += 1) {\n    groupedContentSet.push(createGroupedContent(headingGroupsInSequence[_i]));\n  }\n\n  return groupedContentSet;\n}\n\n/**\n * When static parsing isn't enough, there's intelliparse\u2122!\n * Searches through dom content to find heading groupings that\n * are elegible to become tab groups.\n * Assumes that content is in a flattened hierarchy in the dom\n * and interprets increasing heading values as a deeper level of nesting.\n * Returns all groupable content as an array of object arrays.\n * @param {node} el - The node who's content will be searched for groupable content.\n * @returns {Object[][]}\n */\nfunction intelliParse(el) {\n  var children = el.children;\n  var heading = el.querySelector('h1, h2, h3, h4, h5, h6');\n\n  // Fast return if there's no headings\n  if (children.length === 0) return [];\n\n  var rootNode = {\n    el: el,\n    content: null,\n    children: getHeadingTree(heading, children, true)\n  };\n\n  return getGroupedContentSet(rootNode);\n}\n\n/**\n * Parses content from a given node based on a static structure.\n * The structure is as follows:\n * <ul class=\"tabs\">\n *   <li class=\"active\">Tab 1</li>\n *   <li>Tab 2</li>\n *   <li>Tab 3</li>\n * </ul>\n *\n * <ul class=\"tabs-content\">\n *   <li class=\"active\">\n *     <p>Tab 1 content goes here.</p>\n *   </li>\n *   <li>\n *     <p>Tab 2 content goes here.</p>\n *   </li>\n *   <li>\n *     <p>Tab 3 content goes here.</p>\n *   </li>\n * </ul>\n * Returns all groupable content as an array of object arrays.\n * @param {node} el - The node who's content will be searched for groupable content.\n * @returns {Object[][]}\n */\nfunction staticParse(el) {\n  var groupedContentSet = [];\n\n  var tabs = el.querySelectorAll('.tabs');\n\n  for (var i = 0; i < tabs.length; i += 1) {\n    var triggers = tabs[i].children;\n    var contents = tabs[i].nextElementSibling.children;\n\n    // Only add a tab group if equal triggers to contents\n    if (triggers.length === contents.length) {\n      var length = groupedContentSet.push({\n        triggers: tabs[i],\n        contents: tabs[i].nextElementSibling,\n        pairings: []\n      });\n      var index = length - 1;\n\n      for (var j = 0; j < triggers.length; j += 1) {\n        var trigger = triggers[j];\n        var content = contents[j];\n\n        var pairing = {\n          trigger: trigger,\n          content: content\n        };\n\n        groupedContentSet[index].pairings.push(pairing);\n      }\n    }\n  }\n\n  return groupedContentSet;\n}\n\n/**\n * Returns all groupable content as an array of object arrays.\n * @param {node} content - The node to parse for groupable content.\n * @param {boolean} intelliparse - Whether to use intelligent parsing.\n * @returns {Object[][]}\n */\nfunction parse(content) {\n  var intelliparse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var groupedContentSet = intelliparse ? intelliParse(content) : staticParse(content);\n\n  return groupedContentSet;\n}\n\n/** A class for creating, managing, and destroying groupable content. */\n\nvar GroupedContent = function () {\n  /**\n   * Create grouped content\n   * @param {node} el - The element to search for groupable content in.\n   * @param {Object}  [options] - Additional options\n   * @param {string}  [options.layout] - The layout to display groupable content in.\n   * @param {boolean} [options.intelliparse] - The parsing algorithm used to find content with.\n   */\n  function GroupedContent(el) {\n    var _this = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    classCallCheck$1(this, GroupedContent);\n\n    this.namespace = 'grouped-content';\n    this.el = el;\n    this.groupedContentInstances = [];\n\n    var layout = options.layout || 'tabs';\n    var intelliparse = !!options.intelliparse;\n\n    forEach(parse(el, intelliparse), function (groupedContent) {\n      var id = uuidv4();\n      var instance = null;\n      var groupedContentWrapper = document.createElement('div');\n\n      groupedContentWrapper = groupedContent.triggers.parentNode.insertBefore(groupedContentWrapper, groupedContent.triggers.nextSibling);\n\n      addClass(groupedContentWrapper, _this.namespace);\n      addClass(groupedContentWrapper, _this.namespace + '-layout-' + layout);\n\n      groupedContentWrapper.appendChild(groupedContent.triggers);\n      groupedContentWrapper.appendChild(groupedContent.contents);\n\n      groupedContent.namespace = _this.namespace;\n      groupedContent.id = id;\n      groupedContent.triggers.id = _this.namespace + '-' + id + '-triggers';\n      groupedContent.contents.id = _this.namespace + '-' + id + '-contents';\n\n      addClass(groupedContent.triggers, _this.namespace + '-triggers');\n      addClass(groupedContent.contents, _this.namespace + '-contents');\n\n      forEach(groupedContent.pairings, function (pairing) {\n        addClass(pairing.trigger, _this.namespace + '-trigger');\n        addClass(pairing.content, _this.namespace + '-content');\n      });\n\n      switch (layout) {\n        case 'accordion':\n          instance = new AccordionLayout(groupedContent);\n          break;\n        case 'tabs':\n        default:\n          instance = new TabsLayout(groupedContent);\n          break;\n      }\n\n      _this.groupedContentInstances.push({\n        groupedContent: groupedContent,\n        instance: instance\n      });\n    });\n  }\n\n  /** Unload all grouped content instances */\n\n\n  createClass$1(GroupedContent, [{\n    key: 'unload',\n    value: function unload() {\n      forEach(this.groupedContentInstances, function (groupedContentInstance) {\n        groupedContentInstance.instance.unload();\n      });\n    }\n  }]);\n  return GroupedContent;\n}();\n\nvar dist$1 = GroupedContent;\n\nvar RichText = function () {\n  function RichText($el) {\n    classCallCheck(this, RichText);\n\n    this.$el = $el;\n    this._initExternalLinks();\n    this.groupedContent = null;\n\n    if (this.$el.length) {\n      this.groupedContent = new dist$1($el.get(0), {\n        layout: 'tabs',\n        intelliparse: false\n      });\n      fitvids();\n    }\n  }\n\n  createClass(RichText, [{\n    key: 'unload',\n    value: function unload() {\n      if (this.groupedContent) {\n        this.groupedContent.unload();\n      }\n    }\n\n    /**\n     * Open links within an RTE field in a new window if they point to external domains\n     *\n     * @private\n     */\n\n  }, {\n    key: '_initExternalLinks',\n    value: function _initExternalLinks() {\n      var anchors = this.$el.find('a[href^=\"http\"]').filter(function (i, el) {\n        return el.href.indexOf(location.hostname) === -1;\n      });\n\n      anchors.attr('target', '_blank');\n    }\n  }]);\n  return RichText;\n}();\n\nvar Page = function Page() {\n  classCallCheck(this, Page);\n\n  this.$pageContent = jquery$1('[data-template-page]');\n\n  if (this.$pageContent.length) {\n    new RichText(this.$pageContent);\n  }\n};\n\nvar Sections = function () {\n  function Sections() {\n    classCallCheck(this, Sections);\n\n    this.handlers = {};\n    this.instances = {};\n    this._onSectionEvent = this._onSectionEvent.bind(this);\n\n    document.addEventListener('shopify:section:load', this._onSectionEvent);\n    document.addEventListener('shopify:section:unload', this._onSectionEvent);\n    document.addEventListener('shopify:section:select', this._onSectionEvent);\n    document.addEventListener('shopify:section:deselect', this._onSectionEvent);\n    document.addEventListener('shopify:block:select', this._onSectionEvent);\n    document.addEventListener('shopify:block:deselect', this._onSectionEvent);\n  }\n\n  /**\n   * Stop listening for section events, and unbind all handlers.\n   */\n\n\n  createClass(Sections, [{\n    key: 'unbind',\n    value: function unbind() {\n      document.removeEventListener('shopify:section:load', this._onSectionEvent);\n      document.removeEventListener('shopify:section:unload', this._onSectionEvent);\n      document.removeEventListener('shopify:section:select', this._onSectionEvent);\n      document.removeEventListener('shopify:section:deselect', this._onSectionEvent);\n      document.removeEventListener('shopify:block:select', this._onSectionEvent);\n      document.removeEventListener('shopify:block:deselect', this._onSectionEvent);\n\n      // Unload all instances\n      for (var i = 0; i < this.instances.length; i++) {\n        this._triggerInstanceEvent(this.instances[i], 'onSectionUnload');\n      }\n\n      this.handlers = {};\n      this.instances = {};\n    }\n\n    /**\n     * Register a section handler.\n     *\n     * @param {string} type\n     *        The section type to handle. The handler will be called for all\n     *        sections with this type.\n     *\n     * @param {function} handler\n     *        The handler function is passed information about a specific section\n     *        instance. The handler is expected to return an object that will be\n     *        associated with the section instance.\n     *\n     *        Section handlers are passed an object with the following parameters:\n     *          {string} id\n     *          An ID that maps to a specific section instance. Typically the\n     *          section's filename for static sections, or a generated ID for\n     *          dynamic sections.\n     *\n     *          {string} type\n     *          The section type, as supplied when registered.\n     *\n     *          {Element} el\n     *          The root DOM element for the section instance.\n     *\n     *          {Object} data\n     *          Data loaded from the section script element. Defaults to an\n     *          empty object.\n     *\n     *          {Function} postMessage\n     *          A function that can be called to pass messages between sections.\n     *          The function should be called with a message \"name\", and\n     *          optionally some data.\n     */\n\n  }, {\n    key: 'register',\n    value: function register(type, handler) {\n      if (this.handlers[type]) {\n        console.warn('Sections: section handler already exists of type \\'' + type + '\\'.');\n      }\n\n      // Store the section handler\n      this.handlers[type] = handler;\n\n      // Init sections for this type\n      this._initSections(type);\n    }\n\n    /**\n     * Initialize sections already on the page.\n     */\n\n  }, {\n    key: '_initSections',\n    value: function _initSections(type) {\n      // Fetch all existing sections of our type on the page\n      var dataEls = document.querySelectorAll('[data-section-type=\"' + type + '\"]');\n      if (!dataEls) return;\n\n      // Create an instance for each section\n      for (var i = 0; i < dataEls.length; i++) {\n        var dataEl = dataEls[i];\n        var el = dataEl.parentNode;\n\n        // Get instance ID\n        var idEl = el.querySelector('[data-section-id]');\n\n        if (!idEl) {\n          console.warn('Sections: unable to find section id for \\'' + type + '\\'.', el);\n          continue;\n        }\n\n        var sectionId = idEl.getAttribute('data-section-id');\n        if (!sectionId) {\n          console.warn('Sections: unable to find section id for \\'' + type + '\\'.', el);\n          continue;\n        }\n\n        this._createInstance(sectionId, el);\n      }\n    }\n  }, {\n    key: '_onSectionEvent',\n    value: function _onSectionEvent(event) {\n      var el = event.target;\n      var sectionId = event.detail.sectionId;\n      var blockId = event.detail.blockId;\n      var instance = this.instances[sectionId];\n\n      switch (event.type) {\n        case 'shopify:section:load':\n          this._createInstance(sectionId, el);\n          break;\n\n        case 'shopify:section:unload':\n          this._triggerInstanceEvent(instance, 'onSectionUnload', { el: el, id: sectionId });\n          delete this.instances[sectionId];\n          break;\n\n        case 'shopify:section:select':\n          this._triggerInstanceEvent(instance, 'onSectionSelect', { el: el, id: sectionId });\n          break;\n\n        case 'shopify:section:deselect':\n          this._triggerInstanceEvent(instance, 'onSectionDeselect', { el: el, id: sectionId });\n          break;\n\n        case 'shopify:block:select':\n          this._triggerInstanceEvent(instance, 'onSectionBlockSelect', { el: el, id: blockId });\n          break;\n\n        case 'shopify:block:deselect':\n          this._triggerInstanceEvent(instance, 'onSectionBlockDeselect', { el: el, id: blockId });\n          break;\n      }\n    }\n  }, {\n    key: '_triggerInstanceEvent',\n    value: function _triggerInstanceEvent(instance, eventName) {\n      if (instance && instance[eventName]) {\n        for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n          args[_key - 2] = arguments[_key];\n        }\n\n        instance[eventName].apply(instance, args);\n      }\n    }\n  }, {\n    key: '_postMessage',\n    value: function _postMessage(name, data) {\n      var _this = this;\n\n      Object.keys(this.instances).forEach(function (id) {\n        _this._triggerInstanceEvent(_this.instances[id], 'onSectionMessage', name, data);\n      });\n    }\n  }, {\n    key: '_createInstance',\n    value: function _createInstance(id, el) {\n      var typeEl = el.querySelector('[data-section-type]');\n      if (!typeEl) return;\n\n      var type = typeEl.getAttribute('data-section-type');\n      if (!type) return;\n\n      var handler = this.handlers[type];\n      if (!handler) return console.warn('Sections: unable to find section handler for type \\'' + type + '\\'.');\n\n      var data = this._loadData(el);\n      var postMessage = this._postMessage.bind(this);\n\n      this.instances[id] = handler({ id: id, type: type, el: el, data: data, postMessage: postMessage });\n    }\n  }, {\n    key: '_loadData',\n    value: function _loadData(el) {\n      var dataEl = el.querySelector('[data-section-data]');\n      if (!dataEl) return {};\n\n      // Load data from attribute, or innerHTML\n      var data = dataEl.getAttribute('data-section-data') || dataEl.innerHTML;\n\n      try {\n        return JSON.parse(data);\n      } catch (error) {\n        console.warn('Sections: invalid section data found. ' + error.message);\n        return {};\n      }\n    }\n  }]);\n  return Sections;\n}();\n\n'use strict';\n\nvar moneyFormats = {\n  USD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} USD'\n  },\n  EUR: {\n    'money_format': '&euro;{{amount}}',\n    'money_with_currency_format': '&euro;{{amount}} EUR'\n  },\n  GBP: {\n    'money_format': '&pound;{{amount}}',\n    'money_with_currency_format': '&pound;{{amount}} GBP'\n  },\n  CAD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} CAD'\n  },\n  ALL: {\n    'money_format': 'Lek {{amount}}',\n    'money_with_currency_format': 'Lek {{amount}} ALL'\n  },\n  DZD: {\n    'money_format': 'DA {{amount}}',\n    'money_with_currency_format': 'DA {{amount}} DZD'\n  },\n  AOA: {\n    'money_format': 'Kz{{amount}}',\n    'money_with_currency_format': 'Kz{{amount}} AOA'\n  },\n  ARS: {\n    'money_format': '${{amount_with_comma_separator}}',\n    'money_with_currency_format': '${{amount_with_comma_separator}} ARS'\n  },\n  AMD: {\n    'money_format': '{{amount}} AMD',\n    'money_with_currency_format': '{{amount}} AMD'\n  },\n  AWG: {\n    'money_format': 'Afl{{amount}}',\n    'money_with_currency_format': 'Afl{{amount}} AWG'\n  },\n  AUD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} AUD'\n  },\n  BBD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} Bds'\n  },\n  AZN: {\n    'money_format': 'm.{{amount}}',\n    'money_with_currency_format': 'm.{{amount}} AZN'\n  },\n  BDT: {\n    'money_format': 'Tk {{amount}}',\n    'money_with_currency_format': 'Tk {{amount}} BDT'\n  },\n  BSD: {\n    'money_format': 'BS${{amount}}',\n    'money_with_currency_format': 'BS${{amount}} BSD'\n  },\n  BHD: {\n    'money_format': '{{amount}}0 BD',\n    'money_with_currency_format': '{{amount}}0 BHD'\n  },\n  BYR: {\n    'money_format': 'Br {{amount}}',\n    'money_with_currency_format': 'Br {{amount}} BYR'\n  },\n  BZD: {\n    'money_format': 'BZ${{amount}}',\n    'money_with_currency_format': 'BZ${{amount}} BZD'\n  },\n  BTN: {\n    'money_format': 'Nu {{amount}}',\n    'money_with_currency_format': 'Nu {{amount}} BTN'\n  },\n  BAM: {\n    'money_format': 'KM {{amount_with_comma_separator}}',\n    'money_with_currency_format': 'KM {{amount_with_comma_separator}} BAM'\n  },\n  BRL: {\n    'money_format': 'R$ {{amount_with_comma_separator}}',\n    'money_with_currency_format': 'R$ {{amount_with_comma_separator}} BRL'\n  },\n  BOB: {\n    'money_format': 'Bs{{amount_with_comma_separator}}',\n    'money_with_currency_format': 'Bs{{amount_with_comma_separator}} BOB'\n  },\n  BWP: {\n    'money_format': 'P{{amount}}',\n    'money_with_currency_format': 'P{{amount}} BWP'\n  },\n  BND: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} BND'\n  },\n  BGN: {\n    'money_format': '{{amount}} \u043B\u0432',\n    'money_with_currency_format': '{{amount}} \u043B\u0432 BGN'\n  },\n  MMK: {\n    'money_format': 'K{{amount}}',\n    'money_with_currency_format': 'K{{amount}} MMK'\n  },\n  KHR: {\n    'money_format': 'KHR{{amount}}',\n    'money_with_currency_format': 'KHR{{amount}}'\n  },\n  KYD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} KYD'\n  },\n  XAF: {\n    'money_format': 'FCFA{{amount}}',\n    'money_with_currency_format': 'FCFA{{amount}} XAF'\n  },\n  CLP: {\n    'money_format': '${{amount_no_decimals}}',\n    'money_with_currency_format': '${{amount_no_decimals}} CLP'\n  },\n  CNY: {\n    'money_format': '&#165;{{amount}}',\n    'money_with_currency_format': '&#165;{{amount}} CNY'\n  },\n  COP: {\n    'money_format': '${{amount_with_comma_separator}}',\n    'money_with_currency_format': '${{amount_with_comma_separator}} COP'\n  },\n  CRC: {\n    'money_format': '&#8353; {{amount_with_comma_separator}}',\n    'money_with_currency_format': '&#8353; {{amount_with_comma_separator}} CRC'\n  },\n  HRK: {\n    'money_format': '{{amount_with_comma_separator}} kn',\n    'money_with_currency_format': '{{amount_with_comma_separator}} kn HRK'\n  },\n  CZK: {\n    'money_format': '{{amount_with_comma_separator}} K&#269;',\n    'money_with_currency_format': '{{amount_with_comma_separator}} K&#269;'\n  },\n  DKK: {\n    'money_format': '{{amount_with_comma_separator}}',\n    'money_with_currency_format': 'kr.{{amount_with_comma_separator}}'\n  },\n  DOP: {\n    'money_format': 'RD$ {{amount}}',\n    'money_with_currency_format': 'RD$ {{amount}}'\n  },\n  XCD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': 'EC${{amount}}'\n  },\n  EGP: {\n    'money_format': 'LE {{amount}}',\n    'money_with_currency_format': 'LE {{amount}} EGP'\n  },\n  ETB: {\n    'money_format': 'Br{{amount}}',\n    'money_with_currency_format': 'Br{{amount}} ETB'\n  },\n  XPF: {\n    'money_format': '{{amount_no_decimals_with_comma_separator}} XPF',\n    'money_with_currency_format': '{{amount_no_decimals_with_comma_separator}} XPF'\n  },\n  FJD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': 'FJ${{amount}}'\n  },\n  GMD: {\n    'money_format': 'D {{amount}}',\n    'money_with_currency_format': 'D {{amount}} GMD'\n  },\n  GHS: {\n    'money_format': 'GH&#8373;{{amount}}',\n    'money_with_currency_format': 'GH&#8373;{{amount}}'\n  },\n  GTQ: {\n    'money_format': 'Q{{amount}}',\n    'money_with_currency_format': '{{amount}} GTQ'\n  },\n  GYD: {\n    'money_format': 'G${{amount}}',\n    'money_with_currency_format': '${{amount}} GYD'\n  },\n  GEL: {\n    'money_format': '{{amount}} GEL',\n    'money_with_currency_format': '{{amount}} GEL'\n  },\n  HNL: {\n    'money_format': 'L {{amount}}',\n    'money_with_currency_format': 'L {{amount}} HNL'\n  },\n  HKD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': 'HK${{amount}}'\n  },\n  HUF: {\n    'money_format': '{{amount_no_decimals_with_comma_separator}}',\n    'money_with_currency_format': '{{amount_no_decimals_with_comma_separator}} Ft'\n  },\n  ISK: {\n    'money_format': '{{amount_no_decimals}} kr',\n    'money_with_currency_format': '{{amount_no_decimals}} kr ISK'\n  },\n  INR: {\n    'money_format': 'Rs. {{amount}}',\n    'money_with_currency_format': 'Rs. {{amount}}'\n  },\n  IDR: {\n    'money_format': '{{amount_with_comma_separator}}',\n    'money_with_currency_format': 'Rp {{amount_with_comma_separator}}'\n  },\n  ILS: {\n    'money_format': '{{amount}} NIS',\n    'money_with_currency_format': '{{amount}} NIS'\n  },\n  JMD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} JMD'\n  },\n  JPY: {\n    'money_format': '&#165;{{amount_no_decimals}}',\n    'money_with_currency_format': '&#165;{{amount_no_decimals}} JPY'\n  },\n  JEP: {\n    'money_format': '&pound;{{amount}}',\n    'money_with_currency_format': '&pound;{{amount}} JEP'\n  },\n  JOD: {\n    'money_format': '{{amount}}0 JD',\n    'money_with_currency_format': '{{amount}}0 JOD'\n  },\n  KZT: {\n    'money_format': '{{amount}} KZT',\n    'money_with_currency_format': '{{amount}} KZT'\n  },\n  KES: {\n    'money_format': 'KSh{{amount}}',\n    'money_with_currency_format': 'KSh{{amount}}'\n  },\n  KWD: {\n    'money_format': '{{amount}}0 KD',\n    'money_with_currency_format': '{{amount}}0 KWD'\n  },\n  KGS: {\n    'money_format': '\u043B\u0432{{amount}}',\n    'money_with_currency_format': '\u043B\u0432{{amount}}'\n  },\n  LVL: {\n    'money_format': 'Ls {{amount}}',\n    'money_with_currency_format': 'Ls {{amount}} LVL'\n  },\n  LBP: {\n    'money_format': 'L&pound;{{amount}}',\n    'money_with_currency_format': 'L&pound;{{amount}} LBP'\n  },\n  LTL: {\n    'money_format': '{{amount}} Lt',\n    'money_with_currency_format': '{{amount}} Lt'\n  },\n  MGA: {\n    'money_format': 'Ar {{amount}}',\n    'money_with_currency_format': 'Ar {{amount}} MGA'\n  },\n  MKD: {\n    'money_format': '\u0434\u0435\u043D {{amount}}',\n    'money_with_currency_format': '\u0434\u0435\u043D {{amount}} MKD'\n  },\n  MOP: {\n    'money_format': 'MOP${{amount}}',\n    'money_with_currency_format': 'MOP${{amount}}'\n  },\n  MVR: {\n    'money_format': 'Rf{{amount}}',\n    'money_with_currency_format': 'Rf{{amount}} MRf'\n  },\n  MXN: {\n    'money_format': '$ {{amount}}',\n    'money_with_currency_format': '$ {{amount}} MXN'\n  },\n  MYR: {\n    'money_format': 'RM{{amount}} MYR',\n    'money_with_currency_format': 'RM{{amount}} MYR'\n  },\n  MUR: {\n    'money_format': 'Rs {{amount}}',\n    'money_with_currency_format': 'Rs {{amount}} MUR'\n  },\n  MDL: {\n    'money_format': '{{amount}} MDL',\n    'money_with_currency_format': '{{amount}} MDL'\n  },\n  MAD: {\n    'money_format': '{{amount}} dh',\n    'money_with_currency_format': 'Dh {{amount}} MAD'\n  },\n  MNT: {\n    'money_format': '{{amount_no_decimals}} &#8366',\n    'money_with_currency_format': '{{amount_no_decimals}} MNT'\n  },\n  MZN: {\n    'money_format': '{{amount}} Mt',\n    'money_with_currency_format': 'Mt {{amount}} MZN'\n  },\n  NAD: {\n    'money_format': 'N${{amount}}',\n    'money_with_currency_format': 'N${{amount}} NAD'\n  },\n  NPR: {\n    'money_format': 'Rs{{amount}}',\n    'money_with_currency_format': 'Rs{{amount}} NPR'\n  },\n  ANG: {\n    'money_format': '&fnof;{{amount}}',\n    'money_with_currency_format': '{{amount}} NA&fnof;'\n  },\n  NZD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} NZD'\n  },\n  NIO: {\n    'money_format': 'C${{amount}}',\n    'money_with_currency_format': 'C${{amount}} NIO'\n  },\n  NGN: {\n    'money_format': '&#8358;{{amount}}',\n    'money_with_currency_format': '&#8358;{{amount}} NGN'\n  },\n  NOK: {\n    'money_format': 'kr {{amount_with_comma_separator}}',\n    'money_with_currency_format': 'kr {{amount_with_comma_separator}} NOK'\n  },\n  OMR: {\n    'money_format': '{{amount_with_comma_separator}} OMR',\n    'money_with_currency_format': '{{amount_with_comma_separator}} OMR'\n  },\n  PKR: {\n    'money_format': 'Rs.{{amount}}',\n    'money_with_currency_format': 'Rs.{{amount}} PKR'\n  },\n  PGK: {\n    'money_format': 'K {{amount}}',\n    'money_with_currency_format': 'K {{amount}} PGK'\n  },\n  PYG: {\n    'money_format': 'Gs. {{amount_no_decimals_with_comma_separator}}',\n    'money_with_currency_format': 'Gs. {{amount_no_decimals_with_comma_separator}} PYG'\n  },\n  PEN: {\n    'money_format': 'S/. {{amount}}',\n    'money_with_currency_format': 'S/. {{amount}} PEN'\n  },\n  PHP: {\n    'money_format': '&#8369;{{amount}}',\n    'money_with_currency_format': '&#8369;{{amount}} PHP'\n  },\n  PLN: {\n    'money_format': '{{amount_with_comma_separator}} zl',\n    'money_with_currency_format': '{{amount_with_comma_separator}} zl PLN'\n  },\n  QAR: {\n    'money_format': 'QAR {{amount_with_comma_separator}}',\n    'money_with_currency_format': 'QAR {{amount_with_comma_separator}}'\n  },\n  RON: {\n    'money_format': '{{amount_with_comma_separator}} lei',\n    'money_with_currency_format': '{{amount_with_comma_separator}} lei RON'\n  },\n  RUB: {\n    'money_format': '&#1088;&#1091;&#1073;{{amount_with_comma_separator}}',\n    'money_with_currency_format': '&#1088;&#1091;&#1073;{{amount_with_comma_separator}} RUB'\n  },\n  RWF: {\n    'money_format': '{{amount_no_decimals}} RF',\n    'money_with_currency_format': '{{amount_no_decimals}} RWF'\n  },\n  WST: {\n    'money_format': 'WS$ {{amount}}',\n    'money_with_currency_format': 'WS$ {{amount}} WST'\n  },\n  SAR: {\n    'money_format': '{{amount}} SR',\n    'money_with_currency_format': '{{amount}} SAR'\n  },\n  STD: {\n    'money_format': 'Db {{amount}}',\n    'money_with_currency_format': 'Db {{amount}} STD'\n  },\n  RSD: {\n    'money_format': '{{amount}} RSD',\n    'money_with_currency_format': '{{amount}} RSD'\n  },\n  SCR: {\n    'money_format': 'Rs {{amount}}',\n    'money_with_currency_format': 'Rs {{amount}} SCR'\n  },\n  SGD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} SGD'\n  },\n  SYP: {\n    'money_format': 'S&pound;{{amount}}',\n    'money_with_currency_format': 'S&pound;{{amount}} SYP'\n  },\n  ZAR: {\n    'money_format': 'R {{amount}}',\n    'money_with_currency_format': 'R {{amount}} ZAR'\n  },\n  KRW: {\n    'money_format': '&#8361;{{amount_no_decimals}}',\n    'money_with_currency_format': '&#8361;{{amount_no_decimals}} KRW'\n  },\n  LKR: {\n    'money_format': 'Rs {{amount}}',\n    'money_with_currency_format': 'Rs {{amount}} LKR'\n  },\n  SEK: {\n    'money_format': '{{amount_no_decimals}} kr',\n    'money_with_currency_format': '{{amount_no_decimals}} kr SEK'\n  },\n  CHF: {\n    'money_format': 'SFr. {{amount}}',\n    'money_with_currency_format': 'SFr. {{amount}} CHF'\n  },\n  TWD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} TWD'\n  },\n  THB: {\n    'money_format': '{{amount}} &#xe3f;',\n    'money_with_currency_format': '{{amount}} &#xe3f; THB'\n  },\n  TZS: {\n    'money_format': '{{amount}} TZS',\n    'money_with_currency_format': '{{amount}} TZS'\n  },\n  TTD: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}} TTD'\n  },\n  TND: {\n    'money_format': '{{amount}}',\n    'money_with_currency_format': '{{amount}} DT'\n  },\n  TRY: {\n    'money_format': '{{amount}}TL',\n    'money_with_currency_format': '{{amount}}TL'\n  },\n  UGX: {\n    'money_format': 'Ush {{amount_no_decimals}}',\n    'money_with_currency_format': 'Ush {{amount_no_decimals}} UGX'\n  },\n  UAH: {\n    'money_format': '\u20B4{{amount}}',\n    'money_with_currency_format': '\u20B4{{amount}} UAH'\n  },\n  AED: {\n    'money_format': 'Dhs. {{amount}}',\n    'money_with_currency_format': 'Dhs. {{amount}} AED'\n  },\n  UYU: {\n    'money_format': '${{amount_with_comma_separator}}',\n    'money_with_currency_format': '${{amount_with_comma_separator}} UYU'\n  },\n  VUV: {\n    'money_format': '${{amount}}',\n    'money_with_currency_format': '${{amount}}VT'\n  },\n  VEF: {\n    'money_format': 'Bs. {{amount_with_comma_separator}}',\n    'money_with_currency_format': 'Bs. {{amount_with_comma_separator}} VEF'\n  },\n  VND: {\n    'money_format': '{{amount_no_decimals_with_comma_separator}}&#8363;',\n    'money_with_currency_format': '{{amount_no_decimals_with_comma_separator}} VND'\n  },\n  XBT: {\n    'money_format': '{{amount_no_decimals}} BTC',\n    'money_with_currency_format': '{{amount_no_decimals}} BTC'\n  },\n  XOF: {\n    'money_format': 'CFA{{amount}}',\n    'money_with_currency_format': 'CFA{{amount}} XOF'\n  },\n  ZMW: {\n    'money_format': 'K{{amount_no_decimals_with_comma_separator}}',\n    'money_with_currency_format': 'ZMW{{amount_no_decimals_with_comma_separator}}'\n  }\n};\n\n/**\n * Format a number to a specific format\n *\n * @param number {Number}\n * @param precision {Number}\n * @param thousands {String}\n * @param decimal {String}\n * @returns {String}\n */\nfunction formatWithDelimiters(number) {\n  var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n  var thousands = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ',';\n  var decimal = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n\n  if (isNaN(number) || !number) {\n    return 0;\n  }\n\n  var preciseNumber = (number / 100.0).toFixed(precision);\n\n  var parts = preciseNumber.split(thousands);\n  var dollarsAmount = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands);\n  var centsAmount = parts[1] ? decimal + parts[1] : '';\n\n  return dollarsAmount + centsAmount;\n}\n\n/**\n * Convert a money value in cents to a formatted currency string\n *\n * @param cents {Number|String}\n * @param format {String}\n * @returns {String}\n */\nfunction formatMoney(cents, format) {\n  if (typeof cents === 'string') {\n    cents = cents.replace('.', '');\n  }\n\n  var value = '';\n  var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n\n  switch (format.match(placeholderRegex)[1]) {\n    case 'amount':\n      value = formatWithDelimiters(cents, 2, ',', '.');\n      break;\n    case 'amount_with_space_separator':\n      value = formatWithDelimiters(cents, 2, ' ', '.');\n      break;\n    case 'amount_with_comma_separator':\n      value = formatWithDelimiters(cents, 2, '.', ',');\n      break;\n    case 'amount_with_apostrophe_separator':\n      value = formatWithDelimiters(cents, 2, '\\'', '.');\n      break;\n    case 'amount_no_decimals':\n      value = formatWithDelimiters(cents, 0, ',', '.');\n      break;\n    case 'amount_no_decimals_with_space_separator':\n      value = formatWithDelimiters(cents, 0, ' ', '.');\n      break;\n    case 'amount_no_decimals_with_comma_separator':\n      value = formatWithDelimiters(cents, 0, ',', '.');\n      break;\n  }\n\n  return format.replace(placeholderRegex, value);\n}\n\n/**\n * Return the value of money in cents value\n *\n * @param moneyAmount {Number}\n * @param format {String}\n * @param currency {String}\n * @returns {Number}\n * @private\n */\nfunction getCentsValue(moneyAmount, format, currency) {\n  var cents = 0;\n  // Convert prices from float values to integers if needed, then convert\n  if (format.indexOf('amount_no_decimals') !== -1) {\n    cents = moneyAmount * 100;\n  } else if (currency === 'JOD' || currency === 'KWD' || currency === 'BHD') {\n    cents = moneyAmount / 10;\n  } else {\n    cents = moneyAmount;\n  }\n\n  return cents;\n}\n\n/**\n * Converts formatted money to a number\n *\n * @param priceEl {HTMLElement}\n * @returns {Number|String}\n */\nfunction getMoneyValue(priceEl) {\n  var price = priceEl.textContent;\n  var value = parseInt(price.replace(/[^0-9]/g, ''), 10);\n\n  return !isNaN(value) ? value : '';\n}\n\nvar classCallCheck$2 = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass$2 = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar CurrencyConverter = function () {\n  function CurrencyConverter() {\n    classCallCheck$2(this, CurrencyConverter);\n\n    /**\n     * @property {object} defaults                       - The default configuration for CurrencyConverter\n     * @property {string} defaults.switcherSelector      - CSS Selector for dropdown which controls currency conversion\n     * @property {string} defaults.priceSelector         - CSS Selector for elements containing prices\n     * @property {string} defaults.shopCurrency          - Shop's currency (Currency which prices are printed as)\n     * @property {string} defaults.defaultCurrency       - Theme's currency setting, or initial currency to show on the page\n     * @property {string} defaults.displayFormat         - `money_with_currency_format` or `money_format`\n     * @property {string} defaults.moneyFormat           - Shop's currency formatted using the display format\n     * @property {string} defaults.moneyFormatNoCurrency - Shop's currency formatted without showing currency\n     * @property {string} defaults.moneyFormatCurrency   - Shop's currency formatted showing currency\n     */\n    this.defaults = {\n      switcherSelector: '[data-currency-converter]',\n      priceSelector: '.money',\n      shopCurrency: '',\n      defaultCurrency: '',\n      displayFormat: '',\n      moneyFormat: '',\n      moneyFormatNoCurrency: '',\n      moneyFormatCurrency: ''\n    };\n\n    this.options = {};\n    this.moneyFormats = moneyFormats;\n    this.storage = 'currency';\n    this.currentCurrency = null;\n    this.isInitialised = false;\n  }\n\n  createClass$2(CurrencyConverter, [{\n    key: 'init',\n    value: function init(settings) {\n      var _this = this;\n\n      if (!window.Currency || this.isInitialised) return;\n\n      Object.keys(this.defaults).forEach(function (key) {\n        _this.options[key] = settings[key] || _this.defaults[key];\n      });\n\n      this.currentCurrency = this._getStoredCurrency() || this.options.defaultCurrency;\n      this.moneyFormats[this.options.shopCurrency].money_with_currency_format = this.options.moneyFormatCurrency;\n      this.moneyFormats[this.options.shopCurrency].money_format = this.options.moneyFormatNoCurrency;\n\n      this.isInitialised = true;\n      this._current();\n    }\n\n    /**\n     * Change the currency to a new currency using an ISO currency code\n     *\n     * @param newCurrency\n     */\n\n  }, {\n    key: 'setCurrency',\n    value: function setCurrency(newCurrency) {\n      if (!this.isInitialised) return;\n\n      this._convertAll(this.currentCurrency, newCurrency);\n    }\n\n    /**\n     * Updates a price on the page to use the active Currency, and formatting\n     *\n     * @param priceEl {HTMLElement}\n     */\n\n  }, {\n    key: 'update',\n    value: function update(priceEl) {\n      if (!this.isInitialised) return;\n\n      var attributes = priceEl.attributes;\n      for (var attr = 0; attr < attributes.length; attr++) {\n        var attribute = attributes[attr];\n\n        if (attribute.name.indexOf('data-currency') === 0) {\n          priceEl.setAttribute(attribute.name, '');\n        }\n      }\n\n      var moneyValue = getMoneyValue(priceEl);\n      var centsValue = getCentsValue(moneyValue, this.options.moneyFormat, this.options.shopCurrency);\n\n      // Cents value is empty, but not 0. 0$ is a valid price, while empty is not\n      if (centsValue === '') return;\n\n      var priceFormatted = formatMoney(centsValue, this.options.moneyFormat);\n\n      priceEl.innerHTML = priceFormatted;\n      priceEl.removeAttribute('data-currency');\n      priceEl.setAttribute('data-currency-' + this.options.shopCurrency, priceFormatted);\n      priceEl.setAttribute('data-currency', this.options.shopCurrency);\n\n      this._convertEl(priceEl, this.options.shopCurrency, this.currentCurrency);\n    }\n  }, {\n    key: '_getStoredCurrency',\n    value: function _getStoredCurrency() {\n      try {\n        return localStorage.getItem(this.storage);\n      } catch (error) {\n        console.warn(error);\n        return this.options.defaultCurrency;\n      }\n    }\n  }, {\n    key: '_setStoredCurrency',\n    value: function _setStoredCurrency(currency) {\n      try {\n        localStorage.setItem(this.storage, currency);\n      } catch (error) {\n        console.warn(error);\n      }\n    }\n\n    /**\n     * Update the currency switcher to the current currency\n     * @private\n     */\n\n  }, {\n    key: '_current',\n    value: function _current() {\n      var switchers = document.querySelectorAll(this.options.switcherSelector);\n      for (var i = 0; i < switchers.length; i++) {\n        var switcher = switchers[i];\n\n        var childrenEls = switcher.querySelectorAll('option');\n\n        for (var _i = 0; _i < childrenEls.length; _i++) {\n          var optionEl = childrenEls[_i];\n\n          if (optionEl.selected && optionEl.value !== this.currentCurrency) {\n            optionEl.selected = false;\n          }\n\n          if (optionEl.value === this.currentCurrency) {\n            optionEl.selected = true;\n          }\n        }\n      }\n\n      this._convertAll(this.options.shopCurrency, this.currentCurrency);\n    }\n\n    /**\n     * Converts an individual price to the new format\n     *\n     * @param priceEl\n     * @param oldCurrency\n     * @param newCurrency\n     * @private\n     */\n\n  }, {\n    key: '_convertEl',\n    value: function _convertEl(priceEl, oldCurrency, newCurrency) {\n\n      // If the amount has already been converted, we leave it alone.\n      if (priceEl.getAttribute('data-currency') === newCurrency) {\n        return;\n      }\n\n      // If we are converting to a currency that we have saved, we will use the saved amount.\n      if (priceEl.getAttribute('data-currency-' + newCurrency)) {\n        priceEl.innerHTML = priceEl.getAttribute('data-currency-' + newCurrency);\n      } else {\n        var oldFormat = this.moneyFormats[oldCurrency][this.options.displayFormat];\n        var newFormat = this.moneyFormats[newCurrency][this.options.displayFormat];\n\n        var moneyValue = getMoneyValue(priceEl);\n        var centsValue = getCentsValue(moneyValue, oldFormat, oldCurrency);\n\n        // Cents value is empty, but not 0. 0$ is a valid price, while empty is not\n        if (centsValue === '') return;\n\n        var cents = window.Currency.convert(centsValue, oldCurrency, newCurrency);\n        var priceFormatted = formatMoney(cents, newFormat);\n\n        priceEl.setAttribute('data-currency-' + newCurrency, priceFormatted);\n        priceEl.innerHTML = priceFormatted;\n      }\n\n      priceEl.setAttribute('data-currency', newCurrency);\n    }\n\n    /**\n     * Convert all prices on the page to the new currency\n     *\n     * @param oldCurrency\n     * @param newCurrency\n     * @private\n     */\n\n  }, {\n    key: '_convertAll',\n    value: function _convertAll(oldCurrency, newCurrency) {\n      var priceEls = document.querySelectorAll(this.options.priceSelector);\n      if (!priceEls) return;\n\n      this.currentCurrency = newCurrency;\n      this._setStoredCurrency(newCurrency);\n\n      for (var i = 0; i < priceEls.length; i++) {\n        this._convertEl(priceEls[i], oldCurrency, newCurrency);\n      }\n    }\n  }]);\n  return CurrencyConverter;\n}();\n\nvar CurrencyConverter$1 = new CurrencyConverter();\n\nvar dist$2 = CurrencyConverter$1;\n\nvar script$1 = createCommonjsModule(function (module) {\n/*!\n  * $script.js JS loader & dependency manager\n  * https://github.com/ded/script.js\n  * (c) Dustin Diaz 2014 | License MIT\n  */\n\n(function (name, definition) {\n  if ('object' != 'undefined' && module.exports) module.exports = definition();\n  else if (typeof undefined == 'function' && undefined.amd) undefined(definition);\n  else this[name] = definition();\n})('$script', function () {\n  var doc = document\n    , head = doc.getElementsByTagName('head')[0]\n    , s = 'string'\n    , f = false\n    , push = 'push'\n    , readyState = 'readyState'\n    , onreadystatechange = 'onreadystatechange'\n    , list = {}\n    , ids = {}\n    , delay = {}\n    , scripts = {}\n    , scriptpath\n    , urlArgs;\n\n  function every(ar, fn) {\n    for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f\n    return 1\n  }\n  function each(ar, fn) {\n    every(ar, function (el) {\n      return !fn(el)\n    });\n  }\n\n  function $script(paths, idOrDone, optDone) {\n    paths = paths[push] ? paths : [paths];\n    var idOrDoneIsDone = idOrDone && idOrDone.call\n      , done = idOrDoneIsDone ? idOrDone : optDone\n      , id = idOrDoneIsDone ? paths.join('') : idOrDone\n      , queue = paths.length;\n    function loopFn(item) {\n      return item.call ? item() : list[item]\n    }\n    function callback() {\n      if (!--queue) {\n        list[id] = 1;\n        done && done();\n        for (var dset in delay) {\n          every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = []);\n        }\n      }\n    }\n    setTimeout(function () {\n      each(paths, function loading(path, force) {\n        if (path === null) return callback()\n        \n        if (!force && !/^https?:\\/\\//.test(path) && scriptpath) {\n          path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path;\n        }\n        \n        if (scripts[path]) {\n          return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true); }, 0)\n        }\n\n        scripts[path] = 1;\n        create(path, callback);\n      });\n    }, 0);\n    return $script\n  }\n\n  function create(path, fn) {\n    var el = doc.createElement('script'), loaded;\n    el.onload = el.onerror = el[onreadystatechange] = function () {\n      if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return;\n      el.onload = el[onreadystatechange] = null;\n      loaded = 1;\n      scripts[path] = 2;\n      fn();\n    };\n    el.async = 1;\n    el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path;\n    head.insertBefore(el, head.lastChild);\n  }\n\n  $script.get = create;\n\n  $script.order = function (scripts, id, done) {\n    (function callback(s) {\n      s = scripts.shift();\n      !scripts.length ? $script(s, id, done) : $script(s, callback);\n    }());\n  };\n\n  $script.path = function (p) {\n    scriptpath = p;\n  };\n  $script.urlArgs = function (str) {\n    urlArgs = str;\n  };\n  $script.ready = function (deps, ready, req) {\n    deps = deps[push] ? deps : [deps];\n    var missing = [];\n    !each(deps, function (dep) {\n      list[dep] || missing[push](dep);\n    }) && every(deps, function (dep) {return list[dep]}) ?\n      ready() : !function (key) {\n      delay[key] = delay[key] || [];\n      delay[key][push](ready);\n      req && req(missing);\n    }(deps.join('|'));\n    return $script\n  };\n\n  $script.done = function (idOrDone) {\n    $script([null], idOrDone);\n  };\n\n  return $script\n});\n});\n\nvar eventHandlers = [];\nvar previousBreakpoint = null;\n\njquery$1(window).on('resize', function (event) {\n  var currentBreakpoint = getBreakpoint();\n\n  if (previousBreakpoint !== currentBreakpoint) {\n    eventHandlers.forEach(function (eventHandler) {\n      eventHandler(event, {\n        previous: previousBreakpoint,\n        current: currentBreakpoint\n      });\n    });\n  }\n\n  previousBreakpoint = currentBreakpoint;\n});\n\nfunction getBreakpoint() {\n  return window.getComputedStyle(document.documentElement, ':after').getPropertyValue('content').replace(/\"/g, '');\n}\n\nfunction isBreakpoint(breakpoint) {\n  return getBreakpoint() === breakpoint;\n}\n\nfunction onBreakpointChange(eventHandler) {\n  if (eventHandlers.indexOf(eventHandler) === -1) {\n    eventHandlers.push(eventHandler);\n  }\n}\n\nfunction offBreakpointChange(eventHandler) {\n  var index = eventHandlers.indexOf(eventHandler);\n\n  if (index !== -1) {\n    eventHandlers.splice(index, 1);\n  }\n}\n\nvar layout = {\n  isBreakpoint: isBreakpoint,\n  onBreakpointChange: onBreakpointChange,\n  offBreakpointChange: offBreakpointChange\n};\n\nvar ignoredEls = ['data-mobile-nav', 'data-site-navigation'];\n\nfunction isIgnored(element) {\n  // Disallow if element is a <script>\n  if (element.tagName === 'SCRIPT') {\n    return true;\n  }\n\n  // Allow if element has no attributes\n  if (element.attributes.length === 0) {\n    return false;\n  }\n\n  // Check if any attributes match to the ignore list\n  return [].slice.call(element.attributes).some(function (attr) {\n    return ignoredEls.indexOf(attr.name) !== -1;\n  });\n}\n\n/**\n * Get the offset of the header\n *\n * @param {HTMLElement} header\n * @param {Boolean} withAnnouncementBar\n * @returns {number}\n */\nfunction getHeaderOffset(header) {\n  var withAnnouncementBar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var headerEls = header.childNodes;\n  var isSticky = header.querySelector('[data-site-header-sticky]');\n  var _window = window,\n      pageYOffset = _window.pageYOffset;\n\n  var offset = 0;\n\n  if (isSticky) {\n    for (var i = 0; i < headerEls.length; i++) {\n      if (headerEls[i] instanceof HTMLElement && !isIgnored(headerEls[i])) {\n        offset += headerEls[i].getBoundingClientRect().height;\n      }\n    }\n\n    if (jquery$1(header).hasClass('site-header-sticky--open') || pageYOffset === 0) {\n      offset += header.querySelector('[data-site-navigation]').getBoundingClientRect().height;\n    }\n  } else {\n    // If is not sticky header, then DOM can be trusted to return values\n    var _header$getBoundingCl = header.getBoundingClientRect(),\n        bottom = _header$getBoundingCl.bottom;\n\n    offset = bottom > 0 ? bottom : 0;\n  }\n\n  if (withAnnouncementBar) {\n    offset += parseInt(header.style.top, 10) || 0;\n  }\n\n  return offset;\n}\n\nvar StickyHeader = function () {\n  function StickyHeader(options, settings) {\n    classCallCheck(this, StickyHeader);\n\n    this.postMessage = options.postMessage;\n    this.$body = jquery$1(document.body);\n    this.$window = jquery$1(window);\n    this.$siteMain = jquery$1('.site-main');\n\n    this.$el = options.$el;\n    this.$toggle = options.$toggle;\n    this.settings = settings;\n\n    this.stickyClass = 'site-header-sticky';\n    this.scrolledClass = 'site-header-sticky--scrolled';\n    this.navOpenClass = 'site-header-sticky--open';\n\n    this.$announcementBar = this.$el.find('.announcement-bar');\n    this.header = this.$el[0];\n\n    if (!this.settings.sticky_header) {\n      return this._stickyReset();\n    }\n\n    // Revert navigation to original state on breakpoint change\n    this.navVisibility = this.navVisibility.bind(this);\n    layout.onBreakpointChange(this.navVisibility);\n\n    this._stickyOffset = this._stickyOffset.bind(this);\n    layout.onBreakpointChange(this._stickyOffset);\n\n    this._toggleStickyHeader = this._toggleStickyHeader.bind(this);\n    this._headerChecker = this._headerChecker.bind(this);\n\n    this.slideToggle = this._slideToggle.bind(this);\n\n    this._init();\n  }\n\n  createClass(StickyHeader, [{\n    key: 'closeNavigation',\n    value: function closeNavigation() {\n      var _this = this;\n\n      if (!this.settings.sticky_header) return;\n\n      this.$el.removeClass(this.navOpenClass).one('trend', function () {\n        _this.$body.trigger('position-banners');\n      });\n      this.postMessage('nav:close-all');\n    }\n  }, {\n    key: 'openNavigation',\n    value: function openNavigation() {\n      var _this2 = this;\n\n      this.$el.addClass(this.navOpenClass).one('trend', function () {\n        _this2.$body.trigger('position-banners');\n      });\n    }\n  }, {\n    key: 'navVisibility',\n    value: function navVisibility(event, breakpoints) {\n      if (breakpoints.previous === 'L') this.closeNavigation();\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      if (!this.settings.sticky_header) return;\n\n      this.$body.removeClass(this.stickyClass).removeClass(this.scrolledClass);\n\n      this.$toggle.off('.sticky-header');\n      this.$window.off('.sticky-header');\n\n      layout.offBreakpointChange(this.navVisibility);\n      layout.offBreakpointChange(this._stickyOffset);\n\n      if (this.requestAnimationFrameId) {\n        window.cancelAnimationFrame(this.requestAnimationFrameId);\n      }\n    }\n  }, {\n    key: '_init',\n    value: function _init() {\n      this._stickyOffset(true);\n      this._bindEvents();\n\n      if (window.requestAnimationFrame) {\n        this._headerChecker();\n      }\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this3 = this;\n\n      this.$toggle.on('click.sticky-header', function (event) {\n        event.preventDefault();\n\n        if (layout.isBreakpoint('L')) _this3._slideToggle();\n      });\n\n      this.$window.on('scroll.sticky-header', this._toggleStickyHeader);\n    }\n  }, {\n    key: '_stickyReset',\n    value: function _stickyReset() {\n      this.$siteMain.css('paddingTop', '');\n    }\n\n    /**\n     * Determine the offset when breakpoints change\n     *  - Offset is used to determine scroll threshold\n     *  - Offset is used to set a body offset on browsers that don't support Sticky\n     *\n     * @param isInit\n     * @private\n     */\n\n  }, {\n    key: '_stickyOffset',\n    value: function _stickyOffset(isInit) {\n      if (!this.$body.hasClass(this.stickyClass)) {\n        this.$body.addClass(this.stickyClass);\n      }\n\n      var offset = getHeaderOffset(this.header);\n\n      this.$siteMain.css('paddingTop', offset);\n\n      if (isInit) {\n        this._toggleStickyHeader();\n      }\n    }\n\n    /**\n     * Open or close the navigation\n     *\n     * @param open\n     * @private\n     */\n\n  }, {\n    key: '_slideToggle',\n    value: function _slideToggle() {\n      var open = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.$el.hasClass(this.navOpenClass) && !open) {\n        this.closeNavigation();\n        this.$toggle.removeClass('active');\n      } else {\n        this.openNavigation();\n        this.$toggle.addClass('active');\n      }\n    }\n\n    /**\n     *\n     *\n     * @param hide\n     * @private\n     */\n\n  }, {\n    key: '_toggleAnnouncementBar',\n    value: function _toggleAnnouncementBar() {\n      var _this4 = this;\n\n      var hide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.$announcementBar.length) {\n        return;\n      }\n\n      var top = 0;\n\n      if (hide) {\n        var mobileOnly = this.$announcementBar.hasClass('only-mobile');\n\n        if (layout.isBreakpoint('XS') && mobileOnly || !mobileOnly) {\n          top = this.$announcementBar.outerHeight() * -1;\n        }\n      }\n\n      this.$el.css('top', top).one('trend', function () {\n        _this4.$body.trigger('position-banners');\n      });\n    }\n\n    /**\n     * Sticky header only shows as sticky after scroll\n     *\n     * @private\n     */\n\n  }, {\n    key: '_toggleStickyHeader',\n    value: function _toggleStickyHeader() {\n      if (this.$body.hasClass('scroll-lock')) {\n        return;\n      }\n\n      var scrollThreshold = getHeaderOffset(this.header) + 20; // Extend threshold 20px past header\n      var shouldShrink = window.pageYOffset > scrollThreshold;\n\n      // Sticky header is scrolled, is and is visible -- nothing more to do!\n      if (shouldShrink && this.$body.hasClass(this.scrolledClass)) {\n        return;\n      }\n\n      if (shouldShrink) {\n        this._shrink();\n        this._toggleAnnouncementBar(true);\n      } else {\n        this._expand();\n        this._toggleAnnouncementBar(false);\n      }\n    }\n  }, {\n    key: '_shrink',\n    value: function _shrink() {\n      var _this5 = this;\n\n      this.closeNavigation();\n      this.$toggle.removeClass('active');\n\n      this.$el.revealer('show').one('revealer-animating.sticky-header', function () {\n        _this5.$body.addClass(_this5.scrolledClass).one('trend', function () {\n          _this5.$body.trigger('position-banners');\n        });\n      });\n    }\n  }, {\n    key: '_expand',\n    value: function _expand() {\n      var _this6 = this;\n\n      this.openNavigation();\n\n      this.$el.revealer('hide').one('revealer-animating.sticky-header', function () {\n        _this6.$body.removeClass(_this6.scrolledClass).one('trend', function () {\n          _this6.$body.trigger('position-banners');\n        });\n      }).one('revealer-hide.sticky-header', function () {\n        _this6.$toggle.removeClass('active');\n      });\n    }\n  }, {\n    key: '_headerChecker',\n    value: function _headerChecker() {\n      // Periodically check to make sure header is offset correctly\n      //this.requestAnimationFrameId = window.requestAnimationFrame(this._headerChecker);\n\n      if (!this.$body.hasClass(this.scrolledClass)) {\n        this._stickyOffset();\n      }\n    }\n  }]);\n  return StickyHeader;\n}();\n\nvar Accordion = function () {\n  function Accordion($el) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    classCallCheck(this, Accordion);\n\n    this.$el = $el;\n\n    this.options = jquery$1.extend({}, {\n      activeClass: 'accordion--active',\n      autoCollapse: false,\n      content: '[data-accordion-content]',\n      eligibleClass: 'has-accordion'\n    }, options);\n  }\n\n  createClass(Accordion, [{\n    key: 'toggle',\n    value: function toggle($block) {\n      var open = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (open || !$block.hasClass(this.options.activeClass)) {\n        if (this.options.autoCollapse) this.closeOpen();\n        this._open($block);\n      } else {\n        this._close($block);\n      }\n    }\n  }, {\n    key: 'closeOpen',\n    value: function closeOpen() {\n      var _this = this;\n\n      jquery$1(this.$el.find('.' + this.options.activeClass)).each(function (i, block) {\n        var $block = jquery$1(block);\n        if ($block.hasClass(_this.options.activeClass)) {\n          _this._close($block);\n        }\n      });\n    }\n  }, {\n    key: 'openAll',\n    value: function openAll() {\n      var _this2 = this;\n\n      jquery$1(this.$el.find('.' + this.options.eligibleClass)).each(function (i, block) {\n        _this2._open(jquery$1(block), 0);\n      });\n    }\n  }, {\n    key: '_open',\n    value: function _open($block) {\n      $block.addClass(this.options.activeClass);\n    }\n  }, {\n    key: '_close',\n    value: function _close($block) {\n      $block.removeClass(this.options.activeClass);\n    }\n  }]);\n  return Accordion;\n}();\n\nvar NavMobileSubMenus = function () {\n  function NavMobileSubMenus($el) {\n    classCallCheck(this, NavMobileSubMenus);\n\n    this.$el = $el;\n\n    this.Accordion = new Accordion(this.$el, {\n      activeClass: 'visible',\n      content: '[data-accordion-content]'\n    });\n\n    // Sub menu selectors\n    this.activeMenuClass = 'navmenu-link-parent-active';\n    this.activeMenu = '.' + this.activeMenuClass;\n    this.navTrigger = '[data-navmenu-trigger]';\n    this.subMenu = '[data-navmenu-submenu]';\n\n    this._bindEvents();\n  }\n\n  createClass(NavMobileSubMenus, [{\n    key: 'unload',\n    value: function unload() {\n      this.$el.off('.mobile-nav');\n\n      delete this.Accordion;\n    }\n  }, {\n    key: 'closeSubMenus',\n    value: function closeSubMenus($current) {\n      var _this = this;\n\n      $current.find(this.activeMenu).each(function (index, el) {\n        _this._closeSubmenu(jquery$1(el));\n      });\n    }\n  }, {\n    key: 'closeAllSubmenus',\n    value: function closeAllSubmenus() {\n      this.Accordion.closeOpen();\n    }\n  },  {\n    key: 'openAllSubmenus',\n    value: function openAllSubmenus($current) {\n      var _this = this;\n    \n      $current.find(this.navTrigger + ' > .navmenu-link-parent').each(function (index, el) {\n        _this._openSubmenu(jquery$1(el));\n      });\n    }\n  },\n\t{\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this2 = this;\n\n      // Prevent focus state from applying on mouse click\n      this.$el.on('mousedown.mobile-nav', '.navmenu-link', function (event) {\n        event.preventDefault();\n      });\n\n      this.$el.on('click.mobile-nav', this.navTrigger + ' > .navmenu-link-parent.icon', function (event) {\n        event.preventDefault();\n        _this2._toggleSubmenu(event);\n      });\n    }\n  }, {\n    key: '_selectSubMenu',\n    value: function _selectSubMenu($target) {\n      return $target.next(this.subMenu);\n    }\n  }, {\n    key: '_toggleSubmenu',\n    value: function _toggleSubmenu(event) {\n      var $target = jquery$1(event.currentTarget);\n\n      if ($target.hasClass(this.activeMenuClass)) {\n        this._closeSubmenu($target);\n      } else {\n        this._openSubmenu($target);\n      }\n    }\n  }, {\n    key: '_openSubmenu',\n    value: function _openSubmenu($target) {\n      var $menu = this._selectSubMenu($target);\n\n      $target.addClass(this.activeMenuClass).attr('aria-expanded', true);\n      this.Accordion.toggle($menu);\n      \n    }\n  }, {\n    key: '_closeSubmenu',\n    value: function _closeSubmenu($target) {\n      var $menu = this._selectSubMenu($target);\n\n      $target.removeClass(this.activeMenuClass).attr('aria-expanded', false);\n      this.Accordion.toggle($menu);\n      this.closeSubMenus($menu);\n    }\n  }]);\n  return NavMobileSubMenus;\n}();\n\nvar NavMobile = function () {\n  function NavMobile(elements) {\n    classCallCheck(this, NavMobile);\n\n    this.$body = jquery$1(document.body);\n    this.$window = jquery$1(window);\n    this.$el = elements.$el;\n    this.$toggleOpen = elements.$toggleOpen;\n    this.isOpen = false;\n    this.subMenus = null;\n\n    this.$mobileNav = this.$el.find('[data-mobile-nav]');\n    this.$panel = this.$el.find('[data-mobile-nav-panel]');\n    this.$overlay = this.$el.find('[data-mobile-nav-overlay]');\n    this.$toggleClose = this.$el.find('[data-mobile-nav-close]');\n\n    // Revert navigation to original state on breakpoint change\n    this.layoutHandler = this.onBreakpointChange.bind(this);\n    layout.onBreakpointChange(this.layoutHandler);\n\n    this._bindEvents();\n  }\n\n  createClass(NavMobile, [{\n    key: 'unload',\n    value: function unload() {\n      this._close();\n      this.$window.off('resize.mobile-nav');\n      layout.offBreakpointChange(this.layoutHandler);\n    }\n  }, {\n    key: 'onBreakpointChange',\n    value: function onBreakpointChange() {\n      if (layout.isBreakpoint('L') && this.isOpen) {\n        this._close();\n      }\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this = this;\n\n      this.$toggleOpen.on('click.mobile-nav', function (event) {\n        event.preventDefault();\n\n        if (!layout.isBreakpoint('L')) _this._open();\n      });\n\n      this.$window.on('resize.mobile-nav', function () {\n        _this.$el.find('[data-menu-toggle]').removeClass('active');\n\n        if (_this.isOpen) {\n          _this._setPanelHeight();\n        }\n      });\n    }\n  }, {\n    key: '_setPanelHeight',\n    value: function _setPanelHeight() {\n      this.$panel.height(window.innerHeight);\n    }\n  }, {\n    key: '_open',\n    value: function _open() {\n      var _this2 = this;\n\n      this.$body.addClass('scroll-lock');\n      this.isOpen = true;\n\n      // Activate Submenu handler\n      this.subMenus = new NavMobileSubMenus(this.$panel);\n      if (this.subMenus) {  \n        //this.subMenus.openAllSubmenus(this.$mobileNav);\n      } \n      this._setPanelHeight();\n\n      // Animate in elements\n      this.$mobileNav.addClass('animating animating-in').one('trend', function () {\n        _this2.$mobileNav.removeClass('animating animating-in').addClass('visible').off('trend');\n      });\n\n      // Event handlers\n      this.events = [\n      // Close menu when clicking on the overlay\n      this.$overlay.on('click.mobile-nav', function (event) {\n        return _this2._close(event);\n      }), this.$toggleClose.on('click.mobile-nav', function (event) {\n        return _this2._close(event);\n      }),\n\n      // Disable scrolling on overlay and contactbar\n      this.$overlay.on('touchmove.mobile-nav', function (event) {\n        return event.preventDefault();\n      })];\n    }\n  }, {\n    key: '_close',\n    value: function _close() {\n      var _this3 = this;\n\n      var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (event) event.preventDefault();\n\n      this.$mobileNav.addClass('animating animating-out').one('trend', function () {\n        _this3.$mobileNav.removeClass('animating animating-out').removeClass('visible').off('trend');\n      });\n\n      this.$body.removeClass('scroll-lock');\n      this.isOpen = false;\n\n      // Close any open drop down menus\n      if (this.subMenus) {\n        this.subMenus.closeSubMenus(this.$el);\n        this.subMenus.closeAllSubmenus();\n\n        // Unbind Mobile sub menus\n        this.subMenus.unload();\n      }\n\n      // Unbind events\n      if (this.events) {\n        this.events.forEach(function ($el) {\n          return $el.off('.mobile-nav');\n        });\n        this.events = [];\n      }\n    }\n  }]);\n  return NavMobile;\n}();\n\nfunction scrollLeft($el) {\n  var $container = $el.parent();\n\n  $container.animate({\n    scrollLeft: $el.offset().left - $el.width() / 2 - $container.width() / 2\n  });\n}\n\nvar MegaNavScroller = function () {\n  function MegaNavScroller($el) {\n    var block = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    classCallCheck(this, MegaNavScroller);\n\n    this.$el = $el;\n    this.$menuList = this.$el.find('.navmenu-meganav-items');\n\n    this._bindEvents();\n    this._addScrollClasses();\n\n    if (block) {\n      scrollLeft(jquery$1(block.el));\n    }\n  }\n\n  createClass(MegaNavScroller, [{\n    key: 'unload',\n    value: function unload() {\n      this.$menuList.off('.meganav');\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this = this;\n\n      this.$menuList.on('scroll.meganav', function () {\n        return _this._addScrollClasses();\n      });\n    }\n  }, {\n    key: '_addScrollClasses',\n    value: function _addScrollClasses() {\n      var scrollLeft$$1 = this.$menuList.scrollLeft();\n      var scrollWidth = this.$menuList[0].scrollWidth;\n      var width = this.$menuList.width();\n\n      this.$el.toggleClass('meganav--overflows-left', scrollLeft$$1 > 0);\n      this.$el.toggleClass('meganav--overflows-right', scrollLeft$$1 < scrollWidth - width);\n    }\n  }]);\n  return MegaNavScroller;\n}();\n\nvar NavDesktop = function () {\n  function NavDesktop(options) {\n    var _this = this;\n\n    classCallCheck(this, NavDesktop);\n\n    this.$el = jquery$1(options.$el);\n    this.postMessage = options.postMessage;\n\n    this.activeMenu = 'navmenu-active';\n    this.activeItem = 'navmenu-item-active';\n    this.navTrigger = '[data-navmenu-trigger]';\n    this.subMenu = '[data-navmenu-submenu]';\n\n    this.inlineChildren = 'navmenu-submenu-inline-children';\n\n    this.events = [\n    // Navmenu mouse events\n    this.$el.on('mousedown.navmenu', '.navmenu-link .navmenu-icon', function (event) {\n      event.preventDefault();\n\n      // Add a class to actively clicked item to prevent focus styling\n      var $target = jquery$1(event.currentTarget);\n\n      _this.$el.find('.' + _this.activeItem).removeClass(_this.activeItem);\n\n      $target.addClass(_this.activeItem).attr('aria-expanded', true);\n    }), this.$el.on('mouseup.navemenu, click.navmenu', '.navmenu-depth-1 > ' + this.navTrigger + ' > .navmenu-link-parent .navmenu-icon', function (event) {\n      // Mouseup and click fire after mousedown\n      return event.preventDefault();\n    }), this.$el.on('mousedown.navmenu', this.navTrigger + ' > .navmenu-link-parent .navmenu-icon', function (event) {\n      event.preventDefault();\n\n      var $target = jquery$1(event.currentTarget);\n\n      if ($target.is(':focus')) {\n        $target.data('clicked', true);\n      }\n\n      _this.toggleItem(event.currentTarget.parentNode);\n    }),\n\n    // Toggle item on touch, and click\n    this.$el.on('touchend.navmenu mouseover.navmenu', this.navTrigger + ' > .navmenu-link-parent, ' + this.navTrigger + ' > .navmenu-link-parent span', function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n      _this.toggleItem(event.currentTarget.parentNode);\n    }), \n      \n    this.$el.on('mouseleave.navmenu', this.navTrigger + ' > .navmenu-submenu', function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n      _this.closeItem(event.currentTarget.parentNode);\n    }), \n      \n      \n    // Keyboard navigation -- toggle submenus\n    this.$el.on('focus.navmenu', this.navTrigger + ' > .navmenu-link-parent', function (event) {\n      event.stopPropagation();\n\n      var $target = jquery$1(event.currentTarget);\n      var clicked = $target.data('clicked');\n\n      // Prevent focus by click to fire a subsequent toggle\n      if (clicked) {\n        $target.removeData('clicked');\n      } else {\n        _this.toggleItem(event.currentTarget.parentNode);\n      }\n    }),\n\n    // Keyboard navigation -- close submenus when moving to a new nav item\n    this.$el.on('focus.navmenu', '.navmenu-depth-1 > .navmenu-item .navmenu-link', function (event) {\n      _this.closeAll(event.currentTarget);\n    })];\n  }\n\n  createClass(NavDesktop, [{\n    key: 'unload',\n    value: function unload() {\n      this.events.forEach(function ($el) {\n        return $el.off('.navmenu');\n      });\n\n      if (this.megaNav) {\n        delete this.megaNav;\n      }\n    }\n\n    /**\n     * Open the MegaNav\n     * @param $menu\n     * @param block\n     */\n\n  }, {\n    key: 'openMegaNav',\n    value: function openMegaNav($menu, block) {\n      this.megaNav = new MegaNavScroller($menu, block);\n    }\n\n    /**\n     * Open a dropdown menu, or scroll to a meganav item\n     *\n     * @param el - Parent LI containing sub menu\n     * @param block - Meganav menu block\n     */\n\n  }, {\n    key: 'openItem',\n    value: function openItem(el) {\n      var _this2 = this;\n\n      var block = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      var $el = jquery$1(el);\n\n      // Check if menu is already open\n      var $menu = $el.children(this.subMenu);\n      if ($menu.is(':visible')) {\n        // If its not a meganav, do nothing\n        if ($menu.attr('data-meganav-menu') === undefined) return;\n\n        // If its a meganav, scroll horizontally to the item\n        scrollLeft(jquery$1(block.el));\n        return;\n      }\n\n      // Close previously opened items\n      this.closeAll(el);\n\n      $el.data('transitioning', true);\n      var $parent = $menu.parent(this.navTrigger);\n\n      // Add an active class to the menu's parent\n      $parent.find('.navmenu-link-parent:first').addClass(this.activeMenu);\n\n      // Show menu\n      $menu.addClass('animating animating-in').one('trend', function () {\n        $menu.removeClass('animating animating-in').addClass('visible').off('trend');\n\n        _this2._inlineMenu($menu);\n\n        $el.data('transitioning', false);\n        $parent.find('> .navmenu-link').attr('aria-expanded', true);\n\n        // Load MegaNavScroller if is a mega nav\n        if ($menu.attr('data-meganav-menu') !== undefined) {\n          _this2.openMegaNav($menu, block);\n        }\n      });\n    }\n  }, {\n    key: 'closeAll',\n    value: function closeAll(target) {\n      var _this3 = this;\n\n      this.$el.find(this.subMenu + '.visible, ' + this.subMenu + '.animating-in').parent(this.navTrigger).each(function (i, el) {\n        if (target && jquery$1.contains(el, target)) return;\n\n        // Close any submenus in this tree\n        jquery$1(el).find(_this3.navTrigger).each(function (i, submenu) {\n          return _this3.closeItem(submenu);\n        });\n\n        // Close root-level menu item\n        _this3.closeItem(el);\n      });\n    }\n  }, {\n    key: 'closeItem',\n    value: function closeItem(el) {\n      var _this4 = this;\n\n      var $el = jquery$1(el);\n      var $menu = $el.children(this.subMenu + '.visible, ' + this.subMenu + '.animating-in');\n      var $parent = $menu.parent(this.navTrigger);\n      if (!$menu.length) return;\n\n      // Menu is in the progress of being animated, try in 300ms\n      if ($el.data('transitioning')) {\n        setTimeout(function () {\n          return _this4.closeItem(el);\n        }, 300);\n      }\n\n      // Add an active class to the menu's parent\n      $parent.find('.navmenu-link-parent:first').removeClass(this.activeMenu);\n\n      // Ensure $menu is scrolled to top\n      if ($menu.hasClass(this.inlineChildren)) {\n        $menu.scrollTop(0);\n      }\n\n      // Hide menu\n      $menu.addClass('animating animating-out').removeClass('animating-in').one('trend', function () {\n        $menu.removeClass('animating animating-out visible').off('trend');\n\n        $parent.find('> .navmenu-link').attr('aria-expanded', false);\n\n        // Unload MegaNavScroller if is a mega-nav\n        if ($menu.data('meganav-menu') !== undefined && _this4.megaNav) {\n          _this4.megaNav.unload();\n          _this4.megaNav = null;\n        }\n      });\n    }\n  }, {\n    key: 'toggleItem',\n    value: function toggleItem(el) {\n      var $el = jquery$1(el);\n      var $menu = $el.children(this.subMenu);\n\n      if ($menu.is(':visible')) {\n        this.closeItem(el);\n      } else {\n        this.openItem(el);\n      }\n    }\n  }, {\n    key: '_handleDocumentClick',\n    value: function _handleDocumentClick(target) {\n      var $parent = jquery$1(target).parents(this.navTrigger);\n      if ($parent.length) return;\n\n      this.closeAll();\n    }\n  }, {\n    key: '_menuLimits',\n    value: function _menuLimits($menu) {\n      var windowHeight = window.innerHeight;\n      var windowWidth = window.innerWidth;\n      var menuRect = $menu[0].getBoundingClientRect();\n      var hasChildren = $menu.find(this.subMenu).length > 0;\n      var stickyHeaderOffset = jquery$1('.site-header-sticky--scrolled').length ? 20 : 0; // Padding difference\n      var edges = {\n        bottomEdge: menuRect.bottom + stickyHeaderOffset,\n        rightEdge: menuRect.right + menuRect.width\n      };\n\n      // Store bottom offset for subsequent openings\n      if (!$menu.data('bottom-edge') || $menu.data('bottom-edge') !== edges.bottomEdge) {\n        $menu.data('bottom-edge', edges.bottomEdge);\n      }\n\n      // Store child menu right edge\n      if (!$menu.data('right-edge') || $menu.data('right-edge') !== edges.rightEdge) {\n        $menu.data('right-edge', edges.rightEdge);\n      }\n\n      var bottomEdge = parseInt($menu.data('bottom-edge'), 10);\n      var rightEdge = parseInt($menu.data('right-edge'), 10);\n\n      return {\n        childrenExceedHorizontal: rightEdge >= windowWidth && hasChildren,\n        exceedsVertical: bottomEdge >= windowHeight,\n        maxHeight: windowHeight - menuRect.top\n      };\n    }\n\n    /**\n     * Set a menu to be\n     */\n\n  }, {\n    key: '_inlineMenu',\n    value: function _inlineMenu($menu) {\n      var _menuLimits2 = this._menuLimits($menu),\n          childrenExceedHorizontal = _menuLimits2.childrenExceedHorizontal,\n          exceedsVertical = _menuLimits2.exceedsVertical,\n          maxHeight = _menuLimits2.maxHeight;\n\n      // Unset inline style if height allows, and children menu don't exceed window bounds\n\n\n      if (!exceedsVertical && !childrenExceedHorizontal) {\n        return this._unsetInlineMenu($menu);\n      }\n\n      return $menu.css({ maxHeight: maxHeight }).addClass(this.inlineChildren);\n    }\n  }, {\n    key: '_unsetInlineMenu',\n    value: function _unsetInlineMenu($menu) {\n      $menu.removeAttr('data-bottom-edge').removeAttr('data-right-edge').removeClass(this.inlineChildren).css('max-height', '');\n    }\n  }]);\n  return NavDesktop;\n}();\n\nvar justDebounce$1 = debounce;\n\nfunction debounce (fn, delay, at_start, guarantee) {\n  var timeout;\n  var args;\n  var self;\n\n  return function debounced () {\n    self = this;\n    args = Array.prototype.slice.call(arguments);\n\n    if (timeout && (at_start || guarantee)) {\n      return\n    } else if (!at_start) {\n      clear();\n\n      timeout = setTimeout(run, delay);\n      return timeout\n    }\n\n    timeout = setTimeout(clear, delay);\n    fn.apply(self, args);\n\n    function run () {\n      clear();\n      fn.apply(self, args);\n    }\n\n    function clear () {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  }\n}\n\nvar eventemitter2 = createCommonjsModule(function (module, exports) {\n/*!\n * EventEmitter2\n * https://github.com/hij1nx/EventEmitter2\n *\n * Copyright (c) 2013 hij1nx\n * Licensed under the MIT license.\n */\n!function(undefined) {\n\n  var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {\n    return Object.prototype.toString.call(obj) === \"[object Array]\";\n  };\n  var defaultMaxListeners = 10;\n\n  function init() {\n    this._events = {};\n    if (this._conf) {\n      configure.call(this, this._conf);\n    }\n  }\n\n  function configure(conf) {\n    if (conf) {\n      this._conf = conf;\n\n      conf.delimiter && (this.delimiter = conf.delimiter);\n      this._events.maxListeners = conf.maxListeners !== undefined ? conf.maxListeners : defaultMaxListeners;\n      conf.wildcard && (this.wildcard = conf.wildcard);\n      conf.newListener && (this.newListener = conf.newListener);\n      conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak);\n\n      if (this.wildcard) {\n        this.listenerTree = {};\n      }\n    } else {\n      this._events.maxListeners = defaultMaxListeners;\n    }\n  }\n\n  function logPossibleMemoryLeak(count, eventName) {\n    var errorMsg = '(node) warning: possible EventEmitter memory ' +\n        'leak detected. %d listeners added. ' +\n        'Use emitter.setMaxListeners() to increase limit.';\n\n    if(this.verboseMemoryLeak){\n      errorMsg += ' Event name: %s.';\n      console.error(errorMsg, count, eventName);\n    } else {\n      console.error(errorMsg, count);\n    }\n\n    if (console.trace){\n      console.trace();\n    }\n  }\n\n  function EventEmitter(conf) {\n    this._events = {};\n    this.newListener = false;\n    this.verboseMemoryLeak = false;\n    configure.call(this, conf);\n  }\n  EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property\n\n  //\n  // Attention, function return type now is array, always !\n  // It has zero elements if no any matches found and one or more\n  // elements (leafs) if there are matches\n  //\n  function searchListenerTree(handlers, type, tree, i) {\n    if (!tree) {\n      return [];\n    }\n    var listeners=[], leaf, len, branch, xTree, xxTree, isolatedBranch, endReached,\n        typeLength = type.length, currentType = type[i], nextType = type[i+1];\n    if (i === typeLength && tree._listeners) {\n      //\n      // If at the end of the event(s) list and the tree has listeners\n      // invoke those listeners.\n      //\n      if (typeof tree._listeners === 'function') {\n        handlers && handlers.push(tree._listeners);\n        return [tree];\n      } else {\n        for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) {\n          handlers && handlers.push(tree._listeners[leaf]);\n        }\n        return [tree];\n      }\n    }\n\n    if ((currentType === '*' || currentType === '**') || tree[currentType]) {\n      //\n      // If the event emitted is '*' at this part\n      // or there is a concrete match at this patch\n      //\n      if (currentType === '*') {\n        for (branch in tree) {\n          if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\n            listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+1));\n          }\n        }\n        return listeners;\n      } else if(currentType === '**') {\n        endReached = (i+1 === typeLength || (i+2 === typeLength && nextType === '*'));\n        if(endReached && tree._listeners) {\n          // The next element has a _listeners, add it to the handlers.\n          listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength));\n        }\n\n        for (branch in tree) {\n          if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\n            if(branch === '*' || branch === '**') {\n              if(tree[branch]._listeners && !endReached) {\n                listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength));\n              }\n              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\n            } else if(branch === nextType) {\n              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+2));\n            } else {\n              // No match on this one, shift into the tree but not in the type array.\n              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\n            }\n          }\n        }\n        return listeners;\n      }\n\n      listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i+1));\n    }\n\n    xTree = tree['*'];\n    if (xTree) {\n      //\n      // If the listener tree will allow any match for this part,\n      // then recursively explore all branches of the tree\n      //\n      searchListenerTree(handlers, type, xTree, i+1);\n    }\n\n    xxTree = tree['**'];\n    if(xxTree) {\n      if(i < typeLength) {\n        if(xxTree._listeners) {\n          // If we have a listener on a '**', it will catch all, so add its handler.\n          searchListenerTree(handlers, type, xxTree, typeLength);\n        }\n\n        // Build arrays of matching next branches and others.\n        for(branch in xxTree) {\n          if(branch !== '_listeners' && xxTree.hasOwnProperty(branch)) {\n            if(branch === nextType) {\n              // We know the next element will match, so jump twice.\n              searchListenerTree(handlers, type, xxTree[branch], i+2);\n            } else if(branch === currentType) {\n              // Current node matches, move into the tree.\n              searchListenerTree(handlers, type, xxTree[branch], i+1);\n            } else {\n              isolatedBranch = {};\n              isolatedBranch[branch] = xxTree[branch];\n              searchListenerTree(handlers, type, { '**': isolatedBranch }, i+1);\n            }\n          }\n        }\n      } else if(xxTree._listeners) {\n        // We have reached the end and still on a '**'\n        searchListenerTree(handlers, type, xxTree, typeLength);\n      } else if(xxTree['*'] && xxTree['*']._listeners) {\n        searchListenerTree(handlers, type, xxTree['*'], typeLength);\n      }\n    }\n\n    return listeners;\n  }\n\n  function growListenerTree(type, listener) {\n\n    type = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\n\n    //\n    // Looks for two consecutive '**', if so, don't add the event at all.\n    //\n    for(var i = 0, len = type.length; i+1 < len; i++) {\n      if(type[i] === '**' && type[i+1] === '**') {\n        return;\n      }\n    }\n\n    var tree = this.listenerTree;\n    var name = type.shift();\n\n    while (name !== undefined) {\n\n      if (!tree[name]) {\n        tree[name] = {};\n      }\n\n      tree = tree[name];\n\n      if (type.length === 0) {\n\n        if (!tree._listeners) {\n          tree._listeners = listener;\n        }\n        else {\n          if (typeof tree._listeners === 'function') {\n            tree._listeners = [tree._listeners];\n          }\n\n          tree._listeners.push(listener);\n\n          if (\n            !tree._listeners.warned &&\n            this._events.maxListeners > 0 &&\n            tree._listeners.length > this._events.maxListeners\n          ) {\n            tree._listeners.warned = true;\n            logPossibleMemoryLeak.call(this, tree._listeners.length, name);\n          }\n        }\n        return true;\n      }\n      name = type.shift();\n    }\n    return true;\n  }\n\n  // By default EventEmitters will print a warning if more than\n  // 10 listeners are added to it. This is a useful default which\n  // helps finding memory leaks.\n  //\n  // Obviously not all Emitters should be limited to 10. This function allows\n  // that to be increased. Set to zero for unlimited.\n\n  EventEmitter.prototype.delimiter = '.';\n\n  EventEmitter.prototype.setMaxListeners = function(n) {\n    if (n !== undefined) {\n      this._events || init.call(this);\n      this._events.maxListeners = n;\n      if (!this._conf) this._conf = {};\n      this._conf.maxListeners = n;\n    }\n  };\n\n  EventEmitter.prototype.event = '';\n\n  EventEmitter.prototype.once = function(event, fn) {\n    this.many(event, 1, fn);\n    return this;\n  };\n\n  EventEmitter.prototype.many = function(event, ttl, fn) {\n    var self = this;\n\n    if (typeof fn !== 'function') {\n      throw new Error('many only accepts instances of Function');\n    }\n\n    function listener() {\n      if (--ttl === 0) {\n        self.off(event, listener);\n      }\n      return fn.apply(this, arguments);\n    }\n\n    listener._origin = fn;\n\n    this.on(event, listener);\n\n    return self;\n  };\n\n  EventEmitter.prototype.emit = function() {\n\n    this._events || init.call(this);\n\n    var type = arguments[0];\n\n    if (type === 'newListener' && !this.newListener) {\n      if (!this._events.newListener) {\n        return false;\n      }\n    }\n\n    var al = arguments.length;\n    var args,l,i,j;\n    var handler;\n\n    if (this._all && this._all.length) {\n      handler = this._all.slice();\n      if (al > 3) {\n        args = new Array(al);\n        for (j = 0; j < al; j++) args[j] = arguments[j];\n      }\n\n      for (i = 0, l = handler.length; i < l; i++) {\n        this.event = type;\n        switch (al) {\n        case 1:\n          handler[i].call(this, type);\n          break;\n        case 2:\n          handler[i].call(this, type, arguments[1]);\n          break;\n        case 3:\n          handler[i].call(this, type, arguments[1], arguments[2]);\n          break;\n        default:\n          handler[i].apply(this, args);\n        }\n      }\n    }\n\n    if (this.wildcard) {\n      handler = [];\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\n      searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\n    } else {\n      handler = this._events[type];\n      if (typeof handler === 'function') {\n        this.event = type;\n        switch (al) {\n        case 1:\n          handler.call(this);\n          break;\n        case 2:\n          handler.call(this, arguments[1]);\n          break;\n        case 3:\n          handler.call(this, arguments[1], arguments[2]);\n          break;\n        default:\n          args = new Array(al - 1);\n          for (j = 1; j < al; j++) args[j - 1] = arguments[j];\n          handler.apply(this, args);\n        }\n        return true;\n      } else if (handler) {\n        // need to make copy of handlers because list can change in the middle\n        // of emit call\n        handler = handler.slice();\n      }\n    }\n\n    if (handler && handler.length) {\n      if (al > 3) {\n        args = new Array(al - 1);\n        for (j = 1; j < al; j++) args[j - 1] = arguments[j];\n      }\n      for (i = 0, l = handler.length; i < l; i++) {\n        this.event = type;\n        switch (al) {\n        case 1:\n          handler[i].call(this);\n          break;\n        case 2:\n          handler[i].call(this, arguments[1]);\n          break;\n        case 3:\n          handler[i].call(this, arguments[1], arguments[2]);\n          break;\n        default:\n          handler[i].apply(this, args);\n        }\n      }\n      return true;\n    } else if (!this._all && type === 'error') {\n      if (arguments[1] instanceof Error) {\n        throw arguments[1]; // Unhandled 'error' event\n      } else {\n        throw new Error(\"Uncaught, unspecified 'error' event.\");\n      }\n      return false;\n    }\n\n    return !!this._all;\n  };\n\n  EventEmitter.prototype.emitAsync = function() {\n\n    this._events || init.call(this);\n\n    var type = arguments[0];\n\n    if (type === 'newListener' && !this.newListener) {\n        if (!this._events.newListener) { return Promise.resolve([false]); }\n    }\n\n    var promises= [];\n\n    var al = arguments.length;\n    var args,l,i,j;\n    var handler;\n\n    if (this._all) {\n      if (al > 3) {\n        args = new Array(al);\n        for (j = 1; j < al; j++) args[j] = arguments[j];\n      }\n      for (i = 0, l = this._all.length; i < l; i++) {\n        this.event = type;\n        switch (al) {\n        case 1:\n          promises.push(this._all[i].call(this, type));\n          break;\n        case 2:\n          promises.push(this._all[i].call(this, type, arguments[1]));\n          break;\n        case 3:\n          promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));\n          break;\n        default:\n          promises.push(this._all[i].apply(this, args));\n        }\n      }\n    }\n\n    if (this.wildcard) {\n      handler = [];\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\n      searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\n    } else {\n      handler = this._events[type];\n    }\n\n    if (typeof handler === 'function') {\n      this.event = type;\n      switch (al) {\n      case 1:\n        promises.push(handler.call(this));\n        break;\n      case 2:\n        promises.push(handler.call(this, arguments[1]));\n        break;\n      case 3:\n        promises.push(handler.call(this, arguments[1], arguments[2]));\n        break;\n      default:\n        args = new Array(al - 1);\n        for (j = 1; j < al; j++) args[j - 1] = arguments[j];\n        promises.push(handler.apply(this, args));\n      }\n    } else if (handler && handler.length) {\n      handler = handler.slice();\n      if (al > 3) {\n        args = new Array(al - 1);\n        for (j = 1; j < al; j++) args[j - 1] = arguments[j];\n      }\n      for (i = 0, l = handler.length; i < l; i++) {\n        this.event = type;\n        switch (al) {\n        case 1:\n          promises.push(handler[i].call(this));\n          break;\n        case 2:\n          promises.push(handler[i].call(this, arguments[1]));\n          break;\n        case 3:\n          promises.push(handler[i].call(this, arguments[1], arguments[2]));\n          break;\n        default:\n          promises.push(handler[i].apply(this, args));\n        }\n      }\n    } else if (!this._all && type === 'error') {\n      if (arguments[1] instanceof Error) {\n        return Promise.reject(arguments[1]); // Unhandled 'error' event\n      } else {\n        return Promise.reject(\"Uncaught, unspecified 'error' event.\");\n      }\n    }\n\n    return Promise.all(promises);\n  };\n\n  EventEmitter.prototype.on = function(type, listener) {\n    if (typeof type === 'function') {\n      this.onAny(type);\n      return this;\n    }\n\n    if (typeof listener !== 'function') {\n      throw new Error('on only accepts instances of Function');\n    }\n    this._events || init.call(this);\n\n    // To avoid recursion in the case that type == \"newListeners\"! Before\n    // adding it to the listeners, first emit \"newListeners\".\n    this.emit('newListener', type, listener);\n\n    if (this.wildcard) {\n      growListenerTree.call(this, type, listener);\n      return this;\n    }\n\n    if (!this._events[type]) {\n      // Optimize the case of one listener. Don't need the extra array object.\n      this._events[type] = listener;\n    }\n    else {\n      if (typeof this._events[type] === 'function') {\n        // Change to array.\n        this._events[type] = [this._events[type]];\n      }\n\n      // If we've already got an array, just append.\n      this._events[type].push(listener);\n\n      // Check for listener leak\n      if (\n        !this._events[type].warned &&\n        this._events.maxListeners > 0 &&\n        this._events[type].length > this._events.maxListeners\n      ) {\n        this._events[type].warned = true;\n        logPossibleMemoryLeak.call(this, this._events[type].length, type);\n      }\n    }\n\n    return this;\n  };\n\n  EventEmitter.prototype.onAny = function(fn) {\n    if (typeof fn !== 'function') {\n      throw new Error('onAny only accepts instances of Function');\n    }\n\n    if (!this._all) {\n      this._all = [];\n    }\n\n    // Add the function to the event listener collection.\n    this._all.push(fn);\n    return this;\n  };\n\n  EventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n  EventEmitter.prototype.off = function(type, listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('removeListener only takes instances of Function');\n    }\n\n    var handlers,leafs=[];\n\n    if(this.wildcard) {\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\n      leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\n    }\n    else {\n      // does not use listeners(), so no side effect of creating _events[type]\n      if (!this._events[type]) return this;\n      handlers = this._events[type];\n      leafs.push({_listeners:handlers});\n    }\n\n    for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {\n      var leaf = leafs[iLeaf];\n      handlers = leaf._listeners;\n      if (isArray(handlers)) {\n\n        var position = -1;\n\n        for (var i = 0, length = handlers.length; i < length; i++) {\n          if (handlers[i] === listener ||\n            (handlers[i].listener && handlers[i].listener === listener) ||\n            (handlers[i]._origin && handlers[i]._origin === listener)) {\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0) {\n          continue;\n        }\n\n        if(this.wildcard) {\n          leaf._listeners.splice(position, 1);\n        }\n        else {\n          this._events[type].splice(position, 1);\n        }\n\n        if (handlers.length === 0) {\n          if(this.wildcard) {\n            delete leaf._listeners;\n          }\n          else {\n            delete this._events[type];\n          }\n        }\n\n        this.emit(\"removeListener\", type, listener);\n\n        return this;\n      }\n      else if (handlers === listener ||\n        (handlers.listener && handlers.listener === listener) ||\n        (handlers._origin && handlers._origin === listener)) {\n        if(this.wildcard) {\n          delete leaf._listeners;\n        }\n        else {\n          delete this._events[type];\n        }\n\n        this.emit(\"removeListener\", type, listener);\n      }\n    }\n\n    function recursivelyGarbageCollect(root) {\n      if (root === undefined) {\n        return;\n      }\n      var keys = Object.keys(root);\n      for (var i in keys) {\n        var key = keys[i];\n        var obj = root[key];\n        if ((obj instanceof Function) || (typeof obj !== \"object\") || (obj === null))\n          continue;\n        if (Object.keys(obj).length > 0) {\n          recursivelyGarbageCollect(root[key]);\n        }\n        if (Object.keys(obj).length === 0) {\n          delete root[key];\n        }\n      }\n    }\n    recursivelyGarbageCollect(this.listenerTree);\n\n    return this;\n  };\n\n  EventEmitter.prototype.offAny = function(fn) {\n    var i = 0, l = 0, fns;\n    if (fn && this._all && this._all.length > 0) {\n      fns = this._all;\n      for(i = 0, l = fns.length; i < l; i++) {\n        if(fn === fns[i]) {\n          fns.splice(i, 1);\n          this.emit(\"removeListenerAny\", fn);\n          return this;\n        }\n      }\n    } else {\n      fns = this._all;\n      for(i = 0, l = fns.length; i < l; i++)\n        this.emit(\"removeListenerAny\", fns[i]);\n      this._all = [];\n    }\n    return this;\n  };\n\n  EventEmitter.prototype.removeListener = EventEmitter.prototype.off;\n\n  EventEmitter.prototype.removeAllListeners = function(type) {\n    if (arguments.length === 0) {\n      !this._events || init.call(this);\n      return this;\n    }\n\n    if (this.wildcard) {\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\n      var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\n\n      for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {\n        var leaf = leafs[iLeaf];\n        leaf._listeners = null;\n      }\n    }\n    else if (this._events) {\n      this._events[type] = null;\n    }\n    return this;\n  };\n\n  EventEmitter.prototype.listeners = function(type) {\n    if (this.wildcard) {\n      var handlers = [];\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\n      searchListenerTree.call(this, handlers, ns, this.listenerTree, 0);\n      return handlers;\n    }\n\n    this._events || init.call(this);\n\n    if (!this._events[type]) this._events[type] = [];\n    if (!isArray(this._events[type])) {\n      this._events[type] = [this._events[type]];\n    }\n    return this._events[type];\n  };\n\n  EventEmitter.prototype.listenerCount = function(type) {\n    return this.listeners(type).length;\n  };\n\n  EventEmitter.prototype.listenersAny = function() {\n\n    if(this._all) {\n      return this._all;\n    }\n    else {\n      return [];\n    }\n\n  };\n\n  if (typeof undefined === 'function' && undefined.amd) {\n     // AMD. Register as an anonymous module.\n    undefined(function() {\n      return EventEmitter;\n    });\n  } else {\n    // CommonJS\n    module.exports = EventEmitter;\n  }\n}();\n});\n\n/**\n * Search API Class\n */\n\nvar Search = function (_EventEmitter) {\n  inherits(Search, _EventEmitter);\n\n  /**\n   * Create a new Search instance, and override defaults\n   *\n   * @param options\n   * @property {string} options.type - Search restriction. Use 'article', 'page', 'product', or ''\n   * @property {string} options.view - Search template suffix. Specify different templates as needed\n   */\n  function Search() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    classCallCheck(this, Search);\n\n    var _this = possibleConstructorReturn(this, (Search.__proto__ || Object.getPrototypeOf(Search)).call(this));\n\n    _this.searchType = options.type || '';\n    _this.view = options.view || 'json';\n\n    _this.inProgress = false;\n\n    _this.xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');\n\n    _this._xhrLoad = _this._xhrLoad.bind(_this);\n    _this._xhrError = _this._xhrError.bind(_this);\n    _this._xhrAbort = _this._xhrAbort.bind(_this);\n\n    _this._bindEvents();\n    return _this;\n  }\n\n  createClass(Search, [{\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      this.xhr.addEventListener('load', this._xhrLoad);\n      this.xhr.addEventListener('error', this._xhrError);\n      this.xhr.addEventListener('abort', this._xhrAbort);\n    }\n\n    /**\n     * XHR was successfull\n     *\n     * @description XHR completed successfully\n     * @param {object} event\n     * @fires Search#complete\n     * @private\n     */\n\n  }, {\n    key: '_xhrLoad',\n    value: function _xhrLoad(event) {\n      var response = {};\n      var readyState = event.target.readyState;\n      var status = event.target.status;\n\n      try {\n        if (readyState > 3 && status == 200) {\n          response = JSON.parse(event.target.responseText);\n          this.emit('complete', response);\n        } else {\n          var message = 'Invalid readyState: ' + readyState + ', or status: ' + status + '.';\n          return this._xhrError(event, message);\n        }\n      } catch (error) {\n        return this._xhrError(event, 'Invalid JSON', error);\n      }\n\n      this.inProgress = false;\n    }\n\n    /**\n     * XHR contains an error\n     *\n     * @description XHR has contained an error, and was unable to complete\n     * @param {object} event\n     * @param {object|string} message\n     * @param {object} error\n     * @fires Search#error\n     * @private\n     */\n\n  }, {\n    key: '_xhrError',\n    value: function _xhrError(event) {\n      var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      this.inProgress = false;\n      this.emit('error', { event: event, message: message, error: error });\n    }\n\n    /**\n     * XHR has been aborted\n     *\n     * @description This event only fires if there is an active XHR request that has been terminated\n     * @fires Search#aborted\n     * @private\n     */\n\n  }, {\n    key: '_xhrAbort',\n    value: function _xhrAbort() {\n      this.emit('aborted');\n    }\n\n    /**\n     * Perform the search\n     *\n     * @param {string} term - Search term(s)\n     * @fires Search#initialized\n     * @fires Search#cancelled\n     */\n\n  }, {\n    key: 'execute',\n    value: function execute(term) {\n      this.emit('initialized', { term: term });\n\n      if (this.inProgress) {\n        this.emit('cancelled');\n        this.xhr.abort();\n      }\n\n      this.inProgress = true;\n\n      var url = '/search';\n      var params = {\n        q: term,\n        type: this.searchType,\n        view: this.view\n      };\n\n      var searchParams = Object.keys(params).map(function (key) {\n        var value = params[key];\n        return encodeURIComponent(key) + '=' + encodeURIComponent(value);\n      }).join('&');\n\n      this.xhr.open('get', url + '?' + searchParams);\n      this.xhr.setRequestHeader('Accept', 'application/json');\n      this.xhr.send();\n    }\n  }]);\n  return Search;\n}(eventemitter2);\n\nvar SearchForm = function () {\n  function SearchForm($container) {\n    classCallCheck(this, SearchForm);\n\n    this.$body = jquery$1('body');\n    this.$container = $container;\n    this.$form = this.$container.find('[data-live-search-form]');\n\n    this.submitHandler = this.submitHandler.bind(this);\n\n    this.events = [this.$form.on('submit.search-form', this.submitHandler)];\n  }\n\n  createClass(SearchForm, [{\n    key: 'unload',\n    value: function unload() {\n      this.events.forEach(function ($el) {\n        return $el.off('.search-form');\n      });\n    }\n  }, {\n    key: 'submitHandler',\n    value: function submitHandler(event) {\n      event.preventDefault();\n\n      var $form = jquery$1(event.currentTarget).clone();\n      var $terms = $form.find('[name=q]');\n\n      $form.css({\n        position: 'absolute',\n        left: -1000,\n        bottom: -1000,\n        visibility: 'hidden'\n      });\n\n      var terms = $terms.val();\n\n      // Adds `*` after each word in search terms, doesn't add to last word\n      if (terms.indexOf(' ') > 0) {\n        terms = terms.split(' ').join('* ').trim();\n      }\n\n      // Adds `*` at the end of the search terms\n      terms = terms + '*';\n\n      // Update value\n      $terms.val(terms);\n\n      // Forms must be in the browser context in order to submit\n      this.$body.append($form);\n      $form.submit();\n    }\n  }]);\n  return SearchForm;\n}();\n\n/**\n * Shows a list item component when result is an article, or a page\n *\n * @param contentItem\n * @returns {string}\n * @constructor\n */\nfunction ContentItem(contentItem) {\n  return '\\n  <li class=\"search-flydown--content-item\">\\n    <a href=\"' + contentItem.url + '\">' + contentItem.title + '</a>\\n  </li>\\n  ';\n}\n\n/**\n * Shows a header for the article and page results\n *\n * @param context\n * @returns {string}\n * @constructor\n */\nfunction ContentResultsHeader(context) {\n  return '\\n    <h5 class=\"search-flydown--content-title\">\\n      ' + context.content_results.title + '\\n    </h5>  \\n  ';\n}\n\n/**\n * Shows a list of results from articles, or pages\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\nfunction ContentResults(props) {\n  var content = props.content,\n      context = props.context;\n\n  var $title = ContentResultsHeader(context);\n  var contentItems = content.map(function (contentItem) {\n    return ContentItem(contentItem);\n  });\n\n  return $('\\n    <div class=\"search-flydown--content-items\">\\n      ' + $title + '\\n      \\n      <ul class=\"search-flydown--content-items-list\">\\n        ' + contentItems.join('') + '\\n      </ul>\\n    </div>\\n  ');\n}\n\n/**\n * Shows a message when there are no article or page results\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\nfunction ContentNoResults(props) {\n  var context = props.context;\n\n  var $title = ContentResultsHeader(context);\n\n  return $('\\n    <div class=\"search-flydown--content-items\">\\n      ' + $title + '\\n      \\n      <p class=\"search-flydown--content-items-none\">\\n        ' + context.content_results.no_results + '\\n      </p>\\n    </div>\\n  ');\n}\n\n/**\n * Shows the product's compare_at_price, with connection for CurrencyConverter\n *\n * @param price\n * @returns {string}\n * @constructor\n */\nfunction ProductPriceCompareAt(price) {\n  return '\\n  <span class=\"search-flydown--product-price--compare-at\">\\n    <span class=\"money\">' + price.compare_at_price + '</span>\\n  </span>\\n  ';\n}\n\n/**\n * Shows the product's price, with connection for CurrencyConverter\n *\n * @param price\n * @returns {string}\n * @constructor\n */\nfunction ProductPriceMain(price) {\n  return '\\n  <span class=\"search-flydown--product-price--main\">\\n    <span class=\"money\">' + price.price + '</span>\\n  </span>\\n  ';\n}\n\n/**\n * Shows the product's prices\n *\n * @param props\n * @returns {string}\n * @constructor\n */\nfunction ProductPrice(props) {\n  var price = props.price,\n      onSale = props.onSale,\n      consistentSaved = props.consistentSaved;\n\n  var $compareAt = onSale && consistentSaved ? ProductPriceCompareAt(price) : '';\n  var $price = ProductPriceMain(price);\n\n  return '\\n    <span class=\"search-flydown--product-price ' + (onSale ? 'search-flydown--product-price-has-sale' : '') + '\">\\n      ' + $price + '\\n      ' + $compareAt + '\\n    </span>\\n  ';\n}\n\n/**\n * Shows a product's main content\n *\n * @param product\n * @returns {string}\n * @constructor\n */\nfunction ProductContent(product) {\n  var $price = ProductPrice({\n    price: product.price,\n    onSale: product.on_sale,\n    consistentSaved: product.consistent_saved\n  });\n\n  return '\\n    <div class=\"search-flydown--product-text\">\\n      <span class=\"search-flydown--product-title\">\\n        ' + product.title + '\\n      </span>\\n      ' + $price + '\\n    </div>\\n  ';\n}\n\n/**\n * Shows a product's image\n *\n * @param image\n * @returns {string}\n * @constructor\n */\nfunction ProductImage(image) {\n  return '\\n    <div class=\"search-flydown--product-image\">\\n      ' + image + '\\n    </div>\\n  ';\n}\n\n/**\n * Shows a product list item component when result is a product\n *\n * @param product\n * @param enableImages\n * @returns {string}\n * @constructor\n */\nfunction ProductItem(product, enableImages) {\n  var $image = enableImages ? ProductImage(product.image) : '';\n  var $content = ProductContent(product);\n\n  return '\\n    <a class=\"search-flydown--product search-flydown--product\" href=\"' + product.url + '\">\\n      ' + $image + '\\n      ' + $content + '\\n    </a>\\n  ';\n}\n\n/**\n * Shows a list of product results\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\nfunction ProductResults(props) {\n  var products = props.products,\n      enableImages = props.enableImages;\n\n  var productItems = products.map(function (product) {\n    return ProductItem(product, enableImages);\n  });\n\n  return $('\\n    <div class=\"search-flydown--product-items\">\\n      ' + productItems.join('') + '\\n    </div>\\n  ');\n}\n\n/**\n * Show a message when no product results are found\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\nfunction ProductNoResults(props) {\n  var context = props.context,\n      terms = props.terms;\n\n\n  return $('\\n    <div class=\"search-flydown--product-items--none\" data-live-search-no-products>\\n      <h5>\\n        ' + context.no_results_products.title.replace('*terms*', terms) + '\\n      </h5>\\n      <p>\\n        ' + context.no_results_products.message + '\\n      </p>\\n      <p>\\n        <a class=\"search-flydown--continue\" href=\"/collections/all\">\\n          ' + context.view_all_products + '\\n        </a>\\n      </p>\\n    </div>\\n  ');\n}\n\n/**\n * Show's the Results footer, directing customers to all products\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\nfunction ResultsFooter(props) {\n  var context = props.context,\n      terms = props.terms,\n      type = props.type;\n\n\n  return $('\\n    <div class=\"search-flydown--footer\">\\n      <a class=\"search-flydown--continue\" href=\"/search?q=' + terms + '&type=' + type + '\">\\n        ' + context.view_all_results + '\\n      </a>\\n    </div>\\n  ');\n}\n\nvar LiveSearch = function () {\n  function LiveSearch($els, settings) {\n    var _this = this;\n\n    classCallCheck(this, LiveSearch);\n\n    this.$el = $els.$el;\n    this.$body = jquery$1('body');\n    this.$header = $els.$header;\n    this.$document = jquery$1(document);\n\n    this.settings = settings;\n    this.enableContent = this.settings.enable_content;\n    this.enableImages = this.settings.enable_images;\n    this.flyDownActive = false;\n    this.takeOverActive = false;\n    this.showFlyDown = false;\n    this.searchType = this.enableContent ? 'article,page,product' : 'product';\n\n    this.$form = this.$el.find('[data-live-search-form]');\n    this.$input = this.$form.find('[data-live-search-input]');\n    this.$button = this.$form.find('[data-live-search-submit]');\n    this.$takeOverButton = this.$form.find('[data-live-search-takeover-cancel]');\n\n    this.$flyDown = this.$el.find('[data-live-search-flydown]');\n    this.$searchResults = this.$flyDown.find('[data-live-search-results]');\n    this.$searchPlaceholder = this.$flyDown.find('[data-live-search-placeholder]');\n    this.$quickLinks = this.$flyDown.find('[data-live-search-quick-links]');\n\n    this.staticSearch = new SearchForm(this.$el);\n\n    this.search = new Search({\n      view: 'header',\n      type: this.searchType\n    });\n\n    this._search = this._search.bind(this);\n    this._toggleTakeOver = this._toggleTakeOver.bind(this);\n    this._searchFocused = this._searchFocused.bind(this);\n    this._documentFocus = this._documentFocus.bind(this);\n\n    this._searchCancelled = this._searchCancelled.bind(this);\n    this._searchComplete = this._searchComplete.bind(this);\n    this._searchError = this._searchError.bind(this);\n\n    this.closeEvents = [];\n\n    this.search.on('cancelled', this._searchCancelled);\n    this.search.on('complete', this._searchComplete);\n    this.search.on('error', this._searchError);\n\n    this.events = [this.$button.on('click.live-search', function (event) {\n      event.preventDefault();\n      _this._search(event);\n    }), this.$input.on('keyup.live-search', justDebounce$1(this._search, 250)), this.$input.on('focus.live-search', this._searchFocused), this.$takeOverButton.on('click.live-search', this._toggleTakeOver)];\n  }\n\n  createClass(LiveSearch, [{\n    key: 'unload',\n    value: function unload() {\n      this.events.forEach(function ($el) {\n        return $el.off('.live-search');\n      });\n\n      this.search.off('cancelled', this._searchCancelled);\n      this.search.off('complete', this._searchComplete);\n      this.search.off('error', this._searchError);\n\n      this.staticSearch.unload();\n    }\n\n    /**\n     * If is searching, only show placeholder\n     *\n     * @private\n     */\n\n  }, {\n    key: '_flyDownSearching',\n    value: function _flyDownSearching() {\n      this.$searchResults.removeClass('visible');\n      this.$quickLinks.removeClass('visible');\n\n      this.$searchPlaceholder.addClass('visible');\n    }\n\n    /**\n     * Search field has been focused, or has been cleared of contents\n     *   - If previous search contents, show\n     *   - If no previous search contents, show quicklinks if exists\n     *\n     * @param hasTerms\n     * @private\n     */\n\n  }, {\n    key: '_flyDownInitial',\n    value: function _flyDownInitial(hasTerms) {\n      this.showFlyDown = false;\n\n      var hasNoResults = this.$searchResults.find('[data-live-search-no-products]').length === 0;\n      var hasPreviousResults = this.$searchResults.children().length > 0;\n\n      if (hasTerms && hasNoResults && hasPreviousResults) {\n        this.$searchResults.addClass('visible');\n        this.$quickLinks.removeClass('visible');\n        this.showFlyDown = true;\n      } else if (this.$quickLinks.length) {\n        this.$searchResults.removeClass('visible');\n        this.$quickLinks.addClass('visible');\n        this.showFlyDown = true;\n      }\n    }\n  }, {\n    key: '_search',\n    value: function _search(event) {\n      // Ignore non character key strokes\n      var invalidKeyStrokes = ['Alt', 'ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown', 'Capslock', 'Control', 'Meta', 'Shift', 'Tab'];\n\n      if (event.key && invalidKeyStrokes.indexOf(event.key) !== -1) {\n        return;\n      }\n\n      var terms = this.$input.val();\n      var hasTerms = terms.length > 0;\n\n      // If is XS, pop the search out into a Takeover screen\n      if (layout.isBreakpoint('XS')) {\n        this._toggleTakeOver(null, true);\n      }\n\n      if (!hasTerms) {\n        this._flyDownInitial(true);\n\n        if (!this.showFlyDown) {\n          this._closeFlyDown(true);\n        }\n\n        return;\n      }\n\n      this._flyDownSearching();\n\n      // Clear previous results\n      this.$searchResults.html('');\n\n      // If terms has length, this will be true\n      this._toggleButton(hasTerms);\n\n      // Show the flyout if it isn't open\n      if (!this.$flyDown.data('is-open')) {\n        this.showFlyDown = true;\n        this._openFlyDown();\n      }\n\n      // Adds `*` after each word in search terms, doesn't add to last word\n      if (terms.indexOf(' ') > 0) {\n        terms = terms.split(' ').join('* ').trim();\n      }\n\n      // Adds `*` at the end of the search terms\n      terms = terms + '*';\n\n      this.search.execute(terms);\n    }\n  }, {\n    key: '_searchError',\n    value: function _searchError(response) {\n      console.warn('Search had error');\n      console.log(response.message, response.error, response.event);\n      this._toggleButton(false);\n    }\n\n    /**\n     * Search has been cancelled due to new search being performed\n     *\n     * @private\n     */\n\n  }, {\n    key: '_searchCancelled',\n    value: function _searchCancelled() {\n      // Searches are canceled on user interaction, UI should remain unchanged\n    }\n  }, {\n    key: '_searchComplete',\n    value: function _searchComplete(response) {\n      var _this2 = this;\n\n      var content = response.content,\n          products = response.products,\n          terms = response.terms,\n          sanitizedTerms = response.sanitizedTerms;\n\n\n      var settings = {\n        products: {\n          results: {\n            products: products,\n            enableImages: this.enableImages\n          },\n          noResults: {\n            context: this.settings.context,\n            terms: sanitizedTerms\n          }\n        },\n        content: {\n          results: {\n            context: this.settings.context,\n            content: content\n          },\n          noResults: {\n            context: this.settings.context\n          }\n        },\n        footer: {\n          context: this.settings.context,\n          terms: terms,\n          type: this.searchType\n        }\n      };\n\n      var $productResults = products.length ? ProductResults(settings.products.results) : ProductNoResults(settings.products.noResults);\n\n      var $contentResults = content.length ? ContentResults(settings.content.results) : ContentNoResults(settings.content.noResults);\n\n      $productResults.find('.money').each(function (i, el) {\n        el.innerHTML = Shopify.formatMoney(el.innerHTML, _this2.settings.money_format);\n        dist$2.update(el);\n      });\n\n      // Hide placeholder\n      // TODO: Lock minimum height?\n      this.$searchPlaceholder.removeClass('visible');\n\n      // Show results\n      this.$searchResults.html($productResults).addClass('visible');\n\n      if (this.enableContent) {\n        this.$searchResults.append($contentResults);\n      }\n\n      this.$searchResults.append(ResultsFooter(settings.footer));\n\n      this._toggleButton(false);\n    }\n\n    /**\n     * Toggles search button while processing\n     *\n     * @param disable\n     * @private\n     */\n\n  }, {\n    key: '_toggleButton',\n    value: function _toggleButton(disable) {\n      if (disable) {\n        this.$button.addClass('search-icon--processing').attr('disabled');\n      } else {\n        this.$button.removeClass('search-icon--processing').removeAttr('disabled');\n      }\n    }\n  }, {\n    key: '_searchFocused',\n    value: function _searchFocused() {\n      if (this.flyDownActive) {\n        return;\n      }\n      var hasTerms = this.$input.val().length > 0;\n\n      // Only listen for events outside of the search flydown when its open\n      this.closeEvents.concat([this.$header.on('focus.live-search', 'a, button', this._documentFocus), this.$document.on('touchstart.live-search', this._documentFocus), this.$document.on('click.live-search', this._documentFocus)]);\n\n      this.$el.addClass('live-search--focused');\n\n      // If is XS, pop the search out into a Takeover screen\n      if (layout.isBreakpoint('XS')) {\n        this._toggleTakeOver(null, true);\n      }\n\n      this._flyDownInitial(hasTerms);\n\n      this._openFlyDown();\n    }\n  }, {\n    key: '_openFlyDown',\n    value: function _openFlyDown() {\n      if (!this.showFlyDown) {\n        return;\n      }\n\n      this.$el.addClass('live-search--active');\n      this.$flyDown.data('is-open', true);\n      this.flyDownActive = true;\n    }\n\n    /**\n     * Close the FlyDown when no longer needed\n     *  - Keep focus styling if input is still being interacted with\n     *\n     * @param retainFocus\n     * @private\n     */\n\n  }, {\n    key: '_closeFlyDown',\n    value: function _closeFlyDown() {\n      var retainFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.flyDownActive) {\n        if (!retainFocus) {\n          this.$el.removeClass('live-search--focused');\n        }\n\n        return;\n      }\n\n      if (this.takeOverActive) {\n        this._toggleTakeOver(null, false);\n      }\n\n      this.$flyDown.data('is-open', false);\n      this.$el.removeClass('live-search--active');\n\n      if (!retainFocus) {\n        this.$el.removeClass('live-search--focused');\n      }\n\n      this.flyDownActive = false;\n      this.closeEvents.forEach(function ($el) {\n        return $el.off('.live-search');\n      });\n      this.closeEvents = [];\n    }\n\n    /**\n     * Open or close the Take over for mobile\n     *\n     *\n     * @param event\n     * @param enable\n     * @private\n     */\n\n  }, {\n    key: '_toggleTakeOver',\n    value: function _toggleTakeOver() {\n      var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      this.takeOverActive = enable;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!enable) {\n        this._closeFlyDown(false);\n      }\n\n      if (this.$header.hasClass('search--section')) {\n        this.$body.toggleClass('search-takeover-active', enable);\n      }\n\n      this.$el.toggleClass('live-search--takeover', enable);\n      this.$body.toggleClass('scroll-lock', enable);\n    }\n\n    /**\n     * When the focus element has changed, either by clicking, touching, or tabbing\n     * check to see if it is within the flydown\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_documentFocus',\n    value: function _documentFocus(event) {\n      var $parent = jquery$1(event.target).parents('[data-live-search]');\n\n      if ($parent.length) {\n        return;\n      }\n\n      this._closeFlyDown();\n    }\n  }]);\n  return LiveSearch;\n}();\n\nvar StaticSectionHeader = function () {\n  function StaticSectionHeader(section) {\n    var _this = this;\n\n    classCallCheck(this, StaticSectionHeader);\n\n    this.$el = jquery$1(section.el);\n    this.settings = section.data.settings;\n    this.currency = section.data.currency;\n    this.postMessage = section.postMessage;\n    this.headerSearch = null;\n\n    this.$scripts = jquery$1('[data-scripts]');\n\n    this.$menuToggle = this.$el.find('[data-menu-toggle]');\n    this.$cartCount = this.$el.find('[data-header-cart-count]');\n    this.$searchField = this.$el.find('[data-live-search]');\n\n    this.$siteNavigation = this.$el.find('[data-site-navigation]');\n    this.$desktopNavigation = this.$siteNavigation.find('ul.navmenu-depth-1');\n    this.$headerTools = this.$siteNavigation.find('[data-header-actions]');\n\n    this.converter = '[data-currency-converter]';\n    this.$converter = jquery$1(this.converter);\n\n    this.stickyHeader = new StickyHeader({\n      $el: this.$el,\n      $toggle: this.$menuToggle,\n      postMessage: this.postMessage\n    }, this.settings);\n\n    this.navMobile = new NavMobile({\n      $el: this.$el,\n      $toggleOpen: this.$menuToggle\n    });\n\n    this.navDesktop = new NavDesktop({\n      $el: this.$siteNavigation,\n      postMessage: this.postMessage\n    });\n\n    this.forms = new Forms(this.$el);\n\n    if (this.settings.live_search.enable) {\n      script$1(this.$scripts.data('shopify-api-url'), function () {\n        _this.headerSearch = new LiveSearch({\n          $el: _this.$searchField,\n          $header: _this.$el\n        }, _this.settings.live_search);\n      });\n    } else {\n      this.headerSearch = new SearchForm(this.$searchField);\n bcHeaderSearch = this.headerSearch;\n    }\n\n    if (this.currency.enable) {\n      script$1(this.$scripts.data('shopify-currencies'), function () {\n        _this._converter();\n      });\n    }\n\n    // Handle Accordion interaction when window size changes\n    this._headerToolsSize = this._headerToolsSize.bind(this);\n    layout.onBreakpointChange(this._headerToolsSize);\n\n    this.$el.on('cartcount:update', function (event, data) {  \n      _this.$cartCount.attr('data-header-cart-count', data.response.item_count).toggleClass('visible', data.response.item_count > 0);\n    });\n\n    this._headerToolsSize();\n  }\n\n  createClass(StaticSectionHeader, [{\n    key: 'onSectionDeselect',\n    value: function onSectionDeselect() {\n      this.navDesktop.closeAll(null);\n      this.stickyHeader.closeNavigation();\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.stickyHeader.unload();\n      this.navMobile.unload();\n      this.navDesktop.unload();\n      this.forms.unload();\n\n      this.$el.off('cartcount:update');\n\n      this.headerSearch.unload();\n\n      if (this.currency.enable) {\n        this.$converter.off('change.converter');\n      }\n    }\n  }, {\n    key: 'onSectionMessage',\n    value: function onSectionMessage(name, data) {\n      if (name === 'nav:close-all' && layout.isBreakpoint('L')) {\n        this.navDesktop.closeAll(null);\n      }\n\n      if (name === 'stickyheader:open' && this.settings.sticky_header) {\n        this.stickyHeader.openNavigation(true);\n      }\n    }\n  }, {\n    key: 'onSectionBlockSelect',\n    value: function onSectionBlockSelect(block) {\n      var _this2 = this;\n\n      if (!layout.isBreakpoint('L')) {\n        return;\n      }\n\n      setTimeout(function () {\n        if (_this2.settings.sticky_header) {\n          _this2.stickyHeader.slideToggle(true);\n        }\n\n        if (!jquery$1(block.el).find('.navmenu-link').hasClass('navmenu-active')) {\n          _this2.navDesktop.toggleItem(block.el);\n        }\n      }, 100);\n    }\n  }, {\n    key: 'onSectionBlockDeselect',\n    value: function onSectionBlockDeselect() {\n      if (this.$menuToggle.hasClass('active') && layout.isBreakpoint('L') && this.settings.sticky_header) {\n        this.stickyHeader.slideToggle(false);\n      }\n\n      this.navDesktop.closeAll(null);\n    }\n  }, {\n    key: '_converter',\n    value: function _converter() {\n      var _this3 = this;\n\n      dist$2.init({\n        switcherSelector: this.converter,\n        priceSelector: '.money',\n        shopCurrency: this.currency.shop_currency,\n        defaultCurrency: this.currency.default_currency,\n        displayFormat: this.currency.display_format,\n        moneyFormat: this.currency.money_format,\n        moneyFormatNoCurrency: this.currency.money_format_no_currency,\n        moneyFormatCurrency: this.currency.money_format_currency\n      });\n\n      this.$converter.on('change.converter', function (event) {\n        _this3.$converter.each(function (index, converter) {\n          if (converter.value !== event.currentTarget.value) {\n            converter.value = event.currentTarget.value;\n          }\n        });\n\n        dist$2.setCurrency(event.currentTarget.value);\n      });\n    }\n  }, {\n    key: '_headerToolsSize',\n    value: function _headerToolsSize() {\n      if (!layout.isBreakpoint('L')) {\n        return;\n      }\n\n      var outerWidth = this.$headerTools.width();\n      var innerWidths = [];\n\n      this.$headerTools.find('li').each(function (index, el) {\n        innerWidths.push(Math.ceil(jquery$1(el).outerWidth()));\n      });\n\n      var combinedWidths = innerWidths.reduce(function (a, b) {\n        return a + b;\n      }, 0);\n\n      if (combinedWidths > outerWidth) {\n        this.$headerTools.css('max-width', combinedWidths + 'px');\n        combinedWidths = 40;\n        this.$desktopNavigation.css('max-width', 'calc(100% - ' + combinedWidths + 'px)');\n      }\n    }\n  }]);\n  return StaticSectionHeader;\n}();\n\nvar StaticSectionFooter = function () {\n  function StaticSectionFooter(section) {\n    classCallCheck(this, StaticSectionFooter);\n\n    this.$el = jquery$1(section.el);\n    this.Accordion = new Accordion(this.$el);\n\n    this.forms = new Forms(this.$el);\n\n    // Handle Accordion interaction when window size changes\n    this.layoutHandler = this.onBreakpointChange.bind(this);\n    layout.onBreakpointChange(this.layoutHandler);\n\n    this._bindEvents();\n  }\n\n  createClass(StaticSectionFooter, [{\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this = this;\n\n      this.$el.on('click.footer', '[data-accordion-trigger]', function (event) {\n        event.preventDefault();\n        _this._toggleAccordion(jquery$1(event.currentTarget).parent());\n      });\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.$el.off('.footer');\n      this.forms.unload();\n\n      delete this.Accordion;\n    }\n  }, {\n    key: 'onSectionBlockSelect',\n    value: function onSectionBlockSelect(block) {\n      var $block = jquery$1(block.el);\n\n      if ($block.hasClass('has-accordion')) this._toggleAccordion($block, true);\n    }\n  }, {\n    key: 'onSectionBlockDeselect',\n    value: function onSectionBlockDeselect(block) {\n      var $block = jquery$1(block.el);\n\n      if ($block.hasClass('has-accordion')) this._toggleAccordion($block, false);\n    }\n  }, {\n    key: '_toggleAccordion',\n    value: function _toggleAccordion($block) {\n      if (layout.isBreakpoint('L')) return;\n\n      this.Accordion.toggle($block);\n    }\n  }, {\n    key: 'onBreakpointChange',\n    value: function onBreakpointChange(event, breakpoints) {\n      if (layout.isBreakpoint('L')) {\n        this.Accordion.openAll();\n      } else if (breakpoints.previous === 'L' && !layout.isBreakpoint('L')) {\n        this.Accordion.closeOpen();\n      }\n    }\n  }]);\n  return StaticSectionFooter;\n}();\n\nvar StaticArticle = function () {\n  function StaticArticle(section) {\n    classCallCheck(this, StaticArticle);\n\n    this.$el = jquery$1(section.el);\n    this.$commentForm = this.$el.find('[data-articlecomments-form]');\n\n    this.richText = new RichText(this.$el);\n\n    if (this.$commentForm.length) {\n      this.commentForm = new Forms(this.$commentForm);\n    }\n  }\n\n  createClass(StaticArticle, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.richText.unload();\n\n      if (this.commentForm) {\n        this.commentForm.unload();\n      }\n    }\n  }]);\n  return StaticArticle;\n}();\n\nvar StaticBlog = function () {\n  function StaticBlog(section) {\n    classCallCheck(this, StaticBlog);\n\n    this.$el = jquery$1(section.el);\n\n    this.richText = new RichText(this.$el);\n  }\n\n  createClass(StaticBlog, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.richText.unload();\n    }\n  }]);\n  return StaticBlog;\n}();\n\nvar MessageBanner = function () {\n  function MessageBanner() {\n    classCallCheck(this, MessageBanner);\n\n    this.$window = jquery$1(window);\n    this.$document = jquery$1(document);\n    this.$body = jquery$1(document.body);\n    this.$bannerTemplate = jquery$1('[data-templates] [data-message-banner]');\n    this.$banners = [];\n\n    this.header = document.querySelector('.site-header-wrapper');\n    this.events = [];\n\n    // this.$document.on('touchstart.message-banner, click.message-banner', (event) => {\n    //   this._handleDocumentClick(event.target);\n    // });\n  }\n\n  createClass(MessageBanner, [{\n    key: 'unload',\n    value: function unload() {\n      this.$document.off('touchstart.message-banner, click.message-banner');\n    }\n  }, {\n    key: 'message',\n    value: function message(_message, type) {\n      var $banner = this.$bannerTemplate.clone();\n\n      $banner.addClass('message--' + type).find('[data-message-banner-content]').html(_message);\n\n      this.$body.append($banner);\n      this._bindEvents($banner);\n      this._show($banner);\n    }\n  }, {\n    key: 'dismissBanners',\n    value: function dismissBanners() {\n      var _this = this;\n\n      var $visibleBanners = jquery$1('[data-message-banner]:visible');\n\n      $visibleBanners.each(function (index, banner) {\n        _this._hide(jquery$1(banner), index);\n      });\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents($banner) {\n      var _this2 = this;\n\n      this.events.push([$banner.on('click.message-banner', '[data-message-banner-close]', function (event) {\n        event.preventDefault();\n        _this2._hide($banner);\n      }), this.$body.on('position-banners.message-banner', function () {\n        _this2._positionBanner($banner);\n      }), this.$window.on('resize.message-banner', justDebounce$1(function () {\n        return _this2._positionBanner($banner);\n      }, 250)), this.$window.on('scroll.message-banner', function () {\n        return _this2._positionBanner($banner);\n      })]);\n    }\n\n    /**\n     * Position Message beneath header if its in viewport, or at top of viewport\n     *\n     * @param $banner\n     * @private\n     */\n\n  }, {\n    key: '_positionBanner',\n    value: function _positionBanner($banner) {\n      $banner.css({ top: getHeaderOffset(this.header, true) + (this.$banners.length * 40) });\n    }\n  }, {\n    key: '_show',\n    value: function _show($banner) {\n      this._positionBanner($banner);\n      this.$banners.push($banner);\n\n      $banner.addClass('animating animating-in').one('trend', function () {\n        $banner.removeClass('animating animating-in').addClass('visible').off('trend');\n      });\n    }\n  }, {\n    key: '_hide',\n    value: function _hide($banner) {\n      var _this3 = this;\n\n      var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      $banner.addClass('animating animating-out').one('trend', function () {\n        $banner.removeClass('animating animating-out visible').off('trend');\n        _this3._removeBanner($banner, index);\n      });\n    }\n  }, {\n    key: '_removeBanner',\n    value: function _removeBanner($banner, index) {\n      if (this.events[index]) {\n        this.events[index].forEach(function ($el) {\n          return $el.off('.message-banner');\n        });\n        this.events.splice(index, 1);\n      }\n\n      this.$banners.splice(index, 1);\n      $banner.remove();\n    }\n  }, {\n    key: '_handleDocumentClick',\n    value: function _handleDocumentClick(target) {\n      var $parent = jquery$1(target).parents('[data-message-banner]');\n      if ($parent.length) return;\n\n      this.dismissBanners();\n    }\n  }]);\n  return MessageBanner;\n}();\n\nvar StaticCart = function () {\n  function StaticCart(section) {\n    var _this = this;\n\n    classCallCheck(this, StaticCart);\n\n    this.settings = section.data.settings;\n    this.shipping = section.data.shipping;\n    this.messageBanner = new MessageBanner();\n\n    this.$window = jquery$1(window);\n    this.$el = jquery$1(section.el);\n    this.$header = jquery$1('.site-header-wrapper');\n    this.$total = this.$el.find('[data-cart-total]');\n    this.$shipping = this.$el.find('[data-cartshipping]');\n    this.$cartform = this.$el.find('[data-cart-form]'); \n    this.cartformChecked = false; \n    this.hasInventoryError = false;\n\n    // Product form containers\n    this.$titleTotalSmall = this.$el.find('.cart-title-total--small');\n    this.$titleTotalLarge = this.$el.find('.cart-title-total--large');\n    this.$titleTotalContents = this.$el.find('[data-cart-title-total]');\n\n    // Shipping calculator elements\n    this.$shippingToggle = this.$el.find('[data-cartshipping-toggle]');\n    this.$shippingResponse = this.$shipping.find('[data-cartshipping-response]');\n    this.$shippingResponseMessage = this.$shippingResponse.find('[data-cartshipping-message]');\n    this.$shippingResponseRates = this.$shippingResponse.find('[data-cartshipping-rates]');\n    this.$shippingSubmit = this.$shipping.find('[data-cartshipping-submit]');\n\n   // this._moveTitleTotal();\n\n    var $scripts = jquery$1('[data-scripts]');\n\n    script$1($scripts.data('shopify-api-url'), function () {\n      _this._bindEvents(); \n      _this.$el.trigger('load.cart-page');\n      \n      Shopify.onError = _this._handleErrors.bind(_this);\n    });\n\n    this.forms = new Forms(this.$el);\n\n    // Update the section when onSectionLoad fires to restore prices to local currency\n    this.$el.find('.money').each(function (index, el) {\n      return dist$2.update(el);\n    });\n\n    if (this.settings.shipping && this.$shipping.length) {\n      script$1($scripts.data('shopify-countries'), function () {\n        script$1($scripts.data('shopify-common'), function () {\n          script$1($scripts.data('shopify-cart'), function () {\n            _this._initShippingCalc();\n          });\n        });\n      });\n    }\n  }\n\n  createClass(StaticCart, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.$el.off('.cart-page');\n      this.$window.off('.cart-page');\n      this.forms.unload();\n      this.messageBanner.unload();\n      this.messageBanner.dismissBanners();\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this2 = this;\n \n      this.$window.on('resize.cart-page', justDebounce$1(function () {\n       // return _this2._moveTitleTotal();\n      }, 20));\n      \n      this.$el.on('keydown.cart-page', '[data-cartitem-quantity]', function (event) {\n        _this2._quantityKeyDown(event);\n      });\n      \n      this.$el.on('keyup.cart-page', '[data-cartitem-quantity]', function (event) {\n        _this2._quantityKeyUp(event);\n      });\n/*\n      this.$el.on('change.cart-page', '[data-cartitem-quantity]', function (event) {\n        _this2._editItemQuantity(event);\n      });\n*/\n      \n      this.$el.on('click.cart-page', '[data-cartitem-quantity-update]', function (event) {\n        \tevent.preventDefault(); \n       \t\t _this2.$el.find('[data-cart-update-all]').click(); \n        \t//_this2._editItemQuantity(event);\n      }); \n      \n      this.$el.on('click.cart-page', '[data-cartitem-remove]', function (event) {\n        event.preventDefault(); \n        var $target = jquery$1(event.currentTarget); \n        \n        $target.parents('.cart-item--info').find('[data-cartitem-quantity]').val(0);\n        _this2.$el.find('[data-cart-update-all]').click(); \n      }); \n      \n      this.$el.on('load.cart-page', function () {         \n        if (_this2.$el.find(\".cartitems article\").length > 0) {\n          _this2.$el.trigger('update-all.cart-page', { submitform: false });\t\n        }\n      });\n      \n      this.$el.on('click.cart-update', '[data-cart-update-all]', function (event) {\n        event.preventDefault();  \n        if (!_this2.hasInventoryError){ \n        \t_this2.messageBanner.dismissBanners();                 \n        } \n        _this2.hasInventoryError = false;\n        \n      \t _this2.$el.trigger('update-all.cart-page', { submitform: false });\t\t  \n      });\n      \n      this.$el.on('submit.cart-page', '[data-cart-form]', function (event) {\n          \n        if (!_this2.cartformChecked) { \n         \tevent.preventDefault(); \n      \t \t_this2.$el.trigger('update-all.cart-page', { submitform: true });\t  \n        } \n        \n      });\n       \n      \n      this.$window.on('update-all.cart-page', function (event, data) { \n\n          _this2.$el.addClass(\"disabled\"); \n        \n          var quantityError = false;\n        \n          //before making any updates quickly loop through quantities and check in-code inventory\n          $(_this2.$cartform.find('[data-cartitem-id]').get().reverse()).each(function(x) {\n          \t\tvar $cartItem = $(this);\n              \tvar quantity = parseInt($cartItem.find('[data-cartitem-quantity]').val(), 10);\n              \tquantity = Math.max(quantity, 0);   \n              \tvar cartItemInventory = parseInt($cartItem.data('cartitem-inventory'), 10); \n      \t\t\tvar title = $cartItem.data('cartitem-title');\n      \t\t\tvar cartitemsku = $cartItem.data('cartitem-sku');\n            \n             \tif (quantity > cartItemInventory) {  \n                    _this2._quantityError(cartItemInventory, cartitemsku);  \n          \t\t\tquantityError = true;    \n             \t} else if (quantity > 400) {\n                 \tvar errorMessage = \"For quantities of 400 or more, please call us at 888-758-2247\"; \n                 \t_this2.messageBanner.message(errorMessage, 'error'); \n                  \tquantityError = true;    \n                }\n          });\n \n          if (quantityError) { \n          \t_this2.$el.removeClass(\"disabled\"); \n            \n          } else { \n\t\t\t\t\n            var cartCountTotal = 0; \n            $(\".cartitems [data-quantity-input]\").each(function() {  \n              \tif (isNaN($(this).val())) $(this).val(1);\n                if ($(this).data(\"cartitem-type\") != \"Gift Card\") {\n                  cartCountTotal = cartCountTotal + parseInt($(this).val(), 10);\n                }\n            });  \n\n\n            var chain = $.when();\n            $(_this2.$cartform.find('[data-cartitem-id]').get().reverse()).each(function(x) {\n                var $cartItem = $(this);\n                var quantity = parseInt($cartItem.find('[data-cartitem-quantity]').val(), 10);\n                quantity = Math.max(quantity, 0);   \n                chain = chain.then(function() {\n                  return _this2._updateCart($cartItem, quantity, cartCountTotal);\n                }); \n\n            });\n\n            $.when( chain ).done(function(){\n              \n              if (_this2.hasInventoryError == true) { // there as an error so review everything \n                  _this2.$el.find('[data-cart-update-all]').click();  \n\n              } else { \n \n                 $.ajax({\n                        url: \"/cart\",  \n                        type: 'GET',   \n                        async: false,   \n                        success: function(response){    \n                    \n                          if ($(response).find(\".cartitems article\").length <= 0) return window.location = '/cart';  // Reload page if cart is empty\n\n                          var staticCartSection = $(response).find(\"#shopify-section-static-cart\");   \n                          $(\"#shopify-section-static-cart header.cart-title .cart-title-total--large\").replaceWith($(staticCartSection).find(\"header.cart-title .cart-title-total--large\")); \n                          $(\"#shopify-section-static-cart section.cartitems--container .cart-total .cart-subtotal\").replaceWith($(staticCartSection).find(\"section.cartitems--container .cart-total .cart-subtotal\")); \n                          \n                          $(\"#shopify-section-static-cart section.cartitems--container .cartitems-items\").replaceWith($(staticCartSection).find(\"section.cartitems--container .cartitems-items\")); \n\n                          var countResponse = {}; countResponse.item_count = cartCountTotal;\n                          _this2.$header.trigger('cartcount:update', { response: countResponse });\n  \n                          if (data.submitform) {\n                              _this2.cartformChecked = true; \n                              $(\".cart-checkout button.button-primary\").click();\n\n                          } else {\n                              _this2.$el.removeClass(\"disabled\"); \n\n                          } \n                       }  \n                });\n\n              }\n            });\n          } \n        \n      });\n      \n        \n         \n\n    }\n  }, {\n    key: '_moveTitleTotal',\n    value: function _moveTitleTotal() {\n      if (!this.$titleTotalContents.length) {\n        return;\n      }\n\n      if (this.$window.outerWidth() >= 480) {\n        if (!jquery$1.contains(this.$titleTotalLarge[0], this.$titleTotalContents[0])) {\n          var $form = this.$titleTotalContents.detach();\n         // this.$titleTotalLarge.append($form);\n        }\n      } else {\n        if (!jquery$1.contains(this.$titleTotalSmall[0], this.$titleTotalContents[0])) {\n          var _$form = this.$titleTotalContents.detach();\n       //   this.$titleTotalSmall.append(_$form);\n        }\n      }\n    }\n\n    /**\n     * Prevent form submission when pressing `enter` within a quantity selector\n     *\n     * @param event\n     * @private\n     */\n  }, {\n    key: '_quantityKeyUp',\n    value: function _quantityKeyUp(event) {\n     \n      var _this2 = this;\n      this.messageBanner.dismissBanners(); \n       \n      $(\".cartitems button, .cart-checkout button.button-primary, .cart-title button\").removeAttr(\"disabled\");\n      \n      $(\".cartitems [data-quantity-input]\").each(function() {  \n      \tif (isNaN($(this).val())) { \n\t\t\t_this2.messageBanner.message(\"Invalid quantity value\", 'error');\n          \t$(\".cartitems button, .cart-checkout button.button-primary, .cart-title button\").attr(\"disabled\", \"disabled\");\n          \treturn false;\n        } \n      });  \n      event.preventDefault();\n    }\n   \n  }, {\n    key: '_quantityKeyDown',\n    value: function _quantityKeyDown(event) {\n      // Only block enter keys \n      if (event.keyCode !== 13) {\n        return;\n      } \n      event.preventDefault();\n    }\n\n    /**\n     * Handle an item quantity change\n     *\n     * @param event\n     * @param {Boolean} remove - Set as true to remove cart item\n     * @private\n     \n\n  }, {\n    key: '_editItemQuantity',\n    value: function _editItemQuantity(event) {\n      var remove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n     // this.messageBanner.dismissBanners();\n\n      var $target = jquery$1(event.currentTarget);\n      var $cartItem = $target.closest('[data-cartitem-id]');\n\n      var quantity = remove ? 0 : parseInt($target.siblings('[data-cartitem-quantity]').val(), 10);\n      quantity = Math.max(quantity, 0); \n\n      this._updateCart($cartItem, quantity);\n\n      // Remove item from cart visually if it is being removed\n      if (quantity === 0 || remove) {\n        $cartItem.height($cartItem.height());\n      }\n    }\n*/\n    /**\n     * Update cart with a valid quantity\n     *\n     * @param $cartItem\n     * @param quantity\n     * @private\n     */\n\n  }, {\n    key: '_updateCart',\n    value: function _updateCart($cartItem, quantity, cartCountTotal) {\n      var _this3 = this;\n      var updatecart; \n      \n      var id = $cartItem.data('cartitem-id');  \n      var handle = $cartItem.data('cartitem-handle');\n      var title = $cartItem.data('cartitem-title');\n      var cartitemsku = $cartItem.data('cartitem-sku');\n      var cartItemInventory = parseInt($cartItem.data('cartitem-inventory'), 10);\n      var itemIndex = $cartItem.index();  \n      var caseqty = $cartItem.data('cartitem-caseqty');\n      var orgQuantity = $cartItem.data('cartitem-orgquantity'); \n     \n      if (quantity > cartItemInventory) { // check to see if there is enough inventory\n        this._quantityError(cartItemInventory, cartitemsku);  \n        $cartItem.find('[data-cartitem-quantity]').val(orgQuantity);\n        this.hasInventoryError = true;\n        \n     } else if (quantity <= 0) { \n       \n       updatecart = $.ajax({  \n                    url: \"/cart/change.js\",  \n                    type: 'POST',  \n                    dataType: 'json',\n                    async: false,    \n                    data: jquery$1.param({ quantity: 0, id: id}),\n                    success: function(response){   \n                      _this3._didUpdate(id, -1, response, $cartItem);\n                    }\n                  })\n        \n        \n     } else {   \n        \n        updatecart = _this3._getCart().then(function(cart){ // get all items already in the cart \n \n            // remove items in the cart with the same product id and variants (not pricing chart)\n            return _this3._checkCartItems($cartItem, cart.items);\n           \n        }).then(function(){\n          \n\n            // once the items have been removed we can re-add it with the correct pricing tier\n            return _this3._getProduct(handle);\n          \n         }).then(function(product) { \n         \n\n            var selectedVariantID = _this3._getselectedVariantFromProduct($cartItem, product, quantity, cartCountTotal);\n             \n            return _this3._updateCartItem($cartItem, selectedVariantID, quantity, cartItemInventory, title, caseqty);\n                               \n         })/*.then(function(response){\n               \n          \tconsole.log(5, response[0].id, title); \n          \tif (_this3.updateCartDisplay) {\n         \t\tvar selectedVariantID = response[0].id;\n          \t\treturn _this3._displayNewCart($cartItem, selectedVariantID, quantity, itemIndex);\n          \t}\n          \n          \treturn;\n               \n\t\t })  */\n       } \n      \n      return updatecart;\n        \n     }   \n  }, {\n    key: '_getCart',\n    value: function _getCart() {\n      \n      \tvar cartinfo = $.ajax({  \n            url: \"/cart.js\",  \n            type: 'GET',  \n            dataType: 'json',\n            async: false,   \n            success: function(cart){  \n              \treturn cart;\n            }\n         }); \n          \n         return cartinfo;\n    }\n  }, {\n    key: '_getProduct',\n    value: function _getProduct(handle) {\n      \n      // get product info\n      var productinfo = $.ajax({  \n            url: '/products/' + handle + '.js',  \n            type: 'GET',  \n            dataType: 'json' \n         });\n      \n      return productinfo;\n      \n                               \n    }\n  }, {\n    key: '_getselectedVariantFromProduct',\n    value: function _getselectedVariantFromProduct($cartItem, product, quantity, cartCountTotal) {\n     \n     var _this3 = this; \n     var productVariants = product.variants;\n     var selectedVariantID = \"\"; \n     var $cartitemVariants = $cartItem.find(\".cart-item--product-options\");\n     var cartitemVariantsArr  = []; \n     var selectedVariantPriceTier = 1; \n     var itemHasPricingChart = false;\n    \n   ////  console.log('cartCountTotal', cartCountTotal, 'quantity', quantity );\n      \n     // get product variants besides pricing chart\n     $cartitemVariants.each(function(i) {  \n     \tvar optionName = $($cartitemVariants[i]).data('cartitem-option-name');\n        var optionValue = $($cartitemVariants[i]).data('cartitem-option-value');\n        \n       if (optionName == \"Pricing Chart\") {\n       \titemHasPricingChart = true;\n       } else {\n       \tcartitemVariantsArr.push(optionValue);\n       }\n       \n     });\n     cartitemVariantsArr.sort();   \n      \n     if (itemHasPricingChart) {\n       // find the mathing option with the same variants besides the pricing chart\n       for(var z = 0; z < productVariants.length; z++) { \n          var productOptionsArr = [];\n          if (productVariants[z].option2 != \"\" && productVariants[z].option2 != null) productOptionsArr.push(productVariants[z].option2);\n          if (productVariants[z].option3 != \"\" && productVariants[z].option3 != null) productOptionsArr.push(productVariants[z].option3);\n          productOptionsArr.sort();\n\n          if (JSON.stringify(productOptionsArr) === JSON.stringify(cartitemVariantsArr)) { // they match so variant is valid \n              if (cartCountTotal >= parseInt(productVariants[z].option1, 10) && \n                  parseInt(productVariants[z].option1, 10) >= selectedVariantPriceTier) {\n                  selectedVariantID = productVariants[z].id;  \n                  selectedVariantPriceTier = parseInt(productVariants[z].option1, 10);\n              }\n          } \n        }  \n\n        return selectedVariantID;\n       \n      } else { \n        \n      \treturn $cartItem.data(\"cartitemId\");\n        \n      }\n                               \n    }\n  }, {\n    key: '_displayNewCart',\n    value: function _displayNewCart($cartItem, selectedVariantID, quantity, itemIndex) {\n      \tvar _this3 = this;\n    ////  console.log('_displayNewCart');\n      \t// once product has been added, pull the cart html so we can add the row to the page without a full redirect \n      \treturn $.ajax({\n                \turl: \"/cart\",  \n                    type: 'GET',   \n                    async: false,   \n                    success: function(data){  \n                    \n                      var staticCartSection = $(data).find(\"#shopify-section-static-cart\");  \n                      var newcartItem = staticCartSection.find(\".cart-item[data-cartitem-id=\\\"\" + selectedVariantID + \"\\\"]\").first();\n                      var cartitempos = $('.cartitems article').eq(itemIndex); \n\n                      if (cartitempos.length == 0) {\n                      \t$(newcartItem).insertBefore($('.cartitems .cart-total'));\n                      } else {\n                        $(newcartItem).insertBefore(cartitempos); \n                      }  \n                      \n                   }  \n          }); \n\n    }\n      \n  }, {\n    key: '_checkCartItems',\n    value: function _checkCartItems($cartItem, cartItems) {\n      \n      \tvar _this3 = this;\n       \tvar changePromises = []; \n      \n    \t//  compare the cart items variants with the cart item being updated\n       \t$(cartItems).each(function(x) {  \n          if ($cartItem.data('cartitem-productid') == cartItems[x].product_id) { // match based on updated product id\n            var variants = cartItems[x].variant_options; \n            if (variants.length > 0) {\n            \tif (variants[0] == \"Default Title\") variants.shift(); // remove first element which is the default\n            }     \n            \n            var $cartitemVariants = $cartItem.find(\".cart-item--product-options\");\n            var cartitemVariantsArr  = [];\n            var itemHasPricingChart = false;\n            $cartitemVariants.each(function(i) { \n              \tvar optionName = $($cartitemVariants[i]).data('cartitem-option-name');\n              \tvar optionValue = $($cartitemVariants[i]).data('cartitem-option-value');\n                if (optionName == \"Pricing Chart\") {\n                  itemHasPricingChart = true;\n                } else {\n                  cartitemVariantsArr.push(optionValue)\n                }\n            });\n            \n            cartitemVariantsArr.sort(); \n            \n            if (itemHasPricingChart && variants.length > 0) {\n           \t\tvariants.shift(); // remove first element which is the pricing chart\n            } \n            variants.sort();\n            \n            if (JSON.stringify(variants) === JSON.stringify(cartitemVariantsArr)) { // they match so remove from cart\n                 \n              \t// add all change ajax calls to an array so that we can wait till they complete before continuing\n               \tchangePromises.push(  \n                  $.ajax({  \n                    url: \"/cart/change.js\",  \n                    type: 'POST',  \n                    dataType: 'json',\n                    async: false,     \n                    data: jquery$1.param({ quantity: 0, id: cartItems[x].id}),\n                    success: function(response){   \n                      _this3._didUpdate(cartItems[x].id, -1, response, $cartItem);\n                    }\n                  })\n                 ); \n            }\n             \n          }\n        \n       \t}); \n              \n        return Promise.all(changePromises); // pass array of changes back so that we know they completed before continuing \n     \n    }\n   }, {\n    key: '_updateCartItem',\n    value: function _updateCartItem($cartItem, selectedVariantID, quantity, cartItemInventory, title, caseqty) {\n      \tvar _this3 = this;\n       \tvar addPromises = []; \n\n          if (selectedVariantID != \"\") { \n            \t/// add the product back to the cart with the correct pricing tier\n              addPromises.push(  \n                  $.ajax({  \n                    url: \"/cart/add.js\",  \n                    type: 'POST',  \n                    dataType: 'json',\n                    async: false,    \n                    data: jquery$1.param({\n                      quantity: quantity,\n                      id: selectedVariantID,\n                      \"properties[_pieces_per_case]\": caseqty\n                    }),  \n                    fail: function (response) { \n                        var responseText = JSON.parse(response.responseText);\n                        var error = responseText.description; \n                      console.log('fail', responseText);\n       \t\t\t\t\t_this3.hasInventoryError = true;\n                 \t\t_this3._quantityError(cartItemInventory, title); \n                    },\n                    error: function(response) { \n                      console.log('err XXX', response);\n       \t\t\t\t\t_this3.hasInventoryError = true;\n                 \t\t_this3._quantityError(cartItemInventory, title); \n                    } \n                })\n              );\n \n          }\n      \n      \n      \treturn Promise.all(addPromises);\n      }\n     \n  \t}, {\n    key: '_quantityError',\n    value: function _quantityError(limit, title) {\n      var errorMessage = this.settings.stock_limit.replace('** quantity **', limit).replace('** title **', title);\n\n      this.messageBanner.message(errorMessage, 'error');\n    }\n\n    /**\n     * Update cart content based on information from Shopify\n     *\n     * @param id\n     * @param quantity\n     * @param response\n     * @param $cartItem\n     * @returns {*}\n     * @private\n     */\n\n  }, {\n    key: '_didUpdate',\n    value: function _didUpdate(id, quantity, response, $cartItem) {\n      var _this4 = this;\n\n      // Reload page if all items are removed from cart\n      if (!response.items.length && quantity != -1) {\n        return window.location = '/cart';\n      }\n      \n      this.$header.trigger('cartcount:update', { response: response });\n\n      this.$total.each(function (i, el) {\n        el.innerHTML = Shopify.formatMoney(response.total_price, _this4.settings.money_format);\n        dist$2.update(el);\n      });\n\n      // Select item from response\n      var filteredItems = response.items.filter(function (item) {\n        return item.id === id;\n      });\n\n      if (!filteredItems.length) {\n        return $cartItem.one('trend', function () {\n          $cartItem.off('trend');\n        });\n        \n        //return $cartItem.addClass('removing').one('trend', function () {\n        //  $cartItem.off('trend').remove();\n        //});\n      }\n\n      var cartItem = filteredItems[0];\n      var itemTotal = $cartItem[0].querySelector('[data-cartitem-total]');\n\n      if (cartItem.quantity !== quantity  && quantity != -1) { \n        this._quantityError(cartItem.quantity, cartItem.title);\n        $cartItem.find('[data-quantity-input]').val(cartItem.quantity);\n        $cartItem.find('[data-quantity-select]').val(cartItem.quantity);\n      }\n\n      itemTotal.innerHTML = Shopify.formatMoney(cartItem.price * cartItem.quantity, this.settings.money_format);\n      dist$2.update(itemTotal);\n    }\n\n    /**\n     * Handle Errors returned from Shopify\n     *\n     * @param xhr\n     * @private\n     */\n\n  }, {\n    key: '_handleErrors',\n    value: function _handleErrors() {\n      var xhr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (!xhr) {\n        return;\n      }\n\n      var errors = jquery$1.parseJSON(xhr.responseText);\n      var shippingResponse = {\n        message: this.shipping.error_general\n      };\n\n      if (errors.zip && errors.zip.length > 0) {\n        if (errors.zip[0].indexOf('is not valid') !== -1 || errors.zip[0].indexOf('can\\'t be blank') !== -1) {\n          shippingResponse.message = this.shipping.zip + ' ' + errors.zip;\n        }\n      }\n\n      if (errors.error && errors.error.length > 0) {\n        if (errors.error[0].indexOf('shipment_too_heavy') !== -1) {\n          shippingResponse.message = this.shipping.shipment_too_heavy;\n        }\n      }\n\n      this._handleShippingResponse(shippingResponse);\n    }\n  }, {\n    key: '_initShippingCalc',\n    value: function _initShippingCalc() {\n      this._bindShippingCalcEvents();\n\n      Shopify.Cart.ShippingCalculator.show({\n        submitButton: this.shipping.calculate_shipping,\n        submitButtonDisabled: this.shipping.calculating,\n        customerIsLoggedIn: this.shipping.customer,\n        moneyFormat: this.settings.money_format\n      });\n    }\n  }, {\n    key: '_bindShippingCalcEvents',\n    value: function _bindShippingCalcEvents() {\n      var _this5 = this;\n\n      this.$el.on('click.cart-page', '[data-cartshipping-toggle]', function () {\n        _this5._toggleShippingCalc();\n      });\n\n      this.$el.on('click.cart-page', '[data-cartshipping-submit]', function () {\n        _this5._getShippingRates();\n      });\n\n      this.$el.on('keypress.cart-page', '#address_zip', function (event) {\n        if (event.keyCode === 10 || event.keyCode === 13) {\n          event.preventDefault();\n          _this5.$shippingSubmit.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: '_toggleShippingCalc',\n    value: function _toggleShippingCalc() {\n      var oldText = this.$shippingToggle.text();\n      var newText = this.$shippingToggle.data('cartshipping-toggle');\n\n      this.$shippingToggle.text(newText).data('cartshipping-toggle', oldText);\n\n      this.$shipping.toggleClass('open');\n    }\n  }, {\n    key: '_getShippingRates',\n    value: function _getShippingRates() {\n      var _this6 = this;\n\n      this._disableShippingButton();\n\n      var shippingAddress = {};\n      shippingAddress.country = jquery$1('#address_country').val() || '';\n      shippingAddress.province = jquery$1('#address_province').val() || '';\n      shippingAddress.zip = jquery$1('#address_zip').val() || '';\n\n      // Creates an ajax request which returns shipping information\n      Shopify.getCartShippingRatesForDestination(shippingAddress, function (response, shippingAddress) {\n        var addressBase = [];\n\n        if (shippingAddress.zip.length) {\n          addressBase.push(shippingAddress.zip.trim());\n        }\n\n        if (shippingAddress.province.length) {\n          addressBase.push(shippingAddress.province);\n        }\n\n        if (shippingAddress.country.length) {\n          addressBase.push(shippingAddress.country);\n        }\n\n        var address = addressBase.join(', ');\n\n        var message = '';\n        if (response.length > 1) {\n          var firstRate = Shopify.Cart.ShippingCalculator.formatRate(response[0].price);\n          message = _this6.shipping.multiple_rates.replace('*address*', address).replace('*number_of_rates*', response.length).replace('*rate*', '<span class=\"money\">' + firstRate + '</span>');\n        } else if (response.length === 1) {\n          message = _this6.shipping.one_rate.replace('*address*', address);\n        } else {\n          message = _this6.shipping.no_rates;\n        }\n\n        var rates = [];\n        response.forEach(function (rate) {\n          var price = Shopify.Cart.ShippingCalculator.formatRate(rate.price);\n          var rateValue = _this6.shipping.rate_value.replace('*rate_title*', rate.name).replace('*rate*', '<span class=\"money\">' + price + '</span>');\n\n          rates.push('<li>' + rateValue + '</li>');\n        });\n\n        _this6._handleShippingResponse({\n          message: message,\n          rates: rates\n        });\n      });\n    }\n  }, {\n    key: '_enableShippingButton',\n    value: function _enableShippingButton() {\n      this.$shippingSubmit.text(this.shipping.calculate_shipping).attr('disabled', false);\n    }\n  }, {\n    key: '_disableShippingButton',\n    value: function _disableShippingButton() {\n      this.$shippingSubmit.text(this.shipping.calculating).attr('disabled', true);\n    }\n  }, {\n    key: '_showShippingResponse',\n    value: function _showShippingResponse() {\n      this.$shippingResponse.addClass('visible');\n    }\n  }, {\n    key: '_hideShippingResponse',\n    value: function _hideShippingResponse() {\n      this.$shippingResponse.removeClass('visible');\n    }\n\n    /**\n     * Handle shipping responses\n     *\n     * @param {object} shippingResponse\n     * @property {String} shippingResponse.messages - Error / Success message\n     * @property {Array|String} shippingResponse.rates - Shipping rates\n     * @private\n     */\n\n  }, {\n    key: '_handleShippingResponse',\n    value: function _handleShippingResponse() {\n      var shippingResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      // Hide the response so that it can be populated smoothly\n      this._hideShippingResponse();\n\n      var message = shippingResponse.message || null;\n      var rates = shippingResponse.rates || null;\n\n      // Empty out contents\n      this.$shippingResponseMessage.empty();\n      this.$shippingResponseRates.empty();\n\n      if (message) {\n        this.$shippingResponseMessage.html(message);\n      }\n\n      if (rates) {\n        this.$shippingResponseRates.html(rates);\n      }\n\n      // Reset the calculating button so it can be used again\n      this._enableShippingButton();\n\n      // No error provided\n      if (!message && !rates) {\n        return;\n      }\n\n      // Show the response\n      this._showShippingResponse();\n    }\n  }]);\n  return StaticCart;\n}();\n\nvar dist$3 = createCommonjsModule(function (module, exports) {\n(function (global, factory) {\n  if (typeof undefined === \"function\" && undefined.amd) {\n    undefined(['exports'], factory);\n  } else {\n    factory(exports);\n  }\n})(commonjsGlobal, function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  var defaults = {\n    modal: '.modal',\n    modalInner: '.modal-inner',\n    modalContent: '.modal-content',\n    open: '[data-modal-open]',\n    close: '[data-modal-close]',\n    page: 'body',\n    class: 'modal-visible',\n    loadClass: 'vanilla-modal',\n    clickOutside: true,\n    closeKeys: [27],\n    transitions: true,\n    transitionEnd: null,\n    onBeforeOpen: null,\n    onBeforeClose: null,\n    onOpen: null,\n    onClose: null\n  };\n\n  function throwError(message) {\n    // eslint-disable-next-line no-console\n    console.error('VanillaModal: ' + message);\n  }\n\n  function find(arr, callback) {\n    return function (key) {\n      var filteredArray = arr.filter(callback);\n      return filteredArray[0] ? filteredArray[0][key] : undefined;\n    };\n  }\n\n  function transitionEndVendorSniff() {\n    var el = document.createElement('div');\n    var transitions = [{ key: 'transition', value: 'transitionend' }, { key: 'OTransition', value: 'otransitionend' }, { key: 'MozTransition', value: 'transitionend' }, { key: 'WebkitTransition', value: 'webkitTransitionEnd' }];\n    return find(transitions, function (_ref) {\n      var key = _ref.key;\n      return typeof el.style[key] !== 'undefined';\n    })('value');\n  }\n\n  function isPopulatedArray(arr) {\n    return Object.prototype.toString.call(arr) === '[object Array]' && arr.length;\n  }\n\n  function getNode(selector, parent) {\n    var targetNode = parent || document;\n    var node = targetNode.querySelector(selector);\n    if (!node) {\n      throwError(selector + ' not found in document.');\n    }\n    return node;\n  }\n\n  function addClass(el, className) {\n    if (!(el instanceof HTMLElement)) {\n      throwError('Not a valid HTML element.');\n    }\n    el.setAttribute('class', el.className.split(' ').filter(function (cn) {\n      return cn !== className;\n    }).concat(className).join(' '));\n  }\n\n  function removeClass(el, className) {\n    if (!(el instanceof HTMLElement)) {\n      throwError('Not a valid HTML element.');\n    }\n    el.setAttribute('class', el.className.split(' ').filter(function (cn) {\n      return cn !== className;\n    }).join(' '));\n  }\n\n  function getElementContext(e) {\n    if (e && typeof e.hash === 'string') {\n      return document.querySelector(e.hash);\n    } else if (typeof e === 'string') {\n      return document.querySelector(e);\n    }\n    throwError('No selector supplied to open()');\n    return null;\n  }\n\n  function applyUserSettings(settings) {\n    return _extends({}, defaults, settings, {\n      transitionEnd: transitionEndVendorSniff()\n    });\n  }\n\n  function matches(e, selector) {\n    var allMatches = (e.target.document || e.target.ownerDocument).querySelectorAll(selector);\n    for (var i = 0; i < allMatches.length; i += 1) {\n      var node = e.target;\n      while (node && node !== document.body) {\n        if (node === allMatches[i]) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n    }\n    return null;\n  }\n\n  var VanillaModal = function () {\n    function VanillaModal(settings) {\n      _classCallCheck(this, VanillaModal);\n\n      this.isOpen = false;\n      this.current = null;\n      this.isListening = false;\n\n      this.settings = applyUserSettings(settings);\n      this.dom = this.getDomNodes();\n\n      this.open = this.open.bind(this);\n      this.close = this.close.bind(this);\n      this.closeKeyHandler = this.closeKeyHandler.bind(this);\n      this.outsideClickHandler = this.outsideClickHandler.bind(this);\n      this.delegateOpen = this.delegateOpen.bind(this);\n      this.delegateClose = this.delegateClose.bind(this);\n      this.listen = this.listen.bind(this);\n      this.destroy = this.destroy.bind(this);\n\n      this.addLoadedCssClass();\n      this.listen();\n    }\n\n    _createClass(VanillaModal, [{\n      key: 'getDomNodes',\n      value: function getDomNodes() {\n        var _settings = this.settings,\n            modal = _settings.modal,\n            page = _settings.page,\n            modalInner = _settings.modalInner,\n            modalContent = _settings.modalContent;\n\n        return {\n          modal: getNode(modal),\n          page: getNode(page),\n          modalInner: getNode(modalInner, getNode(modal)),\n          modalContent: getNode(modalContent, getNode(modal))\n        };\n      }\n    }, {\n      key: 'addLoadedCssClass',\n      value: function addLoadedCssClass() {\n        addClass(this.dom.page, this.settings.loadClass);\n      }\n    }, {\n      key: 'setOpenId',\n      value: function setOpenId(id) {\n        var page = this.dom.page;\n\n        page.setAttribute('data-current-modal', id || 'anonymous');\n      }\n    }, {\n      key: 'removeOpenId',\n      value: function removeOpenId() {\n        var page = this.dom.page;\n\n        page.removeAttribute('data-current-modal');\n      }\n    }, {\n      key: 'open',\n      value: function open(allMatches, e) {\n        var page = this.dom.page;\n        var _settings2 = this.settings,\n            onBeforeOpen = _settings2.onBeforeOpen,\n            onOpen = _settings2.onOpen;\n\n        if (!(this.current instanceof HTMLElement === false)) {\n          throwError('VanillaModal target must exist on page.');\n          return;\n        }\n        this.releaseNode(this.current);\n        this.current = getElementContext(allMatches);\n        if (typeof onBeforeOpen === 'function') {\n          onBeforeOpen.call(this, e);\n        }\n        this.captureNode(this.current);\n        addClass(page, this.settings.class);\n        this.setOpenId(this.current.id);\n        this.isOpen = true;\n        if (typeof onOpen === 'function') {\n          onOpen.call(this, e);\n        }\n      }\n    }, {\n      key: 'detectTransition',\n      value: function detectTransition() {\n        var modal = this.dom.modal;\n\n        var css = window.getComputedStyle(modal, null);\n        return Boolean(['transitionDuration', 'oTransitionDuration', 'MozTransitionDuration', 'webkitTransitionDuration'].filter(function (i) {\n          return typeof css[i] === 'string' && parseFloat(css[i]) > 0;\n        }).length);\n      }\n    }, {\n      key: 'close',\n      value: function close(e) {\n        var _settings3 = this.settings,\n            transitions = _settings3.transitions,\n            transitionEnd = _settings3.transitionEnd,\n            onBeforeClose = _settings3.onBeforeClose;\n\n        var hasTransition = this.detectTransition();\n        if (this.isOpen) {\n          this.isOpen = false;\n          if (typeof onBeforeClose === 'function') {\n            onBeforeClose.call(this, e);\n          }\n          removeClass(this.dom.page, this.settings.class);\n          if (transitions && transitionEnd && hasTransition) {\n            this.closeModalWithTransition(e);\n          } else {\n            this.closeModal(e);\n          }\n        }\n      }\n    }, {\n      key: 'closeModal',\n      value: function closeModal(e) {\n        var onClose = this.settings.onClose;\n\n        this.removeOpenId(this.dom.page);\n        this.releaseNode(this.current);\n        this.isOpen = false;\n        this.current = null;\n        if (typeof onClose === 'function') {\n          onClose.call(this, e);\n        }\n      }\n    }, {\n      key: 'closeModalWithTransition',\n      value: function closeModalWithTransition(e) {\n        var _this = this;\n\n        var modal = this.dom.modal;\n        var transitionEnd = this.settings.transitionEnd;\n\n        var closeTransitionHandler = function closeTransitionHandler() {\n          modal.removeEventListener(transitionEnd, closeTransitionHandler);\n          _this.closeModal(e);\n        };\n        modal.addEventListener(transitionEnd, closeTransitionHandler);\n      }\n    }, {\n      key: 'captureNode',\n      value: function captureNode(node) {\n        var modalContent = this.dom.modalContent;\n\n        while (node.childNodes.length) {\n          modalContent.appendChild(node.childNodes[0]);\n        }\n      }\n    }, {\n      key: 'releaseNode',\n      value: function releaseNode(node) {\n        var modalContent = this.dom.modalContent;\n\n        while (modalContent.childNodes.length) {\n          node.appendChild(modalContent.childNodes[0]);\n        }\n      }\n    }, {\n      key: 'closeKeyHandler',\n      value: function closeKeyHandler(e) {\n        var closeKeys = this.settings.closeKeys;\n\n        if (isPopulatedArray(closeKeys) && closeKeys.indexOf(e.which) > -1 && this.isOpen === true) {\n          e.preventDefault();\n          this.close(e);\n        }\n      }\n    }, {\n      key: 'outsideClickHandler',\n      value: function outsideClickHandler(e) {\n        var clickOutside = this.settings.clickOutside;\n        var modalInner = this.dom.modalInner;\n\n        if (clickOutside) {\n          var node = e.target;\n          while (node && node !== document.body) {\n            if (node === modalInner) {\n              return;\n            }\n            node = node.parentNode;\n          }\n          this.close(e);\n        }\n      }\n    }, {\n      key: 'delegateOpen',\n      value: function delegateOpen(e) {\n        var open = this.settings.open;\n\n        var matchedNode = matches(e, open);\n        if (matchedNode) {\n          e.preventDefault();\n          this.open(matchedNode, e);\n        }\n      }\n    }, {\n      key: 'delegateClose',\n      value: function delegateClose(e) {\n        var close = this.settings.close;\n\n        if (matches(e, close)) {\n          e.preventDefault();\n          this.close(e);\n        }\n      }\n    }, {\n      key: 'listen',\n      value: function listen() {\n        var modal = this.dom.modal;\n\n        if (!this.isListening) {\n          modal.addEventListener('click', this.outsideClickHandler, false);\n          document.addEventListener('keydown', this.closeKeyHandler, false);\n          document.addEventListener('click', this.delegateOpen, false);\n          document.addEventListener('click', this.delegateClose, false);\n          this.isListening = true;\n        } else {\n          throwError('Event listeners already applied.');\n        }\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy() {\n        var modal = this.dom.modal;\n\n        if (this.isListening) {\n          this.close();\n          modal.removeEventListener('click', this.outsideClickHandler);\n          document.removeEventListener('keydown', this.closeKeyHandler);\n          document.removeEventListener('click', this.delegateOpen);\n          document.removeEventListener('click', this.delegateClose);\n          this.isListening = false;\n        } else {\n          throwError('Event listeners already removed.');\n        }\n      }\n    }]);\n\n    return VanillaModal;\n  }();\n\n  exports.default = VanillaModal;\n});\n});\n\nvar VanillaModal = unwrapExports(dist$3);\n\nvar Modal = function () {\n  function Modal() {\n    var callbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    classCallCheck(this, Modal);\n\n    this.$body = jquery$1(document.body);\n    this.$window = jquery$1(window);\n\n    this.modal = null;\n    this.$modal = jquery$1('[data-modal-container]');\n    this.$modalInner = this.$modal.find('[data-modal-inner]');\n\n    // Extend default vanilla-modal callbacks back to instantiator of Modal\n    this.defaultCallbacks = {\n      onOpen: function onOpen() {},\n      onClose: function onClose() {},\n      onBeforeOpen: function onBeforeOpen() {},\n      onBeforeClose: function onBeforeClose() {}\n    };\n\n    this.callbacks = jquery$1.extend({}, this.defaultCallbacks, callbacks);\n\n    this._onOpen = this._onOpen.bind(this);\n    this._onBeforeOpen = this._onBeforeOpen.bind(this);\n    this._onClose = this._onClose.bind(this);\n    this._onBeforeClose = this._onBeforeClose.bind(this);\n\n    this.position = this.position.bind(this);\n\n    this.modalOptions = {\n      loadClass: '',\n      class: 'modal-loaded',\n      onOpen: this._onOpen,\n      onClose: this._onClose,\n      onBeforeOpen: this._onBeforeOpen,\n      onBeforeClose: this._onBeforeClose,\n      transitions: false\n    };\n  }\n\n  createClass(Modal, [{\n    key: 'unload',\n    value: function unload() {\n      if (!this.modal || !this.modal.isOpen) return;\n\n      this.modal.destroy();\n    }\n\n    /**\n     * Open a modal with contents from selector\n     *\n     * @param selector\n     * @param handle\n     */\n\n  }, {\n    key: 'open',\n    value: function open(selector) {\n      var handle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'general';\n\n      this._addModalClass(handle);\n      this.modal = new VanillaModal(this.modalOptions);\n      this.modal.open(selector);\n    }\n  }, {\n    key: 'close',\n    value: function close() {\n      this.modal.close();\n    }\n  }, {\n    key: 'isOpen',\n    value: function isOpen() {\n      return this.modal && this.modal.isOpen;\n    }\n\n    /**\n     * Update the vertical positioning of modal\n     */\n\n  }, {\n    key: 'position',\n    value: function position() {\n      var windowHeight = window.innerHeight;\n\n      var modalHeight = this.$modalInner.outerHeight();\n      var modalPadding = parseInt(this.$modal.css('padding-top'), 10) * 2;\n\n      var offset = (windowHeight - modalPadding - modalHeight) / 2;\n      var marginTop = offset > 0 ? offset : 0;\n      this.$modalInner.css({ marginTop: marginTop });\n    }\n\n    /**\n     * Add a class to the modal for individual styling\n     * @param handle\n     * @private\n     */\n\n  }, {\n    key: '_addModalClass',\n    value: function _addModalClass(handle) {\n      this.$modal.addClass('modal--' + handle);\n    }\n\n    /**\n     * Remove modal class based on the handle\n     * @private\n     */\n\n  }, {\n    key: '_removeModalClass',\n    value: function _removeModalClass() {\n      var modalClass = this.$modal.attr('class').match(/modal--[\\w-]*\\b/);\n      if (!modalClass) {\n        return;\n      }\n\n      this.$modal.removeClass(modalClass[0]);\n    }\n  }, {\n    key: '_onClose',\n    value: function _onClose() {\n      this._removeModalClass();\n      this.$body.removeClass('scroll-lock').removeClass('modal-visible');\n\n      this.$window.off('resize.modal');\n\n      this.$modalInner.css({ marginTop: '' });\n\n      this.callbacks.onClose();\n    }\n  }, {\n    key: '_onOpen',\n    value: function _onOpen() {\n      var _this = this;\n\n      this.position();\n      this.$body.addClass('scroll-lock').addClass('modal-visible');\n      this.$window.on('resize.modal', justDebounce$1(function () {\n        return _this.position();\n      }, 16, true, true));\n\n      this.callbacks.onOpen();\n    }\n  }, {\n    key: '_onBeforeClose',\n    value: function _onBeforeClose() {\n      this.callbacks.onBeforeClose();\n    }\n  }, {\n    key: '_onBeforeOpen',\n    value: function _onBeforeOpen() {\n      this.callbacks.onBeforeOpen();\n    }\n  }]);\n  return Modal;\n}();\n\n/**\n * Traps the focus in a particular container\n *\n * @param {object} options - Options to be used\n * @param {jQuery} options.$container - Container to trap focus within\n * @param {jQuery} options.$elementToFocus - Element to be focused when focus leaves container\n * @param {string} options.namespace - Namespace used for new focus event handler\n */\nfunction trapFocus(options) {\n  var eventName = options.namespace ? 'focusin.' + options.namespace : 'focusin';\n\n  if (!options.$elementToFocus) {\n    options.$elementToFocus = options.$container;\n  }\n\n  options.$container.attr('tabindex', '-1');\n  options.$elementToFocus.focus();\n\n  jquery$1(document).on(eventName, function (evt) {\n    if (options.$container[0] !== evt.target && !options.$container.has(evt.target).length) {\n      options.$container.focus();\n    }\n  });\n}\n\n/**\n * Removes the trap of focus in a particular container\n *\n * @param {object} options - Options to be used\n * @param {jQuery} options.$container - Container to trap focus within\n * @param {string} options.namespace - Namespace used for new focus event handler\n */\nfunction removeTrapFocus(options) {\n  var eventName = options.namespace ? 'focusin.' + options.namespace : 'focusin';\n\n  if (options.$container && options.$container.length) {\n    options.$container.removeAttr('tabindex');\n  }\n\n  jquery$1(document).off(eventName);\n}\n\nvar Node = function () {\n  function Node(variant) {\n    classCallCheck(this, Node);\n\n    this.variant = variant;\n    this.optionsCount = this.variant.options.length;\n    this.neighbors = [];\n\n    for (var i = 0; i < this.optionsCount; i++) {\n      this.neighbors.push([]);\n    }\n  }\n\n  createClass(Node, [{\n    key: 'addNeighbor',\n    value: function addNeighbor(variant) {\n      for (var i = 0; i < this.optionsCount; i++) {\n        if (this.variant.options[i] !== variant.options[i]) {\n          this.neighbors[i].push(variant);\n          break;\n        }\n      }\n    }\n  }, {\n    key: 'getValidOptions',\n    value: function getValidOptions() {\n      var _this = this;\n\n      var options = [];\n\n      var _loop = function _loop(i) {\n        var variants = [_this.variant].concat(toConsumableArray(_this.neighbors[i]));\n        options[i] = {};\n\n        variants.forEach(function (item) {\n          var variant = item;\n          var option = variant.options[i];\n\n          options[i][option] = {\n            available: options[i][option] && options[i][option].available || variant.available\n          };\n        });\n      };\n\n      for (var i = 0; i < this.optionsCount; i++) {\n        _loop(i);\n      }\n\n      return options;\n    }\n  }]);\n  return Node;\n}();\n\nvar ProductOptions = function () {\n  function ProductOptions(product) {\n    classCallCheck(this, ProductOptions);\n\n    this.productHandle = product.handle;\n    this.optionsCount = product.options.length;\n    this.variants = product.variants;\n    this.nodeMap = {};\n\n    this._generateNodeMap(product);\n  }\n\n  createClass(ProductOptions, [{\n    key: '_generateNodeMap',\n    value: function _generateNodeMap() {\n      var _this2 = this;\n\n      this.variants.forEach(function (variant) {\n        _this2.nodeMap[variant.id] = new Node(variant);\n\n        _this2.variants.forEach(function (variant2) {\n          _this2.nodeMap[variant.id].addNeighbor(variant2);\n        });\n      });\n    }\n  }, {\n    key: 'getVariantFromOptions',\n    value: function getVariantFromOptions(options) {\n      this.variants.forEach(function (variant) {\n        var found = true;\n\n        for (var i = 0; i < variant.options.length; i++) {\n          if (options[i] !== variant.options[i]) {\n            found = false;\n          }\n        }\n\n        if (found) {\n          return variant;\n        }\n      });\n\n      return false;\n    }\n  }, {\n    key: 'getClosestVariantFromOptions',\n    value: function getClosestVariantFromOptions(options) {\n      var closestVariant = null;\n      var matchingValues = 0;\n\n      this.variants.forEach(function (variant) {\n        var tempMatchingValues = 0;\n\n        for (var i = 0; i < variant.options.length; i++) {\n          if (options[i] === variant.options[i]) {\n            tempMatchingValues++;\n          } else {\n            break;\n          }\n        }\n\n        if (tempMatchingValues >= matchingValues) {\n          closestVariant = variant;\n          matchingValues = tempMatchingValues;\n        }\n      });\n\n      return closestVariant ? closestVariant : false;\n    }\n  }, {\n    key: 'getVariantOrClosestFromOptions',\n    value: function getVariantOrClosestFromOptions(options) {\n      return this.getVariantFromOptions(options) || this.getClosestVariantFromOptions(options);\n    }\n  }, {\n    key: 'getAvailableOptionsFromVariant',\n    value: function getAvailableOptionsFromVariant(variant) {\n      return this.nodeMap[variant.id].getValidOptions();\n    }\n  }]);\n  return ProductOptions;\n}();\n\nvar VariantHelper = function () {\n  function VariantHelper(product, $variants, $options) {\n    classCallCheck(this, VariantHelper);\n\n    this.product = product;\n    this.optionsCount = this.product.options.length;\n    this.$variants = $variants;\n    this.$options = $options;\n    this.productOptions = new ProductOptions(this.product);\n    this.$colorlist = $('.color-swatch-list');\n    this.optionsTypes = {\n      select: 'select',\n      radio: 'input[type=\"radio\"]'\n    };\n\n    this._bindEvents();\n\n    if (this.$options.is(this.optionsTypes.select)) {\n      this.optionsType = this.optionsTypes.select;\n    } else if (this.$options.is(this.optionsTypes.radio)) {\n      this.optionsType = this.optionsTypes.radio;\n    } else {\n      console.warn('Variant helper: Option set is not a valid type');\n      this._unbindEvents();\n    }\n\n    this.$colorlist.find(\"li.currentSwatch label\").mouseover().click();\n    //this._switchVariant(true);\n  }\n\n  createClass(VariantHelper, [{\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this = this;  \n      this.$options.on('change.variant-helper', function () { \n        return _this._switchVariant();\n      });\n       \n      this.$colorlist.find(\"li label\").on('mouseover touchstart', function () { \n        return _this._changeImagesByColor($(this));\n      });\n      \n      this.$colorlist.find(\"li label\").on('mouseout touchend', function () {   \n       \t$(\".color-swatch-list li\").removeClass(\"fade\");\n       \t$(\".color-swatch-list li.currentSwatch label\").click();\n      });\n      \n       this.$colorlist.find(\"li label\").on('click touchstart', function () {   \n        return _this._changeColor($(this));\n      });\n      \n      $(\".color-swatch-list li\").on('click',function(){\n        \t\tconsole.log(\"clicked\");\n      \t\t   return _this._switchVariant();\n\t\t});\n    }\n  }, {\n    key: '_unbindEvents',\n    value: function _unbindEvents() {\n      this.$options.off('change.variant-helper');\n      this.$colorlist.off('mouseover');\n    }\n  }, {\n    key: '_changeImagesByColor',\n    value: function _changeImagesByColor($selectedcolor) {  \n      var colorSelectID = $selectedcolor.parents(\".color-swatch-list\").attr(\"data-select-option\");  \n      var $colorSelect = $(\".form-field-select[data-product-option=\" + colorSelectID + \"]\").first(); \n      \n      \n      \n      var options = [];\n      var product = this.product; \n      var availableOptions = null;\n\n      $(\".color-swatch-list li\").removeClass(\"hoverSwatch\");\n       \n      this.$options.each(function (i, select) {\n        if ($colorSelect.data(\"product-option\") == $(select).data(\"product-option\")) {\n            \n            var $selectedOption = $(select.options).filter(function() { \n   \t\t\t\treturn this.value == $selectedcolor.attr(\"data-name\") ; \n  \t\t\t}); \n            options.push($selectedOption[0].value);  \n            $(\".color-swatch-list li\").find('[data-name=\"' + $selectedOption[0].value + '\"]').parent(\"li\").addClass(\"hoverSwatch\");\n                    \n        } else {\n        \toptions.push(select.value);\n        } \n      });  \n     \n      $(\".color-swatch-list li\").not(\".hoverSwatch\").addClass(\"fade\");\n      var variant = this.productOptions.getVariantOrClosestFromOptions(options);\n    \n      $(\".selected-variant-color-name\").html(\"\");\n      if ( variant.option2 != \"\" &  variant.option2 != null) $(\".selected-variant-color-name\").html(\"<span>Color:</span> \" + variant.option2); \n      \n      \n         if($(\"#size-variant-name-div\").length>0){\n      \t    $(\".selected-variant-color-name\").css(\"display\",\"none\");\n        \t  if (variant.option2 != \"\" &  variant.option2 != null) $(\".selected-variant-size-name\").html(\"<span>Size:</span> \" + variant.option2); \n    \t  }\n      \n      jquery$1(window).trigger('product-variantview-switch', { product: product, variant: variant });\n      \n  \n    }\n  }, {\n    key: '_changeColor',\n    value: function _changeColor($selectedcolor) {  \n      var colorSelectID = $selectedcolor.parents(\".color-swatch-list\").attr(\"data-select-option\"); \n      var colorSelect = $(\".form-field-select[data-product-option=\" + colorSelectID + \"]\").first(); \n      colorSelect.val($selectedcolor.attr(\"data-name\")).change();\n    }\n  }, {\n    key: '_switchVariant',\n    value: function _switchVariant() {\n      var firstLoad = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var options = [];\n      var product = this.product;\n      var variant = null;\n      var availableOptions = null;\n\n      $(\".color-swatch-list li\").removeClass(\"currentSwatch hoverSwatch\");\n      \n      if (this.optionsType === this.optionsTypes.select) {\n        this.$options.each(function (i, option) { \n          options.push(option.value);\n          $(\".color-swatch-list li\").find('[data-name=\"' + option.value + '\"]').parent(\"li\").addClass(\"currentSwatch\");\n        });\n      } else if (this.optionsType === this.optionsTypes.radio) {\n        this.$options.filter(':checked').each(function (i, option) {\n          options.push(option.value);\n        });\n      } else {\n        return;\n      }\n      \n      variant = this.productOptions.getVariantOrClosestFromOptions(options);\n\n      if (variant) {\n        availableOptions = this.productOptions.getAvailableOptionsFromVariant(variant);\n      } else {\n        return;\n      }\n      \n\n      if (this.optionsType === this.optionsTypes.select) {\n        this._switchVariantSelect(variant, availableOptions);\n           \n      } else if (this.optionsType === this.optionsTypes.radio) {\n        this._switchVariantRadio(variant, availableOptions); \n      } else {\n        return;\n      }\n\n      this.$variants.val(variant.id);\n       \n      //if (firstLoad) $(\".swatchColor.currentSwatch\").removeClass(\"currentSwatch\"); \n       \n    //  if(firstLoad){\n     // \tconsole.log(variant);\n     //  }\n      \n      $(\".selected-variant-color-name\").html(\"\");\n      if ( variant.option2 != \"\" &  variant.option2 != null) $(\".selected-variant-color-name\").html(\"<span>Color:</span> \" + variant.option2); \n      \n      jquery$1(window).trigger('product-variant-switch', { product: product, variant: variant, firstLoad: firstLoad });\n    }\n  }, {\n    key: '_switchVariantSelect',\n    value: function _switchVariantSelect(variant, availableOptions) {\n\n      var _this2 = this;\n\n      var _loop = function _loop(i) {\n        // Corresponding select dropdown\n        var $select = jquery$1(_this2.$options[i]);\n        var $optionEls = $select.find('option');\n\n        // Iterate over each option on dropdown\n        $optionEls.each(function (index, option) {\n          var $option = jquery$1(option);\n          var value = option.value;\n\n          // Not an available option\n          $option.prop('disabled', !availableOptions[i][value] || !availableOptions[i][value].available).prop('selected', false);\n\n          // Dropdown option matches variant option\n          if (variant.options[i] === value) {\n            $option.prop('disabled', false).prop('selected', true);\n          }\n        });\n      };\n\n      // Iterate over each option type\n      for (var i = 0; i < this.product.options.length; i++) {\n        _loop(i);\n      }\n    }\n  }, {\n    key: '_switchVariantRadio',\n    value: function _switchVariantRadio(variant, availableOptions) {\n      var _this3 = this;\n\n      this.$options.attr('disabled', true).prop('checked', false).attr('data-soldout', false);\n\n      var _loop2 = function _loop2(i) {\n        var selector = encodeURIComponent(_this3.product.options[i]).replace(/%20/g, '+').replace(/[!'()*]/g, function (char) {\n          return '%' + char.charCodeAt(0).toString(16).toUpperCase();\n        });\n\n        var $options = _this3.$options.filter('[name=\"' + selector + '\"]');\n        $options.each(function (index, option) {\n          var $option = jquery$1(option);\n\n          if (variant.options[i] === $option.val()) {\n            $option.prop('checked', true);\n          }\n\n          if (availableOptions[i][$option.val()]) {\n            $option.attr('disabled', false);\n\n            if (!availableOptions[i][$option.val()].available) {\n              $option.attr('disabled', true);\n              $option.attr('data-soldout', true);\n            }\n          }\n        });\n      };\n\n      for (var i = 0; i < this.product.options.length; i++) {\n        _loop2(i);\n      }\n    }\n  }, {\n    key: 'isDefault',\n    value: function isDefault() {\n      if (this.product.variants[0].title === 'Default Title' && this.product.variants[0].option1 === 'Default Title') {\n        return true;\n      }\n    }\n  }, {\n    key: 'hasSingleOption',\n    value: function hasSingleOption() {\n      return this.optionsCount === 1;\n    }\n  }, {\n    key: 'getSelectedVariant',\n    value: function getSelectedVariant() {\n      var options = [];\n\n      if (this.optionsType === this.optionsTypes.select) {\n        this.$options.each(function (i, option) {\n          options.push(option.value);\n        });\n      } else if (this.optionsType === this.optionsTypes.radio) {\n        this.$options.filter(':checked').each(function (i, option) {\n          options.push(option.value);\n        });\n      } else {\n        return;\n      }\n\n      return this.productOptions.getVariantFromOptions(options);\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      this._unbindEvents();\n    }\n  }]);\n  return VariantHelper;\n}();\n\nvar Images = function () {\n  function Images() {\n    classCallCheck(this, Images);\n  }\n\n  createClass(Images, [{\n    key: 'preload',\n\n    /**\n     * Preloads an image in memory and uses the browsers cache to store it until needed.\n     *\n     * @param {Array} images - A list of image urls\n     * @param {String} size - A shopify image size attribute\n     */\n    value: function preload(images, size) {\n      if (typeof images === 'string') {\n        images = [images];\n      }\n\n      for (var i = 0; i < images.length; i++) {\n        this.loadImage(this.getSizedImageUrl(images[i], size));\n      }\n    }\n\n    /**\n     * Loads and caches an image in the browsers cache.\n     *\n     * @param {string} path - An image url\n     */\n\n  }, {\n    key: 'loadImage',\n    value: function loadImage(path) {\n      return new Image().src = path;\n    }\n\n    /**\n     * Adds a Shopify size attribute to a URL\n     *\n     * @param src\n     * @param size\n     * @returns {*}\n     */\n\n  }, {\n    key: 'getSizedImageUrl',\n    value: function getSizedImageUrl() {\n      var src = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var size = arguments[1];\n\n      if (!size) {\n        return null;\n      }\n\n      if (size === 'master') {\n        return this.removeProtocol(src);\n      }\n\n      var match = src.match(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n\n      if (match) {\n        var prefix = src.split(match[0]);\n        var suffix = match[0];\n\n        return this.removeProtocol(prefix[0] + '_' + size + suffix);\n      } else {\n        console.warn('No ' + size + ' found for \\'' + src);\n        return null;\n      }\n    }\n  }, {\n    key: 'removeProtocol',\n    value: function removeProtocol(path) {\n      return path.replace(/http(s)?:/, '');\n    }\n  }]);\n  return Images;\n}();\n\nvar AddToCartFlyout = function () {\n  function AddToCartFlyout() {\n    classCallCheck(this, AddToCartFlyout);\n\n    this.formData = {};\n    this.settings = {};\n    this.events = [];\n    this.Images = new Images();\n    this.flyOutSelector = '[data-atc-banner]';\n    this.$atcTemplate = jquery$1('[data-templates] ' + this.flyOutSelector);\n\n    this._onInit = this._onInit.bind(this);\n    this._onOpen = this._onOpen.bind(this);\n    this._onClose = this._onClose.bind(this);\n    this._onError = this._onError.bind(this);\n    this._onSuccess = this._onSuccess.bind(this);\n    this._handleDocumentClick = this._handleDocumentClick.bind(this);\n\n    this.messageBanner = new MessageBanner();\n\n    this.header = document.querySelector('.site-header-wrapper');\n    this.$header = jquery$1(this.header);\n    this.$body = jquery$1(document.body);\n  }\n\n  createClass(AddToCartFlyout, [{\n    key: 'init',\n    value: function init(formData, options) {\n      var callbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      // If any FlyOuts are fully open, close them\n      this._closeFlyOuts();\n\n      this.formData = formData;\n\n      // Allows ATC Flow to be overridden\n      this.callbacks = jquery$1.extend({\n        onInit: this._onInit,\n        onClose: this._onClose,\n        onError: this._onError,\n        onOpen: this._onOpen,\n        onSuccess: this._onSuccess\n      }, callbacks);\n\n      var $atcButton = options.$atcButton;\n\n      this.settings = jquery$1.extend({\n        moneyFormat: null,\n        cartRedirection: false\n      }, options.settings);\n\n      this.callbacks.onInit();\n\n       var _this2 = this;\n      $.ajax({ url: \"/cart.js\", type: 'GET', dataType: 'json',  async: false,   \n            success: function(cart){ \n              \n              \tvar product = options.product; \n                var itemHasPricingChart = ($('.case-pack-options .num-per-case').length > 0) ? true : false;\n                var quantity = parseInt($('.form-field-input[data-quantity-input]').val(), 10);\n              \tvar itemVariantsArr = [];\n   \t\t\t\tif ($('.form-field-select[data-product-option=\"1\"]').length != 0)  itemVariantsArr.push($('.form-field-select[data-product-option=\"1\"]').val().toString());\n   \t\t\t\tif ($('.form-field-select[data-product-option=\"2\"]').length != 0)  itemVariantsArr.push($('.form-field-select[data-product-option=\"2\"]').val().toString()); \n   \t\t\t\titemVariantsArr.sort(); \n                var cartCountTotal = parseInt(quantity, 10);              \n              \tvar cartItems = cart.items;\n              \n                $(cartItems).each(function(x) {  \n                   \tif (!cartItems[x].gift_card) {\n                  \t\tcartCountTotal = cartCountTotal + cartItems[x].quantity;\n               \t\t} \n                }); \n              \n              \tvar oldItemQty = 0;\n              \tvar noInventory = false;\n                 \n               \tvar selectedVariantID = \"\";\n     \t\t\tvar selectedVariantPriceTier = 1; \n                 \n                if (itemHasPricingChart) {\n                      // find the mathing option with the same variants besides the pricing chart\n                  for(var z = 0; z < product.variants.length; z++) { \n                      var productOptionsArr = [];\n                      if (product.variants[z].option2 != \"\" && product.variants[z].option2 != null) productOptionsArr.push(product.variants[z].option2);\n                      if (product.variants[z].option3 != \"\" && product.variants[z].option3 != null) productOptionsArr.push(product.variants[z].option3);\n                      productOptionsArr.sort();\n\n                      if (JSON.stringify(productOptionsArr) === JSON.stringify(itemVariantsArr)) { // they match so variant is valid \n                          if (cartCountTotal >= parseInt(product.variants[z].option1, 10) && \n                              parseInt(product.variants[z].option1, 10) >= selectedVariantPriceTier) {  \n                              selectedVariantID = product.variants[z].id;\n                              selectedVariantPriceTier = parseInt(product.variants[z].option1, 10);\n                              var optionSelected = $(\"#variants option[value='\" + product.variants[z].id + \"']\");\n                              if (optionSelected.length == 0) selectedVariantID = \"\";\n                           }\n                      } \n                  }   \n\n                } else {\n                  selectedVariantID = $(\"#variants\").val();\n                }\n              \n              \n                \n                //ADDED BY FRANK TO HACK WHATEVER IS GOING ON HERE.\n                //if(selectedVariantID == \"\"){\n                //\tselectedVariantID = \"18681983434825\";\n             //   }\n              \n              \tif (selectedVariantID == \"\") {\n        \t\t\t_this2.callbacks.onError(\"We're sorry, you cannot add that many of this item/color to your cart. [variant]\");\n                  \n                } else {\n                  \n                  var changePromises = []; \n                  $(cartItems).each(function(x) {  \n                        if (product.id == cartItems[x].product_id) { // match based on updated product id \n\n                          var variants = cartItems[x].variant_options;  \n                          if (itemHasPricingChart && variants.length > 0) variants.shift(); // remove first element which is the pricing chart\n                          if (variants.length > 0) {\n                             if (variants[0] == \"Default Title\") variants.shift(); // remove first element which is the default\n                          }                          \n                          variants.sort();\n                           \n                          if (JSON.stringify(variants) === JSON.stringify(itemVariantsArr)) { // they match so remove from cart \n                              oldItemQty = oldItemQty + cartItems[x].quantity;\n                              var itemInv = parseInt($(\"#variants option[value='\" + cartItems[x].id + \"']\").data(\"inventory\"), 10);\n \t\t\t\t\t\t\t  if (isNaN(itemInv)) itemInv = parseInt($(\"#variants\").data(\"inventory\"), 10);\n                                \n                            if (itemInv < parseInt(oldItemQty + quantity, 10)) {\n                              noInventory = true;\n                            } else {\n                              changePromises.push(  \n                                $.ajax({ url: \"/cart/change.js\", type: 'POST',  dataType: 'json', async: false, \n                                        data: jquery$1.param({ quantity: 0, id: cartItems[x].id}),    success: function(data){  }  \n                                })); \n                            }\n                          } \n                        } \n                  });\n                  \n\n                  if (noInventory) {\n                      _this2.callbacks.onError(\"We're sorry, you cannot add that many of this item/color to your cart. [inventory]\");\n\n                  } else {\n                    \t\n                  \t\tvar updateCartComplete = Promise.all(changePromises).then(function(){ \n                      \n                        \tvar newQty = parseInt(oldItemQty + quantity, 10);\n                            $('.form-field-input[data-quantity-input]').val(newQty);\n                            $(\"#product-select\").val(selectedVariantID);\n                            $('#variants').val(selectedVariantID); \n\n                            if ($('#variants').val() != \"\" && $('#variants').val() != null) {\n\n                                var quantityField = _this2.formData.filter(function (data) { return data.name === 'quantity' });\n                                quantityField[0].value = newQty;\n                                var idField = _this2.formData.filter(function (data) { return data.name === 'id' });\n                                idField[0].value = selectedVariantID;\n                                var productSelectIdField = _this2.formData.filter(function (data) { return data.name === 'product-select-id' });\n                                productSelectIdField[0].value = selectedVariantID;\n\n                                _this2._updateCart($atcButton);\n                                _this2._disableButton($atcButton); \n                            } else { \n                                _this2.callbacks.onError(\"We're sorry, you cannot add that many of this item/color to your cart. [xxx] \");\n                            } \n                        \t\n                          \treturn;\n\n                    \t}); \n\t\t\t\t\t}\n                  \n                } \n\n              \treturn\n            }\n        });  \n      \n      //this._updateCart($atcButton);\n      //this._disableButton($atcButton);\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      this.messageBanner.dismissBanners();\n      this._removeFlyOuts();\n      delete this.Images;\n    }\n  }, {\n    key: '_updateCart',\n    value: function _updateCart($atcButton) {\n      var _this = this;\n\n      var $flyOut = this.$atcTemplate.clone();\n\n      var quantityField = this.formData.filter(function (data) {\n        return data.name === 'quantity';\n      });\n      var quantity = quantityField[0].value;\n\n      jquery$1.ajax({\n        type: 'POST',\n        url: '/cart/add.js',\n        data: jquery$1.param(this.formData),\n        dataType: 'json'\n      }).done(function (response) {\n        if (response.image) {\n          var imageUrl = _this.Images.getSizedImageUrl(response.image, '200x');\n          var image = _this.Images.loadImage(imageUrl);\n\n          $flyOut.find('[data-atc-banner-product-image]').html('<img src=\"' + image + '\" alt=\"' + response.product_title + '\">');\n        }\n\n        $flyOut.find('[data-atc-banner-product-title]').text(response.product_title + ' \\xD7 ' + quantity);\n\n        /*\n          TODO: Bring in `variant.options`, iterate through to get option\n            name for: <strong>Option name:</strong> Option\n         */\n        if (response.variant_options[0] !== 'Title' && response.variant_options[0] !== 'Default Title') {\n          $flyOut.find('[data-atc-banner-product-options]').text(response.variant_options.join(', '));\n        }\n\n        /*\n          TODO: Bring in variant, and use that to check compare_at_price\n            to see if the item is on sale\n         */\n        var $productPrice = $flyOut.find('[data-atc-banner-product-price]');\n        $productPrice.text(Shopify.formatMoney(response.price, _this.settings.moneyFormat));\n\n        // Update price to local currency\n        dist$2.update($productPrice[0]);\n\n        jquery$1.ajax({\n          type: 'GET',\n          url: '/cart.js',\n          dataType: 'json'\n        }).done(function (response) {\n          if (_this.settings.cartRedirection) {\n            //return location.href = '/cart';\n          }\n \n          _this.callbacks.onSuccess();\n\n          // Reset formData in case instance is never cleared\n          _this.formData = {};\n\n          var $subTotal = $flyOut.find('[data-atc-banner-cart-subtotal]');\n          $subTotal.text(Shopify.formatMoney(response.original_total_price, _this.settings.moneyFormat));\n          dist$2.update($subTotal[0]);\n\n          $flyOut.find('[data-atc-banner-cart-button]').find('span').text(response.item_count);\n\n          _this.$body.append($flyOut);\n\n          // Notifiy Header of new cart count\n          _this.$header.trigger('cartcount:update', { response: response });\n\n          _this._positionFlyOut($flyOut);\n          _this._bindEvents($flyOut);\n          _this._openFlyOut($flyOut, $atcButton);\n          \n          setTimeout(function () { \n            _this._closeFlyOut($flyOut); }, 3000); \n          \n        });\n      }).fail(function (response) {\n        var responseText = JSON.parse(response.responseText);\n        var error = responseText.description;\n\n        _this._enableButton($atcButton);\n        _this.callbacks.onError(error);\n      });\n    }\n  }, {\n    key: '_onError',\n    value: function _onError(error) {\n      this.messageBanner.message(error, 'error');\n    }\n  }, {\n    key: '_onInit',\n    value: function _onInit() {\n      this.messageBanner.dismissBanners();\n    }\n  }, {\n    key: '_onOpen',\n    value: function _onOpen() {\n      /*\n        The `this.callbacks.onOpen` is used pull keyboard focus into the active flyout\n       */\n      console.warn('AddToCartFlyout onOpen callback not specified');\n    }\n  }, {\n    key: '_onClose',\n    value: function _onClose() {\n      /*\n        The `this.callbacks.onClose` is used to return focus to originating DOM\n       */\n\n      console.warn('AddToCartFlyout onClose callback not specified');\n    }\n  }, {\n    key: '_onSuccess',\n    value: function _onSuccess() {\n      /*\n        By default, the ATC Flyout doesn't need any additional success callbacks\n         The `this.callbacks.onSuccess` is used to allow other views to initiate\n        behaviour when a product has been added to the cart\n       */\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents($flyOut) {\n      var _this2 = this;\n\n      this.events.push([$flyOut.on('click.atc-banner', '[data-atc-banner-close]', function (event) {\n        event.preventDefault();\n        _this2._closeFlyOut($flyOut);\n      }), this.$body.on('position-banners.atc-banner', function () {\n        _this2._positionFlyOut($flyOut);\n      }), jquery$1(window).on('resize.atc-banner', function () {\n        justDebounce$1(_this2._positionFlyOut($flyOut), 250);\n      }), jquery$1(window).on('scroll.atc-banner', function () {\n        _this2._positionFlyOut($flyOut);\n      })]\n      //$(document).on('touchstart.atc-banner, click.atc-banner', this._handleDocumentClick),\n      );\n    }\n\n    /**\n     * Trigger any existing open FlyOuts to close\n     *\n     * @private\n     */\n\n  }, {\n    key: '_closeFlyOuts',\n    value: function _closeFlyOuts() {\n      var _this3 = this;\n\n      var $excludeFlyOut = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      jquery$1(this.flyOutSelector).filter('[data-flyout-active]').each(function (index, el) {\n        var $flyOut = jquery$1(el);\n\n        if ($excludeFlyOut && $flyOut.is($excludeFlyOut)) {\n          return;\n        }\n\n        _this3._closeFlyOut($flyOut, index);\n      });\n    }\n  }, {\n    key: '_openFlyOut',\n    value: function _openFlyOut($flyOut, $atcButton) {\n      var _this4 = this;\n\n      /*\n       If user has initiated a new ATC Flow before the first has finished,\n       the first FlyOut could have opened after the first attempt to close open flyouts\n      */\n      this._closeFlyOuts($flyOut);\n\n      $flyOut.addClass('animating animating-in').one('trend', function () {\n        $flyOut.removeClass('animating animating-in').addClass('visible').off('trend');\n\n        $flyOut.attr('data-flyout-active', true);\n        _this4.callbacks.onOpen({\n          $container: $flyOut,\n          $elementToFocus: $flyOut.find('[data-atc-banner-cart-button]')\n        });\n\n        _this4._enableButton($atcButton);\n      });\n    }\n\n    /**\n     * Close an open FlyOut\n     *\n     * @param $flyOut\n     * @param index\n     * @private\n     */\n\n  }, {\n    key: '_closeFlyOut',\n    value: function _closeFlyOut() {\n      var _this5 = this;\n\n      var $flyOut = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (!$flyOut) {\n        return;\n      }\n\n      $flyOut.addClass('animating animating-out').one('trend', function () {\n        $flyOut.removeClass('animating animating-out visible').one('trend', function () {\n          $flyOut.off('trend');\n          _this5._removeFlyOut($flyOut, index);\n          _this5.callbacks.onClose();\n        });\n      });\n    }\n  }, {\n    key: '_removeFlyOuts',\n    value: function _removeFlyOuts() {\n      var _this6 = this;\n\n      jquery$1(this.flyOutSelector).filter('[data-flyout-active]').each(function (index, el) {\n        _this6._removeFlyOut(jquery$1(el), index);\n      });\n    }\n\n    /**\n     * Remove the Flyout from the DOM, and clean up listeners\n     *\n     * @param $flyOut\n     * @param index\n     * @private\n     */\n\n  }, {\n    key: '_removeFlyOut',\n    value: function _removeFlyOut($flyOut, index) {\n      if (this.events[index]) {\n        this.events[index].forEach(function ($el) {\n          return $el.off('.atc-banner');\n        });\n        this.events.splice(index, 1);\n      }\n\n      if ($flyOut) {\n        $flyOut.remove();\n      }\n    }\n\n    /**\n     * Position FlyOut beneath header if its in viewport, or at top of viewport\n     *\n     * @param $flyOut\n     * @private\n     */\n\n  }, {\n    key: '_positionFlyOut',\n    value: function _positionFlyOut($flyOut) {\n      $flyOut.css({ top: getHeaderOffset(this.header, true) });\n    }\n  }, {\n    key: '_disableButton',\n    value: function _disableButton($atcButton) {\n      $atcButton.addClass('processing').prop('disabled', true);\n    }\n  }, {\n    key: '_enableButton',\n    value: function _enableButton($atcButton) {\n      $atcButton.prop('disabled', false).removeClass('processing');\n    }\n  }, {\n    key: '_handleDocumentClick',\n    value: function _handleDocumentClick(event) {\n      var target = event.target;\n      var $parent = jquery$1(target).parents('[data-atc-banner]');\n\n      if ($parent.length) {\n        return;\n      }\n\n      this._closeFlyOuts();\n    }\n  }]);\n  return AddToCartFlyout;\n}();\n\nvar AddToCartFlyout$1 = new AddToCartFlyout();\n\nvar api = 'https://www.youtube.com/iframe_api';\nvar apiLoadedCallbacks = [];\nvar apiLoaded = false;\n\nwindow.onYouTubeIframeAPIReady = function () {\n  apiLoadedCallbacks.forEach(function (apiLoadedCallback) {\n    return apiLoadedCallback();\n  });\n  apiLoadedCallbacks = [];\n  apiLoaded = true;\n};\n\nvar Youtube = function () {\n  function Youtube(el) {\n    classCallCheck(this, Youtube);\n\n    var url = el.getAttribute('data-video-url');\n    var regex = /(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\"&?\\/ ]{11})/i;\n\n    this.el = el;\n    this.id = url.match(regex)[1] || null;\n\n    this.onApiLoaded = this._onApiLoaded.bind(this);\n\n    this.isReady = false;\n    this.onReady = this._onReady.bind(this);\n    this.onReadyCallback = null;\n\n    this.onStateChange = this._onStateChange.bind(this);\n    this.onPlayCallback = null;\n\n    if (apiLoaded) {\n      this._onApiLoaded();\n    } else {\n      apiLoadedCallbacks.push(this.onApiLoaded);\n      script$1(api);\n    }\n  }\n\n  createClass(Youtube, [{\n    key: 'play',\n    value: function play() {\n      var _this = this;\n\n      return new Promise(function (resolve) {\n        _this.onPlayCallback = resolve;\n\n        if (_this.isReady) {\n          _this.player.playVideo();\n        } else {\n          _this.onReadyCallback = function () {\n            _this.player.playVideo();\n          };\n        }\n      });\n    }\n  }, {\n    key: 'pause',\n    value: function pause() {\n      var _this2 = this;\n\n      return new Promise(function (resolve) {\n        _this2.onPlayCallback = resolve;\n\n        if (_this2.isReady) {\n          _this2.player.pauseVideo();\n        } else {\n          _this2.onReadyCallback = function () {\n            _this2.player.pauseVideo();\n          };\n        }\n      });\n    }\n  }, {\n    key: 'autoplay',\n    value: function autoplay() {\n      var _this3 = this;\n\n      return new Promise(function (resolve) {\n        _this3.onPlayCallback = resolve;\n\n        if (_this3.isReady) {\n          _this3.player.playVideo();\n          _this3.player.mute();\n        } else {\n          _this3.onReadyCallback = function () {\n            _this3.player.playVideo();\n            _this3.player.mute();\n          };\n        }\n      });\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      this.player.destroy();\n    }\n  }, {\n    key: '_onApiLoaded',\n    value: function _onApiLoaded() {\n      this.player = new YT.Player(this.el, {\n        videoId: this.id,\n        playerVars: {\n          modestbranding: true,\n          showinfo: false,\n          controls: false,\n          rel: 0\n        },\n        events: {\n          onReady: this.onReady,\n          onStateChange: this.onStateChange\n        }\n      });\n    }\n  }, {\n    key: '_onReady',\n    value: function _onReady() {\n      this.isReady = true;\n\n      if (this.onReadyCallback) {\n        this.onReadyCallback();\n      }\n    }\n  }, {\n    key: '_onStateChange',\n    value: function _onStateChange(event) {\n      var state = event.data;\n\n      if (this.onPlayCallback && state === YT.PlayerState.PLAYING) {\n        this.onPlayCallback();\n        this.onPlayCallback = null;\n      }\n    }\n  }]);\n  return Youtube;\n}();\n\nvar api$1 = 'https://player.vimeo.com/api/player.js';\nvar apiLoaded$1 = false;\n\nvar VimeoPlayer$1 = function () {\n  function VimeoPlayer(el) {\n    classCallCheck(this, VimeoPlayer);\n\n    var url = el.getAttribute('data-video-url');\n    var urlParts = url.split('/');\n\n    this.el = el;\n    this.id = urlParts[urlParts.length - 1];\n    this.onReadyCallback = null;\n\n    this.onApiLoaded = this._onApiLoaded.bind(this);\n\n    this.onProgress = this._onProgress.bind(this);\n    this.onProgressCallback = null;\n\n    if (apiLoaded$1) {\n      this._onApiLoaded();\n    } else {\n      script$1(api$1, this.onApiLoaded);\n    }\n  }\n\n  createClass(VimeoPlayer, [{\n    key: 'play',\n    value: function play() {\n      var _this = this;\n\n      return new Promise(function (resolve) {\n        _this.onProgressCallback = resolve;\n\n        if (apiLoaded$1) {\n          _this.player.on('progress', _this.onProgress);\n          _this.player.play();\n        } else {\n          _this.onReadyCallback = function () {\n            _this.player.on('progress', _this.onProgress);\n            _this.player.play();\n          };\n        }\n      });\n    }\n  }, {\n    key: 'pause',\n    value: function pause() {\n      var _this2 = this;\n\n      return new Promise(function (resolve) {\n        _this2.onProgressCallback = resolve;\n\n        if (apiLoaded$1) {\n          _this2.player.on('progress', _this2.onProgress);\n          _this2.player.pause();\n        } else {\n          _this2.onReadyCallback = function () {\n            _this2.player.on('progress', _this2.onProgress);\n            _this2.player.pause();\n          };\n        }\n      });\n    }\n  }, {\n    key: 'autoplay',\n    value: function autoplay() {\n      var _this3 = this;\n\n      return new Promise(function (resolve) {\n        _this3.onProgressCallback = resolve;\n\n        if (apiLoaded$1) {\n          _this3.player.on('progress', _this3.onProgress);\n          _this3.player.setVolume(0);\n          _this3.player.play();\n        } else {\n          _this3.onReadyCallback = function () {\n            _this3.player.on('progress', _this3.onProgress);\n            _this3.player.setVolume(0);\n            _this3.player.play();\n          };\n        }\n      });\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      this.player.unload().catch();\n    }\n  }, {\n    key: '_onApiLoaded',\n    value: function _onApiLoaded() {\n      this.player = new window.Vimeo.Player(this.el, { id: this.id });\n\n      this.player.ready().then().catch();\n\n      apiLoaded$1 = true;\n\n      if (this.onReadyCallback) {\n        this.onReadyCallback();\n      }\n    }\n  }, {\n    key: '_onProgress',\n    value: function _onProgress() {\n      this.player.off('progress', this.onProgress);\n\n      if (this.onProgressCallback) {\n        this.onProgressCallback();\n        this.onProgressCallback = null;\n      }\n    }\n  }]);\n  return VimeoPlayer;\n}();\n\nvar Video = function () {\n  function Video(el, options) {\n    classCallCheck(this, Video);\n\n    this.el = el;\n    this.options = options;\n    this.platform = el.getAttribute('data-video').trim();\n    this.playButton = el.querySelector('[data-video-play-button]');\n    this.videoEl = el.querySelector('[data-video-element]');\n\n    this.onPlayClick = this._onPlayClick.bind(this);\n    this.onPauseClick = this._onPauseClick.bind(this);\n    this.autoplay = this._autoplay.bind(this);\n\n    this.video = null;\n\n    switch (this.platform) {\n      case 'youtube':\n        this.video = new Youtube(this.videoEl);\n        break;\n      case 'vimeo':\n        this.video = new VimeoPlayer$1(this.videoEl);\n        break;\n      default:\n        this.video = null;\n        break;\n    }\n\n    if (this.playButton) {\n      if (this.options && this.options.autoplay) {\n        this.autoplay();\n      }\n\n      this.playButton.addEventListener('click', this.onPlayClick);\n    }\n  }\n\n  createClass(Video, [{\n    key: '_onPlayClick',\n    value: function _onPlayClick() {\n      var _this = this;\n\n      this.el.classList.add('video-loading');\n\n      this.video.play().then(function () {\n        _this.el.classList.add('video-transitioning');\n\n        setTimeout(function () {\n          _this.el.classList.remove('video-loading');\n          _this.el.classList.remove('video-transitioning');\n          _this.el.classList.add('video-playing');\n        }, 200);\n      });\n    }\n  }, {\n    key: '_onPauseClick',\n    value: function _onPauseClick() {\n      this.video.pause();\n    }\n  }, {\n    key: '_autoplay',\n    value: function _autoplay() {\n      var _this2 = this;\n\n      this.el.classList.add('video-loading');\n\n      this.video.autoplay().then(function () {\n        _this2.el.classList.add('video-transitioning');\n\n        setTimeout(function () {\n          _this2.el.classList.remove('video-loading');\n          _this2.el.classList.remove('video-transitioning');\n          _this2.el.classList.add('video-playing');\n        }, 200);\n      });\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      if (this.playButton) {\n        this.playButton.removeEventListener('click', this.onPlayClick);\n      }\n\n      if (this.video) {\n        this.video.unload();\n      }\n    }\n  }]);\n  return Video;\n}();\n\n/*!\n * pixelzoom v0.0.1\n * (c) 2018 Pixel Union\n */\n\nvar classCallCheck$3 = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass$3 = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar _extends$1 = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar Pixelzoom = function () {\n  function Pixelzoom(container, options) {\n    classCallCheck$3(this, Pixelzoom);\n\n    this.options = _extends$1({\n      imageClass: 'pixelzoom--image',\n      imageSource: options.imageSource || container.querySelector('img').src,\n      initialZoom: 1,\n      dragPan: false,\n      naturalPan: false,\n      maxZoom: 9999,\n      zoomSensitivity: 1,\n      zoomSteps: 1,\n      overflowContainer: null\n    }, options);\n\n    // Overflow container\n    this.overflowContainer = this.options.overflowContainer;\n\n    // Image container\n    this.container = container;\n    this.container.style.cursor = this.options.maxZoom > this.options.initialZoom ? 'zoom-in' : 'zoom-out';\n    this.containerWidth = null;\n    this.containerHeight = null;\n\n    // Image\n    this.image = new Image();\n    this.imageSrc = this.options.imageSource;\n    this.imageWidth = null;\n    this.imageHeight = null;\n\n    // State\n    this.x = 0;\n    this.y = 0;\n    this.lastX = 0;\n    this.lastY = 0;\n    this.dragX = null;\n    this.dragY = null;\n    this.lastDragX = null;\n    this.lastDragY = null;\n    this.zoom = Math.min(this.options.maxZoom, this.options.initialZoom);\n    this.zoomMax = this.options.maxZoom;\n    this.zoomMin = 1;\n    this.zoomSensitivity = this.options.zoomSensitivity;\n    this.zoomSteps = Math.min(this.options.maxZoom, this.options.zoomSteps);\n    this.distance = 0;\n    this.cursor = this.container.style.cursor;\n    this.panning = false;\n    this.mouseDown = false;\n    this.dragging = false;\n    this.touched = false;\n\n    this._triggerEvent('loading');\n    this._loadImage();\n  }\n\n  /**\n    * Load image\n    *\n    * @private\n    */\n\n\n  createClass$3(Pixelzoom, [{\n    key: '_loadImage',\n    value: function _loadImage() {\n      var _this = this;\n\n      this.image.addEventListener('load', function () {\n        _this._appendImage();\n      });\n\n      this.image.classList.add(this.options.imageClass);\n      this.image.src = this.imageSrc;\n\n      this.image.style.position = 'absolute';\n      this.image.style.top = '100%';\n      this.image.style.left = '100%';\n      this.image.style.maxWidth = '100%';\n      this.image.style.maxHeight = '100%';\n      this.image.style.transformOrigin = 'top left';\n    }\n\n    /**\n      * Append image to the DOM\n      *\n      * @private\n      */\n\n  }, {\n    key: '_appendImage',\n    value: function _appendImage() {\n      this._triggerEvent('loaded');\n      this.container.appendChild(this.image);\n\n      this.refresh();\n      this._bindEvents();\n\n      if (this.zoom > this.zoomMin) {\n        this.x = -(this.imageWidth * this.zoom) + (this.imageWidth * this.zoom - this.imageWidth) / 2;\n        this.y = -(this.imageHeight * this.zoom) + (this.imageHeight * this.zoom - this.imageHeight) / 2;\n\n        if (this.lastDragX === null && this.lastDragY == null) {\n          var offset = this.container.getBoundingClientRect();\n          var dragX = this.overflowContainer && this.overflowContainer.offsetWidth >= this.imageWidth * this.zoom ? this.overflowContainer.offsetWidth : this.containerWidth;\n          var dragY = this.overflowContainer && this.overflowContainer.offsetWidth >= this.imageHeight * this.zoom ? this.overflowContainer.offsetHeight : this.containerHeight;\n\n          var scrollLeft = window.pageXOffset ? window.pageXOffset : document.body.scrollLeft;\n          var scrollTop = window.pageYOffset ? window.pageYOffset : document.body.scrollTop;\n\n          this.lastDragX = dragX / 2 + offset.left + scrollLeft;\n          this.lastDragY = dragY / 2 + offset.top + scrollTop;\n        }\n      } else {\n        this.x = -this.imageWidth;\n        this.y = -this.imageHeight;\n      }\n\n      this.lastX = this.x;\n      this.lastY = this.y;\n\n      this._update();\n    }\n\n    /**\n      * Bind mouse and touch events\n      *\n      * @private\n      */\n\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this2 = this;\n\n      this.container.addEventListener('mousedown', function (event) {\n        event.stopPropagation();\n\n        var pointer = _this2._getPointerBounds(event);\n\n        _this2._initializeDrag(pointer[0]);\n      });\n\n      this.container.addEventListener('mouseenter', function () {\n        event.stopPropagation();\n\n        _this2._initializeMouse();\n      });\n\n      this.container.addEventListener('touchstart', function (event) {\n        event.stopPropagation();\n\n        var pointers = _this2._getPointerBounds(event);\n\n        _this2._initializeTouch(pointers[0], pointers[1]);\n      });\n\n      this.container.addEventListener('dragstart', function (event) {\n        event.stopPropagation();\n\n        _this2._preventDrag(event);\n      });\n\n      ['mousemove', 'touchmove'].forEach(function (eventType) {\n        _this2.container.addEventListener(eventType, function (event) {\n          var pointers = _this2._getPointerBounds(event);\n\n          _this2._pan(eventType, pointers[0], pointers[1]);\n        });\n      });\n\n      this.container.addEventListener('mouseup', function (event) {\n        event.stopPropagation();\n\n        _this2._tap({\n          x: event.pageX,\n          y: event.pageY\n        });\n      });\n\n      ['mouseleave', 'touchend'].forEach(function (eventType) {\n        _this2.container.addEventListener(eventType, function (event) {\n          event.stopPropagation();\n\n          _this2._release();\n        });\n      });\n\n      this.container.addEventListener('wheel', function (event) {\n        event.stopPropagation();\n\n        _this2._scroll(event.deltaY, {\n          x: event.pageX,\n          y: event.pageY\n        });\n      });\n\n      document.body.addEventListener('touchmove', function (event) {\n        _this2._preventScroll(event);\n      });\n    }\n\n    /**\n      * Increment or decrement zoom\n      *\n      * @param {number} adjustment\n      * @private\n      */\n\n  }, {\n    key: '_setZoom',\n    value: function _setZoom(adjustment) {\n      this._triggerEvent('zoom');\n\n      var zoom = this.zoom + adjustment;\n\n      zoom = Math.min(this.zoomMax, zoom);\n      zoom = Math.max(this.zoomMin, zoom);\n      this.zoom = zoom;\n\n      if (this.zoom === this.zoomMax) {\n        this.container.style.cursor = 'zoom-out';\n        this.cursor = 'zoom-out';\n\n        this._triggerEvent('zoomMax');\n      } else {\n        this.container.style.cursor = 'zoom-in';\n        this.cursor = 'zoom-in';\n      }\n\n      if (this.zoom === this.zoomMin) {\n        this.lastDragX = null;\n        this.lastDragY = null;\n\n        this._triggerEvent('zoomMin');\n      }\n    }\n\n    /**\n      * Set image center position\n      *\n      * @param {object} pointer\n      * @private\n      */\n\n  }, {\n    key: '_setCenter',\n    value: function _setCenter(pointer, event) {\n      if (this.zoom !== this.zoomMin) {\n        var offset = this.container.getBoundingClientRect();\n        var zoomWidth = this.imageWidth * this.zoom - this.containerWidth;\n        var zoomHeight = this.imageHeight * this.zoom - this.containerHeight;\n\n        var scrollLeft = window.pageXOffset ? window.pageXOffset : document.body.scrollLeft;\n        var scrollTop = window.pageYOffset ? window.pageYOffset : document.body.scrollTop;\n\n        if (!(this.zoom - 1 > this.zoomMin && event === 'tap') || event === 'tap' && this.zoomSteps >= this.zoomMax) {\n          this.lastX = pointer.x;\n          this.lastY = pointer.y;\n        }\n\n        var currentX = (offset.left - this.lastX) * (zoomWidth / this.containerWidth) - this.containerWidth + scrollLeft * this.zoom - scrollLeft;\n        var currentY = (offset.top - this.lastY) * (zoomHeight / this.containerHeight) - this.containerHeight + scrollTop * this.zoom - scrollTop;\n\n        currentX = Math.max(-this.imageWidth * this.zoom, currentX);\n        currentY = Math.max(-this.imageHeight * this.zoom, currentY);\n\n        if (this.overflowContainer) {\n          currentX = Math.max(-this.imageWidth * this.zoom + offset.left, currentX);\n          currentY = Math.max(-this.imageHeight * this.zoom + offset.top, currentY);\n\n          currentX = Math.min(-this.imageWidth - offset.left, currentX);\n          currentY = Math.min(-this.imageHeight - offset.top, currentY);\n        }\n\n        if (this.overflowContainer && this.overflowContainer.offsetWidth >= this.imageWidth * this.zoom) {\n          this.x = -(this.imageWidth * this.zoom) + (this.imageWidth * this.zoom - this.imageWidth) / 2;\n        } else {\n          this.x = Math.min(-this.imageWidth, currentX);\n        }\n\n        if (this.overflowContainer && this.overflowContainer.offsetHeight >= this.imageHeight * this.zoom) {\n          this.y = -(this.imageHeight * this.zoom) + (this.imageHeight * this.zoom - this.imageHeight) / 2;\n        } else {\n          this.y = Math.min(-this.imageHeight, currentY);\n        }\n      } else {\n        this.x = -this.imageWidth;\n        this.y = -this.imageHeight;\n        this.lastX = 0;\n        this.lastY = 0;\n        this.lastDragX = null;\n        this.lastDragY = null;\n      }\n    }\n\n    /**\n      * Initialize zoom for non-touch devices\n      *\n      * @private\n      */\n\n  }, {\n    key: '_initializeMouse',\n    value: function _initializeMouse() {\n      this._triggerEvent('touch');\n      this.refresh();\n    }\n\n    /**\n      * Initialize drag\n      *\n      * @private\n      */\n\n  }, {\n    key: '_initializeDrag',\n    value: function _initializeDrag(pointer) {\n      if (this.options.dragPan) {\n        this.mouseDown = true;\n\n        if (this.lastDragX === null && this.lastDragY === null) {\n          this.lastDragX = pointer.x;\n          this.lastDragY = pointer.y;\n        }\n      }\n    }\n\n    /**\n      * Initialize zoom for touch devices\n      *\n      * @param {object} touches\n      * @param {object} pointerOne\n      * @param {object} pointerTwo\n      * @private\n      */\n\n  }, {\n    key: '_initializeTouch',\n    value: function _initializeTouch(pointerOne, pointerTwo) {\n      this._triggerEvent('touch');\n\n      this.touched = true;\n\n      if (this.lastDragX === null && this.lastDragY == null) {\n        this.lastDragX = pointerOne.x;\n        this.lastDragY = pointerOne.y;\n      }\n\n      if (pointerTwo && pointerTwo.x && pointerTwo.y) {\n        this.distance = Math.hypot(pointerOne.x - pointerTwo.x, pointerOne.y - pointerTwo.y);\n      }\n    }\n\n    /**\n      * Pan image\n      *\n      * @param {string} eventType\n      * @param {object} touches\n      * @param {object} pointerOne\n      * @param {object} pointerTwo\n      * @private\n      */\n\n  }, {\n    key: '_pan',\n    value: function _pan(eventType, pointerOne, pointerTwo) {\n      if (pointerTwo && pointerTwo.x && pointerTwo.y) {\n        if (this.panning || !this.touched) {\n          this._pinch({\n            x: pointerOne.x,\n            y: pointerOne.y\n          }, {\n            x: pointerTwo.x,\n            y: pointerTwo.y\n          });\n        }\n      } else {\n        if (this.options.dragPan && this.mouseDown === false && eventType !== 'touchmove') {\n          return;\n        } else if (this.options.dragPan && this.mouseDown || eventType === 'touchmove') {\n          this.dragging = true;\n          this.container.style.cursor = 'move';\n        }\n\n        if (this.panning || !this.touched) {\n          if (this.dragging) {\n            this._drag({\n              x: pointerOne.x,\n              y: pointerOne.y\n            });\n          } else {\n            this._setCenter({\n              x: pointerOne.x,\n              y: pointerOne.y\n            });\n\n            this._update();\n          }\n        } else {\n          if (!this.dragging) {\n            this._setCenter({\n              x: this.lastX,\n              y: this.lastY\n            });\n\n            this._update();\n          }\n        }\n      }\n\n      if (eventType === 'touchmove' && !this.panning) {\n        this.panning = true;\n        this._triggerEvent('pan');\n      }\n    }\n\n    /**\n      * Zoom into the image on pinch\n      *\n      * @param {object} touchOne\n      * @param {object} touchTwo\n      * @private\n      */\n\n  }, {\n    key: '_pinch',\n    value: function _pinch(touchOne, touchTwo) {\n      this._triggerEvent('pinch');\n\n      var distance = Math.hypot(touchOne.x - touchTwo.x, touchOne.y - touchTwo.y);\n\n      var zoomAdjustment = this.zoom / (this.zoomSensitivity * 2);\n      var difference = Math.abs(distance) - Math.abs(this.distance);\n\n      if (difference > 0.5 || difference < -0.5) {\n        this._setZoom(distance > this.distance ? +zoomAdjustment : -zoomAdjustment);\n      }\n\n      this.refresh();\n\n      if (this.zoom < this.zoomMax) {\n        if (distance > this.distance) {\n          touchOne.x -= (touchOne.x - touchTwo.x) / 2;\n          touchOne.y -= (touchOne.y - touchTwo.y) / 2;\n        } else {\n          touchOne.x = this.lastDragX;\n          touchOne.y = this.lastDragY;\n        }\n\n        this.lastDragX = touchOne.x;\n        this.lastDragY = touchOne.y;\n        this.dragX = 0;\n        this.dragY = 0;\n\n        this._setCenter({\n          x: touchOne.x,\n          y: touchOne.y\n        });\n\n        this.distance = distance;\n\n        this._update();\n      }\n    }\n\n    /**\n      * Drag image\n      *\n      * @param {object} pointer\n      * @private\n      */\n\n  }, {\n    key: '_drag',\n    value: function _drag(pointer) {\n      if (this.dragX && this.dragY && this.lastDragX !== null && this.lastDragY !== null) {\n        var differenceX = (this.dragX - pointer.x) / (this.zoom / 2);\n        var differenceY = (this.dragY - pointer.y) / (this.zoom / 2);\n        var dragX = this.lastDragX;\n        var dragY = this.lastDragY;\n\n        if (this.options.naturalPan) {\n          dragX += differenceX;\n          dragY += differenceY;\n        } else {\n          dragX -= differenceX;\n          dragY -= differenceY;\n        }\n\n        dragX = Math.min(this.imageWidth * this.zoom, dragX);\n        this.lastDragX = Math.max(0, dragX);\n\n        dragY = Math.min(this.imageHeight * this.zoom, dragY);\n        this.lastDragY = Math.max(0, dragY);\n\n        this.lastX = this.lastDragX;\n        this.lastY = this.lastDragY;\n\n        this._setCenter({\n          x: this.lastDragX,\n          y: this.lastDragY\n        });\n\n        this._update();\n      }\n\n      this.dragX = pointer.x;\n      this.dragY = pointer.y;\n    }\n\n    /**\n      * Zoom into the image on tap/click\n      *\n      * @param {object} pointer\n      * @private\n      */\n\n  }, {\n    key: '_tap',\n    value: function _tap(pointer) {\n      this._triggerEvent('tap');\n\n      if (!this.panning && !this.dragging) {\n        this._setZoom(this.zoomMax > this.zoom ? +this.zoomSteps : -this.zoomMax);\n\n        this.refresh();\n\n        this._setCenter(pointer, 'tap');\n\n        this.lastDragX = this.lastX;\n        this.lastDragY = this.lastY;\n\n        this._update();\n      }\n\n      this.panning = false;\n      this.mouseDown = false;\n      this.dragging = false;\n      this.touched = false;\n      this.distance = 0;\n      this.dragX = 0;\n      this.dragY = 0;\n\n      this.container.style.cursor = this.cursor;\n    }\n\n    /**\n      * Zoom into the image on scroll\n      *\n      * @param {int} scale\n      * @param {object} pointer\n      * @private\n      */\n\n  }, {\n    key: '_scroll',\n    value: function _scroll(scale, pointer) {\n      if (!this.dragging) {\n        this._triggerEvent('scroll');\n\n        var zoomAdjustment = this.zoom / this.zoomSensitivity;\n\n        if (this.options.dragPan && this.zoom > this.zoomMin) {\n          pointer.x = this.lastDragX;\n          pointer.y = this.lastDragY;\n        }\n\n        this.lastDragX = pointer.x;\n        this.lastDragY = pointer.y;\n        this.dragX = 0;\n        this.dragY = 0;\n\n        this._setZoom(scale < 0 ? +zoomAdjustment : -zoomAdjustment);\n\n        this.refresh();\n\n        this._setCenter(pointer);\n        this._update();\n      }\n    }\n\n    /**\n      * Set panning to false\n      *\n      * @private\n      */\n\n  }, {\n    key: '_release',\n    value: function _release() {\n      this._triggerEvent('release');\n      this.panning = false;\n      this.mouseDown = false;\n      this.dragging = false;\n      this.dragX = 0;\n      this.dragY = 0;\n\n      this.container.style.cursor = this.cursor;\n    }\n\n    /**\n      * Prevent images from being dragged\n      *\n      * @param {object} event\n      * @private\n      */\n\n  }, {\n    key: '_preventDrag',\n    value: function _preventDrag(event) {\n      event.preventDefault();\n    }\n\n    /**\n      * Prevent body from scrolling when image is being panned\n      *\n      * @param {object} event\n      * @private\n      */\n\n  }, {\n    key: '_preventScroll',\n    value: function _preventScroll(event) {\n      if (this.panning) {\n        event.preventDefault();\n      }\n    }\n\n    /**\n      * Get the pointer bounds from the event\n      *\n      * @param {object} event\n      * @private\n      */\n\n  }, {\n    key: '_getPointerBounds',\n    value: function _getPointerBounds(event) {\n      var pointers = [{\n        x: event.pageX ? event.pageX : event.touches[0].clientX,\n        y: event.pageY ? event.pageY : event.touches[0].clientY\n      }, {\n        x: event.targetTouches && event.targetTouches.length > 1 ? event.touches[1].clientX : null,\n        y: event.targetTouches && event.targetTouches.length > 1 ? event.touches[1].clientY : null\n      }];\n\n      return pointers;\n    }\n\n    /**\n      * Create an event and trigger it\n      *\n      * @param {string} name\n      * @private\n      */\n\n  }, {\n    key: '_triggerEvent',\n    value: function _triggerEvent(name) {\n      var event = new Event('pixelzoom:' + name, { 'bubbles': true, 'cancelable': false });\n      this.container.dispatchEvent(event);\n    }\n\n    /**\n      * Update the image position by adjustng the CSS\n      *\n      * @private\n      */\n\n  }, {\n    key: '_update',\n    value: function _update() {\n      var _this3 = this;\n\n      requestAnimationFrame(function () {\n        _this3.image.style.transform = 'translate(' + _this3.x + 'px, ' + _this3.y + 'px) scale(' + _this3.zoom + ')';\n      });\n    }\n\n    /**\n      * Refresh variables\n      *\n      * @public\n      */\n\n  }, {\n    key: 'refresh',\n    value: function refresh() {\n      this.containerWidth = this.container.offsetWidth;\n      this.containerHeight = this.container.offsetHeight;\n      this.imageWidth = Math.min(this.containerWidth, this.image.width);\n      this.imageHeight = Math.min(this.containerHeight, this.image.height);\n\n      var maxZoom = Math.floor(this.image.naturalWidth / this.containerWidth);\n      this.zoomMax = this.options.maxZoom < maxZoom ? this.options.maxZoom : maxZoom;\n      this.zoom = Math.min(this.zoomMax, this.zoom);\n      this.zoomSteps = Math.min(this.zoomMax, this.zoomSteps);\n\n      if (this.zoomMax <= 1) {\n        this.container.style.cursor = 'default';\n        this.cursor = 'default';\n      }\n    }\n\n    /**\n      * Update the image position by adjustng the CSS\n      *\n      * @public\n      */\n\n  }, {\n    key: 'unload',\n    value: function unload() {\n      var _this4 = this;\n\n      this.image.removeEventListener('load', this._appendImage);\n      document.body.removeEventListener('touchmove', this._preventScroll);\n\n      [['mouseenter', this._initializeMouse], ['touchstart', this._initializeTouch], ['mousedown', this._initializeDrag], ['dragstart', this._preventDrag], ['mousemove', this._pan], ['touchmove', this._pan], ['mouseup', this._tap], ['touchend', this._release], ['mouseleave', this._release], ['wheel', this._scroll]].forEach(function (eventType) {\n        _this4.container.removeEventListener(eventType[0], eventType[1]);\n      });\n\n      this.image.parentNode.removeChild(this.image);\n    }\n  }]);\n  return Pixelzoom;\n}();\n\nvar ProductZoom = function () {\n  function ProductZoom(options) {\n    classCallCheck(this, ProductZoom);\n\n    this.$gallery = options.$gallery;\n    this.settings = options.settings;\n    this.$slider = this.$gallery.find('[data-product-slider]');\n\n    this.$pixelzoomOverlay = this.$gallery.find('[data-pixelzoom-overlay]');\n    this.$pixelzoomOverlayContainer = this.$pixelzoomOverlay.find('[data-pixelzoom-overlay-container]');\n\n    this.imageZoom = {};\n    this.zoomOverlay = null;\n    this.index = 0;\n\n    this._beforeOpen = this._beforeOpen.bind(this);\n    this._onOpen = this._onOpen.bind(this);\n    this._onClose = this._onClose.bind(this);\n\n    this.modal = new Modal({\n      onBeforeOpen: this._beforeOpen,\n      onOpen: this._onOpen,\n      onClose: this._onClose\n    });\n\n    this.modalOpen = false;\n    this.swipping = false;\n    this.touched = false;\n\n    this._bindEvents();\n    this.enableZoom();\n  }\n\n  createClass(ProductZoom, [{\n    key: 'unload',\n    value: function unload() {\n      var _this = this;\n\n      if (Object.keys(this.imageZoom).length !== 0) {\n        Object.keys(this.imageZoom).forEach(function (image) {\n          _this.imageZoom[image].unload();\n        });\n      }\n\n      if (this.zoomOverlay) {\n        this.zoomOverlay.unload();\n        this.zoomOverlay = null;\n      }\n\n      document.body.removeEventListener('touchmove', function (event) {\n        event.preventDefault();\n      }, { passive: false });\n\n      this.modal.unload();\n\n      this.$pixelzoomOverlayContainer.off('pixelzoom:pan');\n      this.$pixelzoomOverlayContainer.off('pixelzoom:release');\n\n      this.$slider.off('.product-zoom');\n    }\n  }, {\n    key: 'enableZoom',\n    value: function enableZoom(index) {\n      var _this2 = this;\n\n      if (index !== -1 && index || index === 0) {\n        this.index = index;\n      }\n\n      var $newSlide = this.$slider.find('[data-product-image-index=' + this.index + '] .product-galley--image-background');\n      var inObject = !this.imageZoom[this.index];\n      var slideExists = this.$gallery.find('[data-product-image-index=' + this.index + '][data-product-image-zoom]').length;\n\n      if (inObject && slideExists) {\n        this.imageZoom[this.index] =\n        //layout.isBreakpoint('XS') ? true :\n        new Pixelzoom($newSlide[0], {\n          imageSource: $newSlide[0].dataset.image,\n          initialZoom: this.settings.image_zoom_level === 'min' ? 1 : 9999,\n          zoomSensitivity: 10,\n          maxZoom: 9999,\n          zoomSteps: 9999,\n          naturalPan: true\n        });\n\n        $newSlide.on('pixelzoom:touch', function () {\n          var imageWidth = $newSlide.find('.pixelzoom--image').get(0).naturalWidth;\n          var imageHeight = $newSlide.find('.pixelzoom--image').get(0).naturalHeight;\n\n          if (!layout.isBreakpoint('XS') && (imageWidth / $newSlide.width() >= 2 || imageHeight / $newSlide.height() >= 2)) {\n            _this2._toggleClass(jquery$1('body'), 'pixelzoom--active');\n          }\n\n          _this2.touched = true;\n        });\n\n        $newSlide.on('pixelzoom:release', function () {\n          _this2._toggleClass(jquery$1('body'), 'pixelzoom--active', true);\n          _this2.touched = false;\n        });\n      }\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this3 = this;\n\n      this.$slider.on('dragStart.flickity', function (event) {\n        _this3._preventClick();\n      });\n\n      this.$slider.on('settle.flickity', function (event) {\n        _this3._resolveClick();\n      });\n\n      this.$slider.on('click.product-zoom', function () {\n        _this3._openModal();\n      });\n\n      document.body.addEventListener('touchmove', function (event) {\n        _this3._preventScroll(event);\n      }, { passive: false });\n    }\n  }, {\n    key: '_toggleClass',\n    value: function _toggleClass(element, className, remove) {\n      if (remove) {\n        element.removeClass(className);\n      } else {\n        element.addClass(className);\n      }\n    }\n  }, {\n    key: '_openModal',\n    value: function _openModal() {\n      /*\n        TODO: Add mobile functionality for image zoom\n         if (layout.isBreakpoint('XS') && this.imageZoom[this.index] && !this.swipping) {\n          this.modal.open('[data-pixelzoom-overlay-container]', 'pixelzoom');\n          this.zoomOverlay.refresh();\n        }\n      */\n    }\n  }, {\n    key: '_beforeOpen',\n    value: function _beforeOpen() {\n      var $newSlide = this.$slider.find('[data-product-image-index=' + this.index + '] .product-galley--image-background');\n\n      this.$pixelzoomOverlayContainer.find('[data-rimg]').replaceWith($newSlide.find('[data-rimg]').clone());\n    }\n  }, {\n    key: '_onOpen',\n    value: function _onOpen() {\n      var _this4 = this;\n\n      var $newSlide = this.$slider.find('[data-product-image-index=' + this.index + '] .product-galley--image-background');\n      this.modalOpen = true;\n\n      setTimeout(function () {\n        _this4.zoomOverlay = new Pixelzoom(document.querySelector('[data-modal-content]'), {\n          imageSource: $newSlide[0].dataset.image,\n          naturalPan: true,\n          dragPan: true,\n          initialZoom: _this4.settings.image_zoom_level === 'min' ? 1 : 9999,\n          maxZoom: 9999,\n          zoomSensitivity: 10,\n          zoomSteps: 9999,\n          overflowContainer: document.querySelector('.modal--pixelzoom')\n        });\n\n        jquery$1('[data-modal-content]').on('pixelzoom:loaded', function () {\n          jquery$1('[data-modal-content]').addClass('loaded');\n        });\n\n        jquery$1('[data-modal-content]').on('pixelzoom:touch', function () {\n          _this4._toggleClass(jquery$1('body'), 'pixelzoom--active');\n        });\n\n        jquery$1('[data-modal-content]').on('pixelzoom:release', function () {\n          _this4._toggleClass(jquery$1('body'), 'pixelzoom--active', true);\n        });\n      }, 500);\n    }\n  }, {\n    key: '_onClose',\n    value: function _onClose() {\n      jquery$1('[data-modal-content]').removeClass('loaded');\n\n      this.zoomOverlay.unload();\n      this.zoomOverlay = null;\n      this.modalOpen = false;\n    }\n  }, {\n    key: '_preventScroll',\n    value: function _preventScroll(event) {\n      if (this.modalOpen || this.touched && !layout.isBreakpoint('XS')) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: '_preventClick',\n    value: function _preventClick() {\n      this.swipping = true;\n    }\n  }, {\n    key: '_resolveClick',\n    value: function _resolveClick() {\n      this.swipping = false;\n    }\n  }]);\n  return ProductZoom;\n}();\n\nvar ProductGallery = function () {\n  function ProductGallery(options) {\n    classCallCheck(this, ProductGallery);\n\n    this.$gallery = options.$gallery;\n    this.settings = options.settings;\n    this.isQuickshop = options.isQuickshop || false;\n\n    // Gallery\n    this.flickity = null;\n    this.slider = '[data-product-slider]';\n    this.$slider = this.$gallery.find(this.slider);\n    this.slides = '[data-product-image]';\n    this.$slides = this.$gallery.find(this.slides);\n    this.slideImages = this.$slider[0].querySelectorAll('[data-rimg]');\n    this.$sliderPagination = this.$gallery.find('[data-product-slider-pagination]');\n    this.$paginationTrigger = this.$gallery.find('[data-product-thumbnail]');\n\n    if (this.settings.enable_image_zoom) {\n      this.productZoom = new ProductZoom(options);\n    }\n\n    this.videos = {};\n    this.videoSlides = this.$slider[0].querySelectorAll('[data-product-image-video]');\n\n    // Re-initialise gallery when crossing breakpoints if needed\n    this._onUpdateGallery = this._onUpdateGallery.bind(this);\n    layout.onBreakpointChange(this._onUpdateGallery);\n\n    this.slideImageLoaded = this._onSlideImageLoaded.bind(this);\n    this.variantChange = this._onVariantChange.bind(this);\n\n    if (this.isQuickshop) {\n      this.$gallery.trigger('theme:rimg:watch');\n    }\n\n    this._init();\n  }\n\n  createClass(ProductGallery, [{\n    key: 'unload',\n    value: function unload() {\n      for (var i = 0; i < this.slideImages.length; i += 1) {\n        this.slideImages[i].removeEventListener('rimg:load', this.slideImageLoaded);\n      }\n\n      if (this.productZoom) {\n        this.productZoom.unload();\n      }\n\n      if (this.isQuickshop) {\n        this.$gallery.trigger('theme:rimg:unwatch');\n      }\n\n      layout.offBreakpointChange(this._onUpdateGallery);\n\n      this._unloadGallery();\n    }\n  }, {\n    key: '_init',\n    value: function _init() {\n      for (var i = 0; i < this.slideImages.length; i += 1) {\n        this.slideImages[i].addEventListener('rimg:load', this.slideImageLoaded);\n      }\n\n      if (this.videoSlides.length) {\n        for (var _i = 0; _i < this.videoSlides.length; _i += 1) {\n          var videoSlide = this.videoSlides[_i];\n          var slideId = videoSlide.getAttribute('data-product-image');\n          var videoEl = videoSlide.querySelector('[data-video]');\n\n          this.videos[slideId] = new Video(videoEl);\n        }\n      }\n\n      if (this.$slides.length) {\n        this._initGallery();\n      }\n    }\n\n    /**\n     * Make sure Flickity updates viewport height when images load in\n     * @private\n     */\n\n  }, {\n    key: '_onSlideImageLoaded',\n    value: function _onSlideImageLoaded() {\n      if (!this.flickity) {\n        return;\n      }\n\n      var activeHeight = this.flickity.selectedElement.offsetHeight;\n      var flickityHeight = this.flickity.viewport.offsetHeight;\n\n      // If flickity height is greater than slide height, ignore\n      if (activeHeight < flickityHeight) {\n        return;\n      }\n\n      this.flickity.resize();\n    }\n  }, {\n    key: '_unloadGallery',\n    value: function _unloadGallery() {\n      if (this.flickity) {\n        this.$paginationTrigger.off('.gallery');\n\n        this.flickity.destroy();\n        this.flickity = null;\n        this.$slider.find(this.slides).attr('style', '');\n      }\n    }\n  }, {\n    key: '_onUpdateGallery',\n    value: function _onUpdateGallery() {\n      this._unloadGallery();\n      this._initGallery();\n    }\n\n    /**\n     * Update gallery on variant change\n     *\n     * @param variant\n     * @property {Object} options.featured_image - Featured image information\n     * @private\n     */\n\n  }, {\n    key: '_onVariantChange',\n    value: function _onVariantChange(variant) {\n      \n      if (!variant.featured_image || !this.flickity) {\n        return;\n      }\n \t   \n      this.$sliderPagination.find('button.product-gallery--thumbnail-trigger').hide(); \n      \n      for (var i = 0; i < variant.options.length; i++) {\n      \tvar optionValue = variant.options[i];\n        this.$sliderPagination.find('img.product-gallery--thumbnail').each(function() { \n          var arrAlt = $(this).attr(\"alt\").split(\"|\");\n          if (arrAlt.indexOf(variant.options[i]) != -1 || variant.featured_image.id == $(this).attr(\"data-image-id\")) $(this).parent(\"button\").show(); \n        });                                                              \n      } \n      \n      var index = this.$slider.find('[data-product-image=' + variant.featured_image.id + ']').attr('data-product-image-index');\n      this.flickity.select(index, false, false);\n    }\n  }, {\n    key: '_initGallery',\n    value: function _initGallery() {\n      var $selectedImage = this.$slider.find('.image--selected');\n\n      // Options shared on Desktop and Mobile\n      var flickityOptions = {\n        autoPlay: 0,\n        accessibility: true,\n        adaptiveHeight: true,\n        cellAlign: 'left',\n        cellSelector: this.slides,\n        pageDots: false,\n        imagesLoaded: false,\n        prevNextButtons: false,\n        wrapAround: true\n      };\n\n      // Mobile only options\n      var optionsMobile = {\n        draggable: true,\n        friction: 0.8,\n        selectedAttraction: 0.2\n      };\n\n      // Desktop only options\n      var optionsDesktop = {\n        draggable: false\n      };\n\n      if (layout.isBreakpoint('XS')) {\n        flickityOptions = jquery$1.extend({}, optionsMobile, flickityOptions);\n      } else {\n        flickityOptions = jquery$1.extend({}, optionsDesktop, flickityOptions);\n      }\n\n      // If a variant has an image pre-selected, start the slideshow at that image\n      // If the slideshow has been re-initalised across a break point, slideshow\n      // restarts at same slide\n      if ($selectedImage.length) {\n        var initialIndex = parseInt($selectedImage.attr('data-product-image-index'), 10);\n\n        flickityOptions = jquery$1.extend({}, { initialIndex: initialIndex }, flickityOptions);\n      }\n\n      this.flickity = new js$1(this.$slider[0], flickityOptions);\n\n      this._bindGallery();\n      this._handleGalleryVideos();\n    }\n  }, {\n    key: '_bindGallery',\n    value: function _bindGallery() {\n      var _this = this;\n\n      this.flickity.on('select', function () {\n        _this._updateActiveSlide(_this.flickity.selectedIndex);\n        _this._handleGalleryVideos();\n      });\n\n      this.$paginationTrigger.on('click.gallery', function (event) {\n        event.preventDefault();\n        var $target = jquery$1(event.currentTarget);\n        _this.flickity.select($target.attr('data-product-thumbnail'), false, false);\n      });\n    }\n\n    /**\n     * Handle gallery videos\n     * - Pause video if is not active slide\n     * - Play video if is active slide, and is autoplay\n     *\n     * @private\n     */\n\n  }, {\n    key: '_handleGalleryVideos',\n    value: function _handleGalleryVideos() {\n      var _this2 = this;\n\n      var slideId = parseInt(this.flickity.selectedElement.getAttribute('data-product-image'), 10);\n\n      Object.keys(this.videos).forEach(function (key) {\n        var videoKey = parseInt(key, 10);\n\n        // Pause inactive slide videos\n        if (slideId !== videoKey) {\n          _this2.videos[videoKey].onPauseClick();\n        }\n\n        // Play video if is selected, and auto play enabled\n        if (slideId === videoKey && _this2.settings.enable_video_autoplay) {\n          _this2.videos[videoKey].autoplay();\n        }\n      });\n    }\n\n    /**\n     * Adds a non-flickity active class to thumbnails, and main slideshow\n     *  - Is used on re-init across breakpoints\n     *  - Is used to show the active thumbnail in the pagination\n     *\n     * @param index\n     * @private\n     */\n\n  }, {\n    key: '_updateActiveSlide',\n    value: function _updateActiveSlide(index) {\n      var $newSlide = this.$slider.find('[data-product-image-index=' + index + ']');\n      var $newThumbnail = this.$sliderPagination.find('[data-product-thumbnail=' + index + ']');\n\n      $newSlide.addClass('image--selected').siblings('.image--selected').removeClass('image--selected');\n\n      $newThumbnail.addClass('thumbnail--selected').siblings('.thumbnail--selected').removeClass('thumbnail--selected');\n\n      if (layout.isBreakpoint('XS')) {\n        scrollLeft($newThumbnail);\n      }\n\n      if (this.settings.enable_image_zoom) {\n        this.productZoom.enableZoom(index);\n      }\n    }\n  }]);\n  return ProductGallery;\n}();\n\nvar ProductDetails = function () {\n  function ProductDetails(options) {\n    classCallCheck(this, ProductDetails);\n\n    this.$window = jquery$1(window);\n    this.$formArea = options.$formArea;\n    this.$gallery = options.$gallery;\n    this.$details = options.$details;\n    this.context = options.context;\n    this.settings = options.settings;\n    this.product = options.product;\n    this.useHistory = options.useHistory;\n\n    this.variantHelper = null;\n\n    // Product ATC Actions\n    this._onATCOpen = this._onATCOpen.bind(this);\n    this._onATCClose = this._onATCClose.bind(this);\n\n    this.atcCallbacks = jquery$1.extend({\n      onClose: this._onATCClose,\n      onOpen: this._onATCOpen\n    }, options.atcCallbacks);\n\n    // Form\n    this.$form = this.$formArea.find('[data-product-form]');\n    this.$productAtcButton = this.$formArea.find('[data-product-atc]');\n    this.$productVariants = this.$form.find('[data-variants]');\n    this.$productOptions = this.$form.find('[data-product-option]');\n\n    this.variantFields = {\n      $price: this.$details.find('[data-price]'),\n      $priceMoney: this.$details.find('[data-price] .money'),\n      $compareAtPrice: this.$details.find('[data-price-compare-at]'),\n      $compareAtPriceMoney: this.$details.find('[data-price-compare-at] .money'),\n      $badge: this.$details.find('[data-badge-sales]'),\n      $badgeMoneySaved: this.$details.find('[data-price-money-saved]'),\n      $badgePercentSaved: this.$details.find('[data-price-percent-saved]'),\n      $sku: this.$details.find('[data-product-sku]')\n    };\n\n    this.forms = new Forms(this.$form);\n    this.gallery = new ProductGallery(options);\n\n    this._bindEvents();\n    this._initOptions();\n  }\n\n  createClass(ProductDetails, [{\n    key: 'unload',\n    value: function unload() {\n      this.$form.off('.product-details');\n      this.forms.unload();\n\n      if (this.variantHelper) {\n        this.variantHelper.unload();\n      }\n\n      this.gallery.unload();\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this = this;\n\n      this.$window.on('product-variant-switch.product-details', function (event, data) {\n        return _this._switchVariant(event, data);\n      });\n      \n      this.$window.on('product-variantview-switch.product-details', function (event, data) {\n        return _this._switchVariantView(event, data);\n      });\n      \n      this.$form.on('submit.product-details', function (event) {\n        return _this._AddToCartFlyout(event);\n      });\n      \n      this.$window.on('inventory-error', function (event, data) {\n        var msgBanner = new MessageBanner();\n        msgBanner.dismissBanners();    \n        var errorMessage = \"We're sorry, we only have \" + data.inventory + \" in stock\";\n       // errorMessage += \"<br />Item: \" + data.title;\n        if (data.color != \"\") errorMessage += \" of SKU \" + data.color;\n        return msgBanner.message(errorMessage, 'error');\n        //return console.log(errorMessage, event, data);\n      });\n      \n      this.$window.on('dismiss-message-banners', function (event) { \n        var msgBanner = new MessageBanner();\n        return msgBanner.dismissBanners(); \n      });\n      \n      this.$window.on('quantity-over-300', function (event, data) {\n        var msgBanner = new MessageBanner();\n        msgBanner.dismissBanners();    \n        var errorMessage = \"For quantities of 300 or more, please call us at 888-758-2247\"; \n        return msgBanner.message(errorMessage, 'error'); \n      }); \n      \n    }\n  }, {\n    key: '_initOptions',\n    value: function _initOptions() {\n      if (!this.$productVariants.length) return;\n\n      this.variantHelper = new VariantHelper(this.product, this.$productVariants, this.$productOptions);\n    }\n  }, {\n    key: '_switchVariant',\n    value: function _switchVariant(event, data) {\n      if (data.product !== this.product) return;\n\n      var variant = data.variant;\n      var firstLoad = data.firstLoad;\n\n      if (firstLoad) {\n        return;\n      }\n\n      // Update main select\n      this.$productVariants.val(data.variant.id);\n      this.gallery.variantChange(variant);\n\n     // console.log(\"switched \" + variant);\n      \n      // Update Variant information\n      this._updatePrice(variant);\n      this._updateSKU(variant);\n      this._updateBadge(variant);\n      this._updateButton(variant);\n\n      if (this.useHistory) {\n        var url = this.product.handle + '?' + jquery$1.param({ variant: variant.id });\n        history.replaceState({}, 'variant', url);\n      }\n    }\n  }, {\n    key: '_switchVariantView',\n    value: function _switchVariantView(event, data) {\n      if (data.product !== this.product) return;\n\t\t// only update the variant image because the color square is only being mousedover not clicked\n      var variant = data.variant;   \n      this.gallery.variantChange(variant);\n \n    }\n  }, {\n    key: '_updatePrice',\n    value: function _updatePrice(variant) {\n      // Update compare at price\n      var hasComparePrice = !!variant.compare_at_price && variant.compare_at_price > variant.price;\n      this.variantFields.$compareAtPrice.toggleClass('visible', hasComparePrice);\n      this.variantFields.$compareAtPriceMoney.text(Shopify.formatMoney(variant.compare_at_price, this.settings.money_format));\n      dist$2.update(this.variantFields.$compareAtPriceMoney[0]);\n\n      // Update price\n      this.variantFields.$priceMoney.text(Shopify.formatMoney(variant.price, this.settings.money_format));\n      dist$2.update(this.variantFields.$priceMoney[0]);\n    }\n  }, {\n    key: '_updateSKU',\n    value: function _updateSKU(variant) {\n      if (variant.sku === '') {\n        this.variantFields.$sku.parent().addClass('product-sku--empty');\n      } else {\n        this.variantFields.$sku.parent().removeClass('product-sku--empty');\n      }\n\t\n      this.variantFields.$sku.text(variant.sku);\n    }\n  }, {\n    key: '_updateBadge',\n    value: function _updateBadge(variant) {\n      var priceSaved = variant.compare_at_price ? variant.compare_at_price - variant.price : 0;\n      this.variantFields.$badge.toggle(!!priceSaved);\n\n      if (this.variantFields.$badgeMoneySaved.length) {\n        // Update badge if it shows money saved\n        this.variantFields.$badgeMoneySaved.text(Shopify.formatMoney(priceSaved, this.settings.money_format));\n        dist$2.update(this.variantFields.$badgeMoneySaved[0]);\n      }\n\n      if (this.variantFields.$badgePercentSaved.length) {\n        // Update badge if it shows percentiles\n        var percentileSaved = Math.round(priceSaved * 100 / variant.compare_at_price);\n        this.variantFields.$badgePercentSaved.text(percentileSaved);\n      }\n    }\n  }, {\n    key: '_updateButton',\n    value: function _updateButton(variant) {\n      if (variant.available) {\n        this.$productAtcButton.text(this.context.product_available);\n        this.$productAtcButton.removeClass('disabled').prop('disabled', false);\n      } else {\n        this.$productAtcButton.text(this.context.product_unavailable);\n        this.$productAtcButton.addClass('disabled').prop('disabled', true);\n      }\n    }\n  }, {\n    key: '_AddToCartFlyout',\n    value: function _AddToCartFlyout(event) {\n      event.preventDefault();\n\n      var formData = this.$form.serializeArray();\n\n      var options = {\n        $atcButton: this.$productAtcButton,\n        product: this.product,\n        settings: {\n          moneyFormat: this.settings.money_format,\n          cartRedirection: this.settings.cart_redirection\n        }\n      };\n\n      AddToCartFlyout$1.init(formData, options, this.atcCallbacks);\n    }\n\n    /**\n     * Callback when AddToCartFlyout opens\n     * Move keyboard focus into flyout\n     *\n     * @param {object} options - Options to be used\n     * @param {jQuery} options.$container - Container to trap focus within\n     * @param {jQuery} options.$elementToFocus - Element to be focused when focus leaves container\n     * @private\n     */\n\n  }, {\n    key: '_onATCOpen',\n    value: function _onATCOpen(options) {\n      trapFocus({\n        $container: options.$container,\n        $elementToFocus: options.$elementToFocus,\n        namespace: 'product-details-flyout'\n      });\n    }\n\n    /**\n     * Callback when AddToCartFlyout closes\n     * Move keyboard focus back into grid item\n     *\n     * @private\n     */\n\n  }, {\n    key: '_onATCClose',\n    value: function _onATCClose() {\n      removeTrapFocus({\n        namespace: 'product-details-flyout'\n      });\n\n      this.$productAtcButton.focus();\n    }\n  }]);\n  return ProductDetails;\n}();\n\nvar ProductQuickshop = function () {\n  function ProductQuickshop(options) {\n    classCallCheck(this, ProductQuickshop);\n\n    this.$el = options.$el;\n    this.$quickShop = this.$el.find('[data-product-quickshop]');\n    this.modalClass = options.modalClass;\n    this.loaded = false;\n    this.richText = null;\n    this.productDetails = null;\n    this.quickShopHTML = null;\n\n    try {\n      this.data = JSON.parse(this.$el.find('[data-product-quickshop-data]').text());\n    } catch (error) {\n      return console.warn('Quickshop: invalid quickshop data found. ' + error.message);\n    }\n\n    try {\n      this.quickShopHTML = JSON.parse(this.$el.find('[data-product-quickshop-html]').text());\n    } catch (error) {\n      return console.warn('Quickshop: invalid quickshop html found. ' + error.message);\n    }\n\n    if (!this.$quickShop[0].hasAttribute('data-loaded')) {\n      this.$quickShop.append(this.quickShopHTML);\n      this.$quickShop.attr('data-loaded', true);\n      this.$quickShop.find('.money').each(function (index, el) {\n        return dist$2.update(el);\n      });\n      this._initSPR();\n    }\n\n    this._initialize();\n\n    if (window.Shopify && Shopify.PaymentButton) {\n      Shopify.PaymentButton.init();\n    }\n  }\n\n  createClass(ProductQuickshop, [{\n    key: '_initSPR',\n    value: function _initSPR() {\n      if (!window.SPR) {\n        return;\n      }\n\n      window.SPR.registerCallbacks();\n      window.SPR.initRatingHandler();\n      window.SPR.initDomEls();\n      window.SPR.loadProducts();\n      window.SPR.loadBadges();\n    }\n  }, {\n    key: '_initialize',\n    value: function _initialize() {\n      this.$message = this.$el.find('[data-product-quickshop-message]');\n      this.$formArea = this.$el.find('[data-product-form-area]');\n      this.$gallery = this.$el.find('[data-product-gallery]');\n      this.$details = this.$el.find('[data-product-details]');\n      this.$description = this.$el.find('[data-product-description]');\n      this.context = this.data.context;\n      this.settings = this.data.settings;\n      this.product = this.data.product;\n\n      this._open = this._open.bind(this);\n      this._close = this._close.bind(this);\n\n      this._onATCClose = this._onATCClose.bind(this);\n      this._onATCInit = this._onATCInit.bind(this);\n      this._onATCError = this._onATCError.bind(this);\n      this._onATCSuccess = this._onATCSuccess.bind(this);\n\n      var modalCallbacks = {\n        onOpen: this._open,\n        onClose: this._close\n      };\n\n      this.atcCallbacks = {\n        onClose: this._onATCClose,\n        onInit: this._onATCInit,\n        onError: this._onATCError,\n        onSuccess: this._onATCSuccess\n      };\n\n      this.modal = new Modal(modalCallbacks);\n      this.modal.open('[data-product-quickshop=\"' + this.product.id + '\"]', this.modalClass);\n    }\n  }, {\n    key: '_open',\n    value: function _open() {\n      if (this.loaded) {\n        return;\n      }\n\n      if (this.$description.length) {\n        this.richText = new RichText(this.$description);\n      }\n\n      var options = {\n        $formArea: this.$formArea,\n        $gallery: this.$gallery,\n        $details: this.$details,\n        atcCallbacks: this.atcCallbacks,\n        context: this.context,\n        settings: this.settings,\n        product: this.product,\n        useHistory: false,\n        isQuickshop: true\n      };\n\n      this.productDetails = new ProductDetails(options);\n    }\n  }, {\n    key: '_close',\n    value: function _close() {\n      if (this.productDetails) {\n        this.productDetails.unload();\n      }\n\n      if (this.richText) {\n        this.richText.unload();\n      }\n\n      this._toggleMessage('', false);\n      this.modal.unload();\n    }\n  }, {\n    key: '_toggleMessage',\n    value: function _toggleMessage(message, isVisible) {\n      this.$message.html(message).toggleClass('visible', isVisible);\n    }\n  }, {\n    key: '_onATCClose',\n    value: function _onATCClose() {\n      removeTrapFocus({\n        namespace: 'product-details-flyout'\n      });\n\n      this.$el.focus();\n    }\n  }, {\n    key: '_onATCInit',\n    value: function _onATCInit() {\n      this.$message.removeClass('visible');\n    }\n  }, {\n    key: '_onATCError',\n    value: function _onATCError(error) {\n      var $content = jquery$1('<div class=\"product-message--error\">' + error + '</div>');\n      this._toggleMessage($content, true);\n    }\n  }, {\n    key: '_onATCSuccess',\n    value: function _onATCSuccess() {\n      this._close();\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      this._close();\n    }\n  }]);\n  return ProductQuickshop;\n}();\n\nvar ProductGridItem = function () {\n  function ProductGridItem($el) {\n    var _this = this;\n\n    classCallCheck(this, ProductGridItem);\n\n    this.$el = $el;\n    this.productQuickshop = null;\n    this.quickBuySettings = null;\n    this.events = [];\n\n    this.$window = jquery$1(window);\n    this.$html = jquery$1('html');\n    this.$content = this.$el.find('[data-product-item-content]');\n    this.$actions = this.$el.find('[data-product-actions]');\n    this.hasProductActions = this.$actions.length;\n\n    this._addToCart = this._addToCart.bind(this);\n    this._actionsToggle = this._actionsToggle.bind(this);\n    this._openQuickShop = this._openQuickShop.bind(this);\n\n    this._onATCOpen = this._onATCOpen.bind(this);\n    this._onATCClose = this._onATCClose.bind(this);\n\n    if (this.hasProductActions) {\n      this._setSortByQueryParameters();\n\n      if (this.$html.hasClass('no-touch') && Shopify.queryParams.grid_list !== 'list-view') {\n        this.events.push(this.$el.on('mouseenter.product-item', this._actionsToggle));\n        this.events.push(this.$el.on('mouseleave.product-item', this._actionsToggle));\n      }\n\n      //$scripts checks existence of script in header before attempting to inject\n      script$1(jquery$1('[data-scripts]').data('shopify-api-url'), function () {\n        _this.events.push(_this.$el.on('click.product-item', '[data-quick-buy]', _this._addToCart));\n        _this.events.push(_this.$el.on('click.product-item', '[data-quickshop-slim]', _this._openQuickShop));\n        _this.events.push(_this.$el.on('click.product-item', '[data-quickshop-full]', _this._openQuickShop));\n      });\n    }\n\n    if (this.$el.find('[data-quick-buy]').length) {\n      this._initQuickBuy();\n    }\n\n    this._objectFitPolyfill();\n  }\n\n  /**\n   * Make Shopify aware of releavent collection search info\n   *  - tag\n   *  - vendor\n   *  - pagination\n   *  - sorting criteria\n   *\n   * @private\n   */\n\n\n  createClass(ProductGridItem, [{\n    key: '_setSortByQueryParameters',\n    value: function _setSortByQueryParameters() {\n      Shopify.queryParams = {};\n      if (location.search.length) {\n        for (var i = 0, aCouples = location.search.substr(1).split('&'); i < aCouples.length; i++) {\n          var aKeyValue = aCouples[i].split('=');\n          // Reset the page number when we apply (i.e. don't add it to params)\n          if (aKeyValue.length > 1 && aKeyValue[0] !== 'page') {\n            Shopify.queryParams[decodeURIComponent(aKeyValue[0])] = decodeURIComponent(aKeyValue[1]);\n          }\n        }\n      }\n    }\n  }, {\n    key: '_initQuickBuy',\n    value: function _initQuickBuy() {\n      try {\n        this.quickBuySettings = JSON.parse(this.$el.find('[data-quick-buy-settings]').text());\n      } catch (error) {\n        return console.warn('Quick buy: invalid QuickBuy data found. ' + error.message);\n      }\n    }\n  }, {\n    key: '_openQuickShop',\n    value: function _openQuickShop(event) {\n      event.preventDefault();\n\n      var modalClass = event.currentTarget.hasAttribute('data-quickshop-full') ? 'quickshop-full' : 'quickshop-slim';\n\n      if (this.productQuickshop) {\n        this.productQuickshop.unload();\n      }\n\n      this.productQuickshop = new ProductQuickshop({\n        $el: this.$el,\n        modalClass: modalClass\n      });\n    }\n  }, {\n    key: '_isObjectFitAvailable',\n    value: function _isObjectFitAvailable() {\n      return 'objectFit' in document.documentElement.style;\n    }\n  }, {\n    key: '_objectFitPolyfill',\n    value: function _objectFitPolyfill() {\n      if (this._isObjectFitAvailable()) {\n        return;\n      }\n\n      var $figure = jquery$1('[data-product-item-image]', this.$el);\n      var featuredSrc = jquery$1('img:not(.productitem--image-alternate)', $figure).attr('src');\n      var alternateSrc = jquery$1('.productitem--image-alternate', $figure).attr('src');\n\n      $figure.addClass('product-item-image-no-objectfit');\n      $figure.css('background-image', 'url(\"' + featuredSrc + '\")');\n\n      if (alternateSrc) {\n        this.$el.on(\"mouseover\", function () {\n          $figure.css('background-image', 'url(\"' + alternateSrc + '\")');\n        });\n\n        this.$el.on(\"mouseleave\", function () {\n          $figure.css('background-image', 'url(\"' + featuredSrc + '\")');\n        });\n      }\n    }\n\n    /**\n     * Get height of element, and combined height of element + actions\n     *\n     * @returns {{heightBase, heightExpanded: *}}\n     * @private\n     */\n\n  }, {\n    key: '_getHeights',\n    value: function _getHeights() {\n      var height = this.$el.height();\n      var actionsHeight = this.$el.find('[data-product-actions]').outerHeight(true);\n\n      return {\n        heightBase: height,\n        heightExpanded: height + actionsHeight\n      };\n    }\n  }, {\n    key: '_actionsToggle',\n    value: function _actionsToggle(event) {\n      if (!layout.isBreakpoint('L')) return;\n\n      var open = event.type === 'mouseenter';\n\n      if (open) {\n        this._showActions();\n      }\n\n      if (!open) {\n        this._hideActions();\n      }\n    }\n  }, {\n    key: '_showActions',\n    value: function _showActions() {\n      var _this2 = this;\n\n      if (this.$el.revealer('isVisible')) {\n        return this._hideActions();\n      }\n\n      var _getHeights2 = this._getHeights(),\n          heightBase = _getHeights2.heightBase,\n          heightExpanded = _getHeights2.heightExpanded;\n\n      // Lock heights to prevent jumping\n\n\n      this.$el.css('height', heightBase);\n      this.$content.css('height', heightBase);\n\n      // Store height for when hovering out\n      this.$el.data('base-height', heightBase);\n\n      // Start animation, and transition height to expanded height\n      this.$el.revealer('show').one('revealer-animating.product-item', function () {\n        _this2.$content.css('height', heightExpanded);\n      });\n    }\n  }, {\n    key: '_hideActions',\n    value: function _hideActions() {\n      var _this3 = this;\n\n      var height = this.$el.data('base-height');\n\n      /*\n        - Transition buttons up, using base height for animation\n        - Remove heights after animation is complete in case of resize\n       */\n      this.$el.revealer('hide').one('revealer-animating', function () {\n        _this3.$el.off('revealer-animating.product-item');\n        _this3.$el.css({ height: height });\n        _this3.$content.css({ height: height });\n      }).one('revealer-hide', function () {\n        _this3.$el.off('revealer-hide.product-item').css('height', '');\n        _this3.$content.css('height', '');\n      });\n    }\n  }, {\n    key: '_addToCart',\n    value: function _addToCart(event) {\n      event.preventDefault();\n      var $atcButton = jquery$1(event.currentTarget);\n      var variantID = $atcButton.attr('data-variant-id');\n\n      var formData = [{\n        'name': 'id',\n        'value': variantID\n      }, {\n        'name': 'quantity',\n        'value': 1\n      }];\n\n      var options = {\n        $atcButton: $atcButton,\n        settings: {\n          moneyFormat: this.quickBuySettings.money_format,\n          cartRedirection: this.quickBuySettings.cart_redirection\n        }\n      };\n\n      var callbacks = {\n        onOpen: this._onATCOpen,\n        onClose: this._onATCClose\n      };\n\n      AddToCartFlyout$1.init(formData, options, callbacks);\n    }\n\n    /**\n     * Callback when AddToCartFlyout opens\n     * Move keyboard focus into flyout\n     *\n     * @param {object} options - Options to be used\n     * @param {jQuery} options.$container - Container to trap focus within\n     * @param {jQuery} options.$elementToFocus - Element to be focused when focus leaves container\n     * @private\n     */\n\n  }, {\n    key: '_onATCOpen',\n    value: function _onATCOpen(options) {\n      trapFocus({\n        $container: options.$container,\n        $elementToFocus: options.$elementToFocus,\n        namespace: 'product-item-flyout'\n      });\n    }\n\n    /**\n     * Callback when AddToCartFlyout closes\n     * Move keyboard focus back into grid item\n     *\n     * @private\n     */\n\n  }, {\n    key: '_onATCClose',\n    value: function _onATCClose() {\n      removeTrapFocus({\n        namespace: 'product-item-flyout'\n      });\n\n      this.$el.focus();\n    }\n  }, {\n    key: 'unload',\n    value: function unload() {\n      this.events.forEach(function ($el) {\n        return $el.off('.product-item');\n      });\n\n      if (this.productQuickshop) {\n        this.productQuickshop.unload();\n      }\n    }\n  }]);\n  return ProductGridItem;\n}();\n\nvar RecentlyViewed = function () {\n  function RecentlyViewed(section) {\n    classCallCheck(this, RecentlyViewed);\n\n    this.$el = jquery$1(section.el);\n    this.recentlyViewed = section.data.recently_viewed_info;\n    this.time = section.data.time;\n    this.flickity = null;\n\n    if (this.recentlyViewed && this.time) {\n      this.recentlyViewed.timestamp = Math.round(new Date().getTime() / 1000);\n    }\n\n    if (this.time) {\n      var recentlyViewed = [];\n\n      if (JSON.parse(localStorage.getItem('recentlyViewed')) !== null) {\n        recentlyViewed = JSON.parse(localStorage.getItem('recentlyViewed'));\n\n        for (var i = recentlyViewed.length - 1; i >= 0; i--) {\n          var timeSince = this.timeSince(recentlyViewed[i].timestamp);\n          var isPlaceholder = recentlyViewed[i].image.indexOf('svg+url') !== 1;\n\n          this.$el.find('[data-recently-viewed-container]').append('<div class=\"product-recently-viewed-card\"\\n              data-recently-viewed-card\\n            >\\n              <div class=\"product-recently-viewed-card-time\">\\n                ' + timeSince + '\\n                <div class=\"product-recently-viewed-card-remove\"\\n                  data-remove-recently-viewed=\"' + recentlyViewed[i].handle + '\">\\n                  <svg\\n                    aria-hidden=\"true\"\\n                    focusable=\"false\"\\n                    role=\"presentation\"\\n                    width=\"10\"\\n                    height=\"10\"\\n                    viewBox=\"0 0 10 10\"\\n                    xmlns=\"http://www.w3.org/2000/svg\"\\n                  >\\n                    <path d=\"M6.08785659,5 L9.77469752,1.31315906 L8.68684094,0.225302476 L5,3.91214341 L1.31315906,0.225302476 L0.225302476,1.31315906 L3.91214341,5 L0.225302476,8.68684094 L1.31315906,9.77469752 L5,6.08785659 L8.68684094,9.77469752 L9.77469752,8.68684094 L6.08785659,5 Z\"></path>\\n                  </svg>\\n                </div>\\n              </div>\\n              <a href=\"' + recentlyViewed[i].link + '\">\\n                <div\\n                  class=\"\\n                    product-recently-viewed-card-image-wrapper\\n                    productitem--image\\n                  \"\\n                >\\n                  <img\\n                    class=\"\\n                      product-recently-viewed-card-image\\n                      ' + (isPlaceholder ? 'product-recently-viewed-card-image-placeholder' : '') + '\\n                    \"\\n                    src=\"' + recentlyViewed[i].image.trim() + '\"\\n                    alt=\"' + recentlyViewed[i].title + '\"\\n                  >\\n                </div>\\n              </a>\\n              <div class=\"product-recently-viewed-card-price\">\\n                ' + recentlyViewed[i].price + '\\n              </div>\\n              <a\\n                href=\"' + recentlyViewed[i].link + '\"\\n                class=\"product-recently-viewed-card-title\"\\n              >\\n                ' + recentlyViewed[i].title + '\\n              </a>\\n            </div>');\n        }\n\n        if (this.recentlyViewed) {\n          this.removeRecentlyViewed(this.recentlyViewed.handle, recentlyViewed);\n\n          recentlyViewed.push(this.recentlyViewed);\n          localStorage.setItem('recentlyViewed', JSON.stringify(recentlyViewed));\n        }\n\n        this.$carousel = this.$el.find('.product-recently-viewed--content');\n        this.slides = '.product-recently-viewed-card';\n\n        if (this.$carousel.find(this.slides).length > 1) {\n          this._initSlider();\n        }\n      } else {\n        if (this.recentlyViewed) {\n          recentlyViewed.push(this.recentlyViewed);\n          localStorage.setItem('recentlyViewed', JSON.stringify(recentlyViewed));\n        }\n\n        this.$el.find('.product-recently-viewed--section').addClass('hide');\n      }\n    }\n\n    this.bindEvents();\n  }\n\n  createClass(RecentlyViewed, [{\n    key: 'bindEvents',\n    value: function bindEvents() {\n      var _this = this;\n\n      this.$el.on('click', '[data-remove-recently-viewed]', function (event) {\n        var $target = jquery$1(event.currentTarget);\n        var handle = $target.data('remove-recently-viewed');\n        var recentlyViewed = JSON.parse(localStorage.getItem('recentlyViewed'));\n\n        _this.removeRecentlyViewed(handle, recentlyViewed);\n        localStorage.setItem('recentlyViewed', JSON.stringify(recentlyViewed));\n\n        $target.parents('[data-recently-viewed-card]').addClass('hide-card');\n        $target.parents('[data-recently-viewed-card]').nextAll().addClass('move-card');\n\n        setTimeout(function () {\n          var index = $target.parents('[data-recently-viewed-card]').index();\n          if (index !== 0) {\n            index--;\n          }\n\n          $target.parents('[data-recently-viewed-card]').nextAll().removeClass('move-card');\n          _this.flickity.remove($target.parents('[data-recently-viewed-card]'));\n          _this.flickity.selectCell(index);\n        }, 500);\n      });\n\n      this.$el.on('click', '[data-clear-recently-viewed]', function (event) {\n        _this.clearRecentlyViewed();\n      });\n    }\n  }, {\n    key: 'timeSince',\n    value: function timeSince(timestamp) {\n      var now = Math.round(new Date().getTime() / 1000);\n      var secondsPast = now - timestamp;\n\n      if (secondsPast < 60) {\n        var secondsAgo = parseInt(secondsPast);\n\n        return secondsAgo === 1 ? secondsAgo + ' ' + this.time.second + ' ' + this.time.ago : secondsAgo + ' ' + this.time.seconds + ' ' + this.time.ago;\n      }\n\n      if (secondsPast < 3600) {\n        var minutesAgo = parseInt(secondsPast / 60);\n\n        return minutesAgo === 1 ? minutesAgo + ' ' + this.time.minute + ' ' + this.time.ago : minutesAgo + ' ' + this.time.minutes + ' ' + this.time.ago;\n      }\n\n      if (secondsPast <= 86400) {\n        var hoursAgo = parseInt(secondsPast / 3600);\n\n        return hoursAgo === 1 ? hoursAgo + ' ' + this.time.hour + ' ' + this.time.ago : hoursAgo + ' ' + this.time.hours + ' ' + this.time.ago;\n      }\n\n      if (secondsPast > 86400) {\n        var date = new Date(timestamp);\n        var currentDate = new Date(now);\n        var day = date.getDate();\n        var month = date.toDateString().match(/ [a-zA-Z]*/)[0].replace(' ', '');\n        var year = date.getFullYear() == currentDate.getFullYear() ? '' : ', ' + date.getFullYear();\n\n        return month + ' ' + day + ' ' + year;\n      }\n    }\n  }, {\n    key: 'removeRecentlyViewed',\n    value: function removeRecentlyViewed(handle, recentlyViewed) {\n      for (var i = 0; i < recentlyViewed.length; i++) {\n        if (recentlyViewed[i].handle === handle) {\n          recentlyViewed.splice(i, 1);\n\n          if (recentlyViewed.length === 0) {\n            this.$el.find('.product-recently-viewed--section').addClass('hide');\n          }\n        }\n      }\n    }\n  }, {\n    key: 'clearRecentlyViewed',\n    value: function clearRecentlyViewed() {\n      localStorage.setItem('recentlyViewed', null);\n      this.$el.find('[data-recently-viewed-card]').remove();\n      this.$el.find('.product-recently-viewed--section').addClass('hide');\n    }\n  }, {\n    key: '_initSlider',\n    value: function _initSlider() {\n      var _this2 = this;\n\n      this.flickityOptions = {\n        autoPlay: 0,\n        accessibility: true,\n        cellAlign: 'left',\n        cellSelector: this.slides,\n        groupCells: true,\n        imagesLoaded: true,\n        pageDots: false,\n        contain: true,\n        arrowShape: {\n          x0: 10,\n          x1: 60, y1: 50,\n          x2: 65, y2: 45,\n          x3: 20\n        }\n      };\n\n      this.flickity = new js$1(this.$carousel[0], this.flickityOptions);\n\n      setTimeout(function () {\n        _this2.flickity.resize();\n      }, 100);\n    }\n  }]);\n  return RecentlyViewed;\n}();\n\nvar SelectWidth = function () {\n  function SelectWidth($select) {\n    classCallCheck(this, SelectWidth);\n\n    this.$select = $select;\n    this.$html = jquery$1('html');\n    this.$body = jquery$1('body');\n\n    this._adjustWidth = this._adjustWidth.bind(this);\n\n    this.$select.on('change.select', this._adjustWidth);\n\n    // Update width of <select> on load\n    this._adjustWidth();\n  }\n\n  createClass(SelectWidth, [{\n    key: 'unload',\n    value: function unload() {\n      this.$select.off('.select');\n    }\n\n    /**\n     * Adjust select to have width equal to its selected option\n     *\n     * @private\n     */\n\n  }, {\n    key: '_adjustWidth',\n    value: function _adjustWidth() {\n      var selectedText = this.$select.find(':selected').text();\n      var $select = this.$select.parent().clone();\n\n      var additionalStyles = {\n        position: 'absolute',\n        bottom: '-100%',\n        left: '-100%',\n        display: 'inline-block',\n        visibility: 'hidden'\n      };\n\n      // Replace contents of copied <select> with selected text, and additional styles\n      $select.css(additionalStyles).find('select').css('width', '') // Remove any width applied from previous with assignment\n      .html('<option>' + selectedText + '</option>');\n      this.$body.append($select);\n\n      var width = $select.outerWidth(true);\n      $select.remove();\n\n      this.$select.css({ width: width });\n    }\n  }]);\n  return SelectWidth;\n}();\n\nvar StaticCollection = function () {\n  function StaticCollection(section) {\n    var _this = this;\n\n    classCallCheck(this, StaticCollection);\n\n    this.section = section;\n    this.$el = jquery$1(section.el);\n    this.context = section.data.context;\n    this.sortWidth = null;\n    this.$focusItem = null;\n\n    this.filtersContent = '[data-productgrid-filters-content]';\n    this.sortContent = '[data-productgrid-sort-content]';\n    this.$sortTrigger = this.$el.find('[data-productgrid-trigger-sort]');\n    this.$sortTriggerButton = this.$el.find('[data-productgrid-trigger-sort-button]');\n    this.$sortTriggerModal = this.$el.find('[data-productgrid-modal-sort]');\n    this.$filtersTrigger = this.$el.find('[data-productgrid-trigger-filters]');\n    this.$allTags = this.$el.find(this.filtersContent + ' .filter-item a:not([data-filter-toggle])');\n    this.$advandedTags = this.$el.find('[data-tag-advanced] a');\n    this.$additionalTags = this.$el.find('[data-filter-toggle]');\n    this.$gridViewToggle = this.$el.find('[data-collection-grid-view]');\n    this.$listViewToggle = this.$el.find('[data-collection-list-view]');\n    this.$gridContainer = this.$el.find('.productgrid--outer');\n    this.$colorSwatches = this.$el.find('.color-swatch-list li');\n\n\n    this._changeSorting = this._changeSorting.bind(this);\n    this._changeSortingButton = this._changeSortingButton.bind(this);\n    this._showSortModal = this._showSortModal.bind(this);\n    this._showFiltersModal = this._showFiltersModal.bind(this);\n    this._activateTag = this._activateTag.bind(this);\n    this._advancedTags = this._advancedTags.bind(this);\n    this._toggleTags = this._toggleTags.bind(this);\n\n    this._onModalOpen = this._onModalOpen.bind(this);\n    this._onModalClose = this._onModalClose.bind(this);\n\n    this._toggleListView = this._toggleListView.bind(this);\n    this._toggleGridView = this._toggleGridView.bind(this);\n    this._checkListView = this._checkListView.bind(this);\n\n    var modalCallbacks = {\n      onOpen: this._onModalOpen,\n      onClose: this._onModalClose\n    };\n  \n    this.events = [this.$sortTrigger.on('change.collection', this._changeSorting), this.$sortTriggerButton.on('click.collection', this._changeSortingButton), this.$sortTriggerModal.on('click.collection', this._showSortModal), this.$filtersTrigger.on('click.collection', this._showFiltersModal), this.$advandedTags.on('click.collection', this._advancedTags), this.$allTags.on('click.collection', this._activateTag), this.$additionalTags.on('click.collection', this._toggleTags), this.$gridViewToggle.on('click.collection', this._toggleGridView), this.$listViewToggle.on('click.collection', this._toggleListView)];\n\n    // Product items\n    this.productItems = [];\n    var $productItems = this.$el.find('[data-product-item]');\n\n    $productItems.each(function (i, productItem) {\n      _this.productItems.push(new ProductGridItem(jquery$1(productItem)));\n    });\n\n    if (this.$sortTrigger.length) {\n      this.sortWidth = new SelectWidth(this.$sortTrigger);\n    }\n\n    this._setSortByQueryParameters();\n    this._updatePrices();\n    this.modal = new Modal(modalCallbacks);\n\n    this.recentlyViewed = new RecentlyViewed(section);\n  \n    if (Shopify.queryParams.grid_list !== 'list-view') {\n        this.events.push(this.$colorSwatches.on('mouseenter', this._colorSwap));\n        this.events.push(this.$colorSwatches.on('mouseleave', this._colorSwap));\n    }\n  }\n\n  createClass(StaticCollection, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.events.forEach(function ($el) {\n        return $el.off('.collection');\n      });\n      this.modal.unload();\n      this.recentlyViewed.unload();\n\n      if (this.sortWidth) {\n        this.sortWidth.unload();\n      }\n\n      this.productItems.forEach(function (productItem) {\n        productItem.unload();\n      });\n    }\n\n    /**\n     * Set product grid prices to match CurrencyConverter settings on page load, section re-load\n     *\n     * @private\n     */\n\n  }, {\n    key: '_updatePrices',\n    value: function _updatePrices() {\n      this.$el.find('.money').each(function (index, el) {\n        return dist$2.update(el);\n      });\n      \n      this.$el.find('.money').each(function (index, el) { \n        $(el).html($(el).html().replace(\"USD\",\"\"));\n      });\n    }\n   }, {\n    key: '_colorSwap', \n    value: function _colorSwap(event) {\n      if (!layout.isBreakpoint('L')) return;\n\n      var colorSwatch = $(event.target);\n      \n      if (event.target.tagName == \"LI\") colorSwatch = $(event.target).find(\"label\");\n      \n      var open = event.type === 'mouseenter';\n      \n      if (open) {\n        var thumbImage = $(colorSwatch).data(\"thumb-image\");\n        var parentProduct = $(event.target).parents('.productitem'); \n        $(parentProduct).find(\".productitem--image img\").attr(\"src\", thumbImage);\n      }\n\n      if (!open) {\n         \n      }\n    }\n    /**\n     * Open Tags/Filters modal (on mobile)\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_showFiltersModal',\n    value: function _showFiltersModal(event) {\n      event.preventDefault();\n\n      this.$focusItem = jquery$1(event.currentTarget);\n      this.modal.open(this.filtersContent, 'productgrid-filters');\n    }\n\n    /**\n     * Open Sort by modal (on mobile)\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_showSortModal',\n    value: function _showSortModal(event) {\n      event.preventDefault();\n\n      this.$focusItem = jquery$1(event.currentTarget);\n      this.modal.open(this.sortContent, 'productgrid-sort');\n    }\n\n    /**\n     * Style a tag as active after click, before page transition\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_activateTag',\n    value: function _activateTag(event) {\n      jquery$1(event.currentTarget).addClass('filter-link--active');\n    }\n\n    /**\n     * Used by advanced tags to concatenate tag searches\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_advancedTags',\n    value: function _advancedTags(event) {\n      var $target = jquery$1(event.currentTarget).parent();\n      var tagGroup = $target.attr('data-group');\n      var $activeGroup = jquery$1('.filter-item--active[data-group=\"' + tagGroup + '\"]');\n\n      if (!$target.hasClass('filter-item--active') && $activeGroup.length) {\n        var tagHandle = $target.attr('data-handle');\n\n        event.preventDefault();\n        $target.siblings().removeClass('filter-item--active');\n\n        location.href = location.href\n        // swap tag\n        .replace($activeGroup.attr('data-handle'), tagHandle)\n        // go back to page 1\n        .replace(/(&page=\\d+)|(page=\\d+&)|(\\?page=\\d+$)/, '');\n      }\n    }\n\n    /**\n     * Expand / Collapse additional tags in the sidebar\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_toggleTags',\n    value: function _toggleTags(event) {\n      event.preventDefault();\n\n      var $trigger = jquery$1(event.currentTarget);\n      var $items = $trigger.parent().siblings('[data-hidden-default]');\n      var siblingsVisible = $trigger.data('filter-toggle');\n\n      $items.toggleClass('filter-item--hidden', siblingsVisible);\n      $trigger.data('filter-toggle', !siblingsVisible).text(!siblingsVisible ? this.context.see_less : this.context.see_more);\n\n      if (this.modal.isOpen()) {\n        this.modal.position();\n      }\n    }\n\n    /**\n     * Make Shopify aware of releavent collection search info\n     *  - tag\n     *  - vendor\n     *  - pagination\n     *  - sorting criteria\n     *\n     * @private\n     */\n\n  }, {\n    key: '_setSortByQueryParameters',\n    value: function _setSortByQueryParameters() {\n      Shopify.queryParams = {};\n      if (location.search.length) {\n        for (var i = 0, aCouples = location.search.substr(1).split('&'); i < aCouples.length; i++) {\n          var aKeyValue = aCouples[i].split('=');\n          // Reset the page number when we apply (i.e. don't add it to params)\n          if (aKeyValue.length > 1 && aKeyValue[0] !== 'page') {\n            Shopify.queryParams[decodeURIComponent(aKeyValue[0])] = decodeURIComponent(aKeyValue[1]);\n          }\n        }\n      }\n\n      this._checkListView();\n    }\n\n    /**\n     * Sort by opens a modal on mobile, this handles button events\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_changeSortingButton',\n    value: function _changeSortingButton(event) {\n      var activeClass = 'utils-sortby--modal-button--active';\n\n      jquery$1(event.currentTarget).addClass(activeClass).parent().siblings().find('.' + activeClass).removeClass(activeClass);\n\n      this._changeSorting(event);\n    }\n\n    /**\n     * Change sorting of collection\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_changeSorting',\n    value: function _changeSorting(event) {\n      event.preventDefault();\n      var $target = jquery$1(event.currentTarget);\n\n      Shopify.queryParams.sort_by = $target.val(); \n      location.search = jQuery.param(Shopify.queryParams).replace(/\\+/g, '%20');\n    }\n\n    /**\n     * When a modal is open, move focus into the modal for a11y\n     *\n     * @private\n     */\n\n  }, {\n    key: '_onModalOpen',\n    value: function _onModalOpen() {\n      trapFocus({\n        $container: this.modal.$modal,\n        namespace: 'productgrid-modal'\n      });\n    }\n\n    /**\n     * Return focus to last used button (if found) on modal close\n     *\n     * @private\n     */\n\n  }, {\n    key: '_onModalClose',\n    value: function _onModalClose() {\n      removeTrapFocus({\n        $container: this.modal.$modal,\n        namespace: 'productgrid-modal'\n      });\n\n      if (this.$focusItem) {\n        this.$focusItem.focus();\n        this.$focusItem = null;\n      }\n    }\n\n    /**\n     * Toggle grid view\n     *\n     */\n\n  }, {\n    key: '_toggleGridView',\n    value: function _toggleGridView(event) {\n      Shopify.queryParams.grid_list = 'grid-view';\n      location.search = jQuery.param(Shopify.queryParams).replace(/\\+/g, '%20');\n    }\n\n    /**\n     * Toggle list view\n     *\n     */\n\n  }, {\n    key: '_toggleListView',\n    value: function _toggleListView(event) {\n      Shopify.queryParams.grid_list = 'list-view';\n      location.search = jQuery.param(Shopify.queryParams).replace(/\\+/g, '%20');\n    }\n\n    /**\n     * Check grid/list view toggle query parameters\n     *\n     */\n\n  }, {\n    key: '_checkListView',\n    value: function _checkListView() {\n      if (Shopify.queryParams.grid_list === 'list-view') {\n        this.$el.find('[href*=\"&grid_list\"]').attr('href', function (i, href) {\n          if (href.indexOf('?') === -1) {\n            href = href.replace('&', '?');\n          }\n\n          return href.replace('grid_list', 'grid_list=list-view');\n        });\n\n        this.$el.find('.utils-viewtoggle-button').removeClass('active');\n        this.$listViewToggle.addClass('active');\n        this.$gridContainer.addClass('productgrid-listview');\n      } else {\n        this.$el.find('[href*=\"&grid_list\"]').attr('href', function (i, href) {\n          if (href.indexOf('?') === -1) {\n            href = href.replace('&', '?');\n          }\n\n          return href.replace('grid_list', 'grid_list=grid-view');\n        });\n      }\n    }\n  }]);\n  return StaticCollection;\n}();\n\nvar StaticGiftcard = function () {\n  function StaticGiftcard(section) {\n    var _this = this;\n\n    classCallCheck(this, StaticGiftcard);\n\n    this.$el = jquery$1(section.el);\n    this.$qrCode = this.$el.find('[data-giftcard-qr]');\n    this.$giftCardCode = this.$el.find('[data-giftcard-code]');\n\n    script$1(jquery$1('[data-scripts]').data('shopify-qrcode'), function () {\n      _this.QRCode = new QRCode(_this.$qrCode[0], {\n        text: _this.$qrCode.attr('data-giftcard-qr'),\n        width: 120,\n        height: 120\n      });\n    });\n\n    this._bindEvents();\n  }\n\n  createClass(StaticGiftcard, [{\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this2 = this;\n\n      this.$el.on('click', '[data-giftcard-print]', function () {\n        window.print();\n      });\n\n      // Auto-select gift card code on click, based on ID passed to the function\n      this.$el.on('click', '[data-giftcard-code]', function () {\n        _this2._selectText();\n      });\n    }\n  }, {\n    key: '_selectText',\n    value: function _selectText() {\n      var text = this.$giftCardCode[0];\n      var range = '';\n\n      if (document.body.createTextRange) {\n        // ms method\n        range = document.body.createTextRange();\n        range.moveToElementText(text);\n        range.select();\n      } else if (window.getSelection) {\n        // moz, opera, webkit method\n        var selection = window.getSelection();\n        range = document.createRange();\n        range.selectNodeContents(text);\n        selection.removeAllRanges();\n        selection.addRange(range);\n      }\n    }\n  }]);\n  return StaticGiftcard;\n}();\n\nvar StaticPassword = function () {\n  function StaticPassword(section) {\n    classCallCheck(this, StaticPassword);\n\n    this.$el = jquery$1(section.el);\n\n    this.modalForms = null;\n    this.newsletterForm = null;\n    this.modalContents = '[data-passwordentry]';\n    this.$newsletterForm = this.$el.find('[data-password-newsletter]');\n\n    this.modalOpen = this.onModalOpen.bind(this);\n    this.modalClose = this.onModalClose.bind(this);\n    this._openModal = this._openModal.bind(this);\n\n    this.modal = new Modal({\n      onOpen: this.modalOpen,\n      onClose: this.modalClose\n    });\n\n    if (this.$newsletterForm) {\n      this.newsletterForm = new Forms(this.$newsletterForm);\n    }\n\n    this._checkForPasswordAttempt();\n    this._bindEvents();\n  }\n\n  createClass(StaticPassword, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.$el.off('.static-password');\n\n      if (this.newsletterForm) {\n        this.newsletterForm.unload();\n      }\n\n      if (this.modalForms) {\n        this.modalForms.unload();\n      }\n    }\n  }, {\n    key: 'onModalOpen',\n    value: function onModalOpen() {\n      var $contents = jquery$1('[data-passwordentry-contents]');\n      this.modalForms = new Forms($contents);\n    }\n  }, {\n    key: 'onModalClose',\n    value: function onModalClose() {\n      this.modalForms.unload();\n      this.modalForms = null;\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      this.$el.on('click.static-password', '[data-passwordentry-toggle]', this._openModal);\n    }\n  }, {\n    key: '_openModal',\n    value: function _openModal() {\n      this.modal.open(this.modalContents, 'passwordentry');\n    }\n  }, {\n    key: '_checkForPasswordAttempt',\n    value: function _checkForPasswordAttempt() {\n      if (!jquery$1('[data-passwordentry-errors]').length) {\n        return;\n      }\n\n      this._openModal();\n    }\n  }]);\n  return StaticPassword;\n}();\n\nvar ProductRowScroller = function () {\n  function ProductRowScroller(productRow) {\n    classCallCheck(this, ProductRowScroller);\n\n    this.$window = $(window);\n    this.flickity = null;\n    this.productRow = productRow;\n    this.$productRow = $(this.productRow);\n\n    // Activate flickity on mobile\n    this._mobileSlider = this._mobileSlider.bind(this);\n    layout.onBreakpointChange(this._mobileSlider);\n\n    this._mobileSlider();\n  }\n\n  createClass(ProductRowScroller, [{\n    key: 'unload',\n    value: function unload() {\n      layout.offBreakpointChange(this._mobileSlider);\n      this._destroyFlickity();\n    }\n  }, {\n    key: '_initFlickity',\n    value: function _initFlickity() {\n      this.flickity = new js$1(this.productRow, {\n        cellSelector: '.productgrid--item',\n        contain: true,\n        freeScroll: true,\n        percentPosition: false,\n        prevNextButtons: false,\n        pageDots: false,\n        setGallerySize: false\n      });\n\n      this._bindSlider();\n    }\n  }, {\n    key: '_destroyFlickity',\n    value: function _destroyFlickity() {\n      if (!this.flickity) {\n        return;\n      }\n\n      this.$window.off('.product-row');\n      this.$productRow.off('.product-row');\n\n      this.flickity.destroy();\n      this.flickity = null;\n    }\n  }, {\n    key: '_mobileSlider',\n    value: function _mobileSlider() {\n      // If is Large layout, attempt to destroy flickity\n      if (layout.isBreakpoint('L') || true) {\n        this._destroyFlickity();\n        return;\n      }\n\n      // Is XS/S/M, and flickity is init'd -- do nothing\n      if (this.flickity) {\n        return;\n      }\n\n      // Is XS/S/M, and flickity is not init'd\n      this._initFlickity();\n    }\n  }, {\n    key: '_bindSlider',\n    value: function _bindSlider() {\n      var _this = this;\n\n      var $slider = this.$productRow.find('.flickity-slider');\n\n      this.$window.on('resize.product-row', justDebounce$1(function () {\n        _this.$productRow.trigger('heightUpdate.product-row');\n      }));\n\n      this.flickity.on('cellSelect', function () {\n        _this.$productRow.trigger('heightUpdate.product-row');\n      });\n\n      this.$productRow.on('heightUpdate.product-row', function () {\n        if (!_this.flickity) {\n          return;\n        }\n\n        $slider.height(Math.ceil(_this.flickity.maxCellHeight));\n      });\n\n      // Sets the Slider to the height of the first slide\n      this.$productRow.trigger('heightUpdate.product-row');\n    }\n  }]);\n  return ProductRowScroller;\n}();\n\nvar StaticProduct = function () {\n  function StaticProduct(section) {\n    var _this = this;\n\n    classCallCheck(this, StaticProduct);\n\n    this.postMessage = section.postMessage;\n    this.context = section.data.context;\n    this.settings = section.data.settings;\n    this.product = section.data.product;\n    this.richText = null;\n    this.reviewForm = null;\n    this.flickity = null;\n    this.flickityOptions = null;\n\n    this.$el = jquery$1(section.el);\n    this.$product = this.$el.find('[data-product-wrapper]');\n\n    if (this.settings) {\n      this.isThreeColumn = this.settings.layout === 'layout--three-col';\n    }\n\n    // History\n    this.isThemeEditor = window.Shopify && window.Shopify.designMode;\n    this.useHistory = !this.isThemeEditor && history.replaceState;\n\n    this.$gallery = this.$product.find('[data-product-gallery]');\n\n    // Product details\n    this.$details = this.$product.find('[data-product-details]');\n\n    // Product description\n    this.$description = this.$product.find('[data-product-description]');\n\n    // Product form containers\n    this.$formRegular = this.$product.find('[data-product-form-regular]');\n    this.$formAlt = this.$product.find('[data-product-form-alt]');\n\n    // Product form area\n    this.$formArea = this.$product.find('[data-product-form-area]');\n\n    // Move product form and information on breakpoint change\n    this.layoutHandler = this.onBreakpointChange.bind(this);\n    layout.onBreakpointChange(this.layoutHandler);\n\n    // Related Products\n    this.$relatedProducts = this.$el.find('[data-related-products]');\n    this.relatedProducts = [];\n    this.relatedProductsScroller = null;\n\n    // Product reviews\n    this.$productReviews = this.$el.find('[data-product-reviews]');\n    this._moveForm();\n\n    if (this.$description.length) {\n      this.richText = new RichText(this.$description);\n    }\n\n    if (this.$relatedProducts.length) {\n      this.relatedProductsScroller = new ProductRowScroller(section.el.querySelector('[data-product-row]'));\n\n      this.$relatedProducts.find('[data-product-item]').each(function (i, productItem) {\n        new ProductGridItem(jquery$1(productItem));\n      });\n\n      /* If related products are disabled/enabled with while in the TE,\n       * they'll have shop.currency as the monetary value. This updates it to\n       * the active currency\n       */\n      this.$relatedProducts.find('.money').each(function (index, el) {\n        return dist$2.update(el);\n      });\n    }\n\n    if (this.$productReviews.length) {\n      this.reviewForm = new Forms(this.$productReviews, '.spr-form-input');\n     \n      if ($(window).width() > 1024 ) {\n        var minHeight = this.$productReviews.height();\n        if (this.$el.find('#simpAskQuestion').height() > minHeight) minHeight = this.$el.find('#simpAskQuestion').height();  \n        $(this.$productReviews).find(\"#shopify-product-reviews\").css(\"min-height\", minHeight);\n        $(this.$el.find('#simpAskQuestion')).css(\"min-height\", minHeight);\n      }\n      \n      setTimeout(function(){ \n      \tif ($(\".spr-review\").length > 4) { // when there are more than 4 reviews, hide them and show a \"see more\" button \n       \t\t$(\".spr-reviews\").append(\"<div class='viewmore'><span>view more</span></div>\"); \n          \t$(\".spr-reviews .viewmore\").fadeIn();\n          \n            $(\".viewmore\").click(function() { \n              $(\".spr-review\").slideDown(); \n              $(this).fadeOut();\n            }); \n       \t} \n      }, 1500); \n      \n      \n      \n    }\n      \n\n    // Instantiate ProductDetails after Shopify API is loaded\n    script$1(jquery$1('[data-scripts]').data('shopify-api-url'), function () {\n      var options = {\n        $formArea: _this.$formArea,\n        $gallery: _this.$gallery,\n        $details: _this.$details,\n        context: _this.context,\n        settings: _this.settings,\n        product: _this.product,\n        useHistory: _this.useHistory\n      };\n\n      _this.productDetails = new ProductDetails(options);\n    });\n\n    this.recentlyViewed = new RecentlyViewed(section);\n  }\n\n  createClass(StaticProduct, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      layout.offBreakpointChange(this.layoutHandler);\n      this.productDetails.unload();\n\n      if (this.richText) {\n        this.richText.unload();\n      }\n\n      if (this.relatedProductsScroller) {\n        this.relatedProductsScroller.unload();\n      }\n\n      this.relatedProducts.forEach(function (productItem) {\n        productItem.unload();\n      });\n\n      if (this.reviewForm) {\n        this.reviewForm.unload();\n      }\n    }\n  }, {\n    key: 'onBreakpointChange',\n    value: function onBreakpointChange() {\n      this._moveForm();\n    }\n\n    /**\n     * Move product form if is a three column layout\n     * @private\n     */\n\n  }, {\n    key: '_moveForm',\n    value: function _moveForm() {\n      if (!this.isThreeColumn) return;\n\n      if (layout.isBreakpoint('L')) {\n        if (!jquery$1.contains(this.$formAlt[0], this.$formArea[0])) {\n          var $form = this.$formArea.detach();\n          this.$formAlt.append($form);\n        }\n      } else {\n        if (!jquery$1.contains(this.$formRegular[0], this.$formArea[0])) {\n          var _$form = this.$formArea.detach();\n          this.$formRegular.append(_$form);\n        }\n      }\n    }\n  }]);\n  return StaticProduct;\n}();\n\nvar StaticSearch = function () {\n  function StaticSearch(section) {\n    var _this = this;\n\n    classCallCheck(this, StaticSearch);\n\n    this.section = section;\n    this.$el = jquery$1(section.el);\n    this.$searchField = this.$el.find('[data-live-search]');\n    this.modal = new Modal();\n\n    // Product items\n    this.productItems = [];\n    var $productItems = this.$el.find('[data-product-item]');\n\n    $productItems.each(function (i, productItem) {\n      _this.productItems.push(new ProductGridItem(jquery$1(productItem)));\n    });\n\n    this._updatePrices();\n    this.searchForm = new SearchForm(this.$searchField);\n  }\n\n  createClass(StaticSearch, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.modal.unload();\n      this.searchForm.unload();\n\n      this.productItems.forEach(function (productItem) {\n        productItem.unload();\n      });\n    }\n  }, {\n    key: '_updatePrices',\n    value: function _updatePrices() {\n      this.$el.find('.money').each(function (index, el) {\n        return dist$2.update(el);\n      });\n    }\n  }]);\n  return StaticSearch;\n}();\n\nvar DynamicTwitterFeed = function () {\n  function DynamicTwitterFeed(section) {\n    classCallCheck(this, DynamicTwitterFeed);\n\n    this.$el = jquery$1(section.el);\n    this.$window = jquery$1(window);\n    this.flickity = null;\n    \n    this.$blogPosts = this.$el.find('[data-blog-posts]');\n\n    // Activate flickity on mobile\n    this._mobileSlider = this._mobileSlider.bind(this);\n    layout.onBreakpointChange(this._mobileSlider);\n    this._mobileSlider();\n  }\n\n  /**\n   * Unbind events when section is re-drawn\n   */\n\n\n  createClass(DynamicTwitterFeed, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      layout.offBreakpointChange(this._mobileSlider);\n      this._destroyFlickity();\n    }\n  }, {\n    key: '_initFlickity',\n    value: function _initFlickity() {\n      this.flickity = new js$1(this.$blogPosts[0], {\n        cellSelector: '.article--excerpt-wrapper',\n        contain: true,\n        freeScroll: true,\n        percentPosition: false,\n        prevNextButtons: false,\n        pageDots: false,\n        setGallerySize: false\n      });\n\n      this._bindSlider();\n    }\n  }, {\n    key: '_destroyFlickity',\n    value: function _destroyFlickity() {\n      if (!this.flickity) {\n        return;\n      }\n\n      this.$window.off('.blog-posts');\n      this.$blogPosts.off('.blog-posts');\n      this.flickity.destroy();\n      this.flickity = null;\n    }\n  }, {\n    key: '_mobileSlider',\n    value: function _mobileSlider() {\n      \n      // If is Large layout, attempt to destroy flickity\n      if (layout.isBreakpoint('L') || true) {\n        this._destroyFlickity();\n        return;\n      }\n\n      // Is XS/S/M, and flickity is init'd -- do nothing\n      if (this.flickity) {\n        return;\n      }\n\n      // Is XS/S/M, and flickity is not init'd\n      this._initFlickity();\n    }\n  }, {\n    key: '_bindSlider',\n    value: function _bindSlider() {\n      var _this = this;\n\n      var $slider = this.$blogPosts.find('.flickity-slider');\n\n      this.$window.on('resize.blog-posts', justDebounce$1(function () {\n        _this.$blogPosts.trigger('heightUpdate.blog-posts');\n      }));\n\n      this.flickity.on('cellSelect', function () {\n        _this.$blogPosts.trigger('heightUpdate.blog-posts');\n      });\n\n      this.$blogPosts.on('heightUpdate.blog-posts', function () {\n        if (!_this.flickity) {\n          return;\n        }\n\n        $slider.height(Math.ceil(_this.flickity.maxCellHeight));\n      });\n\n      // Sets the Slider to the height of the first slide\n      this.$blogPosts.trigger('heightUpdate.blog-posts');\n    }\n  }]);\n  return DynamicTwitterFeed;\n}();\n\nvar StaticHighlightsBanners = function () {\n  function StaticHighlightsBanners(section) {\n    classCallCheck(this, StaticHighlightsBanners);\n\n    this.$el = jquery$1(section.el);\n    this.$window = jquery$1(window);\n\n    this.$carousel = this.$el.find('.highlights-banners');\n    this.slides = '.highlights-banners-block';\n\n    this.flickity = null;\n    this.flickityOptions = null;\n\n    if (this.$carousel.find(this.slides).length > 1) {\n      this._initSlider();\n    }\n  }\n\n  createClass(StaticHighlightsBanners, [{\n    key: '_initSlider',\n    value: function _initSlider() {\n      this.flickityOptions = {\n        autoPlay: 0,\n        accessibility: true,\n        cellAlign: 'left',\n        cellSelector: this.slides,\n        imagesLoaded: false,\n        pageDots: false,\n        prevNextButtons: false,\n        setGallerySize: false,\n        contain: true\n      };\n\n      this._bindFlickity();\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this._destroyFlickity();\n      this.$window.off('.twitter');\n    }\n  }, {\n    key: '_bindFlickity',\n    value: function _bindFlickity() {\n      var _this = this;\n\n     /* if (layout.isBreakpoint('L') === false && this.flickity === null) {\n        this.flickity = new js$1(this.$carousel[0], this.flickityOptions);\n      }\n\n      this.$window.on('resize', justDebounce$1(function () {\n        if (layout.isBreakpoint('L') === false && _this.flickity === null) {\n          _this._bindFlickity();\n        } else if (layout.isBreakpoint('L') && _this.flickity) {\n          _this._destroyFlickity();\n        }\n      }));*/\n    }\n  }, {\n    key: '_destroyFlickity',\n    value: function _destroyFlickity() {\n      if (!this.flickity) {\n        return;\n      }\n\n      this.flickity.destroy();\n      this.flickity = null;\n    }\n  }]);\n  return StaticHighlightsBanners;\n}();\n\nvar StaticSlideshow = function () {\n  function StaticSlideshow(section) {\n    classCallCheck(this, StaticSlideshow);\n\n    this.el = section.el;\n    this.settings = section.data;\n    this.$window = jquery$1(window);\n\n    this.carousel = this.el.querySelector('.slideshow');\n    this.slides = '.slideshow-slide';\n    this.container = this.el.querySelector('.slideshow-height-fullscreen');\n    this.isFullscreen = !!this.container;\n    this.selectBlockOnLoad = true;\n    this.continueAutoplay = true;\n    this.stopAutoplay = false;\n    this.autoplayTimeout = 0;\n\n    this.flickity = null;\n    this.flickityOptions = null;\n\n    if (this.carousel && this.carousel.querySelectorAll(this.slides).length > 1 && layout.isBreakpoint('L')) {\n      this._initSlider();\n    }\n  }\n\n  createClass(StaticSlideshow, [{\n    key: '_initSlider',\n    value: function _initSlider() {\n      var _this = this;\n\n      this.flickityOptions = {\n        autoPlay: this.settings.enable_autoplay ? this.settings.autoplay_duration * 1000 : false,\n        setGallerySize: !this.isFullscreen,\n        pauseAutoPlayOnHover: false,\n        accessibility: true,\n        adaptiveHeight: true,\n        cellAlign: 'left',\n        cellSelector: this.slides,\n        imagesLoaded: true,\n        contain: true,\n        wrapAround: true,\n        arrowShape: {\n          x0: 10,\n          x1: 60,\n          y1: 50,\n          x2: 65,\n          y2: 45,\n          x3: 20\n        }\n      };\n\n      this.$firstSlideImage = jquery$1(this.slides, this.carousel).find('img[data-rimg]').first();\n\n      this.$firstSlideImage.one('rimg:load', function () {\n        _this.flickity = new js$1(_this.carousel, _this.flickityOptions);\n        _this._bindEvents();\n      });\n    }\n  }, {\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this2 = this;\n\n      this._slideshowHeight();\n      this._positionDots();\n      this._changeArrrowColors();\n\n      this.$window.on('resize.slideshow', justDebounce$1(function () {\n        _this2._slideshowHeight();\n        _this2._positionDots();\n        _this2._changeArrrowColors();\n      }));\n\n      this.flickity.on('select', function () {\n        _this2._slideshowHeight();\n        _this2._positionDots();\n        _this2._changeArrrowColors();\n\n        _this2.selectBlockOnLoad = false;\n\n        if (_this2.settings.enable_autoplay && !_this2.stopAutoplay) {\n          _this2.flickity.pausePlayer();\n\n          if (_this2.continueAutoplay) {\n            _this2.autoplayTimeout = 0;\n          } else {\n            _this2.autoplayTimeout = 10000;\n          }\n\n          _this2.continueAutoplay = true;\n\n          setTimeout(function () {\n            _this2.flickity.playPlayer();\n          }, _this2.autoplayTimeout);\n        }\n      });\n\n      this.flickity.on('dragStart', function () {\n        _this2.continueAutoplay = false;\n      });\n    }\n  }, {\n    key: '_positionDots',\n    value: function _positionDots() {\n      var pageDots = this.el.querySelector('.flickity-page-dots');\n\n      if (layout.isBreakpoint('XS') && !this.isFullscreen) {\n        var content = this.flickity.selectedElement.querySelector('.slideshow-slide-content');\n        var height = this.flickity.selectedElement.querySelector('.slideshow-background').offsetHeight;\n        var dotGutter = 5;\n        var top = 'auto';\n\n        if (content) {\n          top = height + dotGutter + 'px';\n        } else {\n          var pageDotsHeight = pageDots.offsetHeight;\n          var dotBottomGutter = 20;\n\n          // If no content, and mobile, offset by height of dots, and the bottom gutter\n          top = height - (pageDotsHeight + dotBottomGutter) + 'px';\n        }\n\n        pageDots.style.top = top;\n      }\n    }\n  }, {\n    key: '_changeArrrowColors',\n    value: function _changeArrrowColors() {\n      var currentColor = this.flickity.selectedElement.querySelector('.slideshow-background').dataset;\n      var dots = this.el.querySelectorAll('.flickity-page-dots .dot');\n\n      if (layout.isBreakpoint('XS') && !this.isFullscreen) {\n        currentColor = currentColor.themecolor;\n      } else {\n        currentColor = currentColor.slidecolor;\n      }\n\n      this.el.querySelector('.flickity-prev-next-button.previous svg').style.fill = currentColor;\n      this.el.querySelector('.flickity-prev-next-button.next svg').style.fill = currentColor;\n\n      for (var i = 0; i < dots.length; i++) {\n        dots[i].style.background = currentColor;\n      }\n    }\n  }, {\n    key: '_slideshowHeight',\n    value: function _slideshowHeight() {\n      var headerHeight = getHeaderOffset(document.querySelector('.site-header-wrapper'));\n\n      if (this.isFullscreen) {\n        this.el.querySelector('.flickity-viewport').style.height = 'calc(100vh - ' + headerHeight + 'px)';\n        this.container.style.height = 'calc(100vh - ' + headerHeight + 'px)';\n      }\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this._destroyFlickity();\n      this.$window.off('.slideshow');\n      this.$firstSlideImage.off('rimg:load');\n    }\n  }, {\n    key: '_destroyFlickity',\n    value: function _destroyFlickity() {\n      if (!this.flickity) {\n        return;\n      }\n\n      this.flickity.destroy();\n    }\n  }, {\n    key: 'onSectionBlockSelect',\n    value: function onSectionBlockSelect(block) {\n      var _this3 = this;\n\n      setTimeout(function () {\n        _this3.flickity.resize();\n      }, 100);\n\n      if (this.settings.enable_autoplay) {\n        var $slides = jquery$1(this.slides);\n        var $slide = jquery$1(block.el);\n        var slideIndex = $slides.index($slide);\n\n        this.stopAutoplay = true;\n        this.flickity.pausePlayer();\n\n        if (!$slide.hasClass('is-selected') && !this.selectBlockOnLoad) {\n          this.flickity.select(slideIndex, false, false);\n        } else if (this.selectBlockOnLoad) {\n          this.flickity.select(slideIndex, false, true);\n        }\n      }\n    }\n  }, {\n    key: 'onSectionBlockDeselect',\n    value: function onSectionBlockDeselect() {\n      if (this.settings.enable_autoplay) {\n        this.stopAutoplay = false;\n        this.flickity.playPlayer();\n      }\n    }\n  }]);\n  return StaticSlideshow;\n}();\n\nvar DynamicPromoBlocks = function () {\n  function DynamicPromoBlocks(section) {\n    classCallCheck(this, DynamicPromoBlocks);\n\n    this.$el = jquery$1(section.el);\n    this.content = '[data-promo-block-content]';\n    this.expandedClass = 'promo-block--expanded';\n    this.compressBlocks = section.data.compress_blocks;\n\n    // Revert navigation to original state on breakpoint change\n    this.layoutHandler = this.onBreakpointChange.bind(this);\n    layout.onBreakpointChange(this.layoutHandler);\n\n    this._blockInteraction = this._blockInteraction.bind(this);\n\n    this.$el.on('click.promo-block', this.content, this._blockInteraction);\n  }\n\n  /**\n   * Remove block's toggled state and attributes when leaving mobile\n   */\n\n\n  createClass(DynamicPromoBlocks, [{\n    key: 'onBreakpointChange',\n    value: function onBreakpointChange() {\n      var _this = this;\n\n      if (!layout.isBreakpoint('XS')) {\n        this.$el.find('.' + this.expandedClass).each(function (i, content) {\n          _this._collapse(content);\n        });\n      }\n    }\n\n    /**\n     * Unbind events when section is re-drawn\n     */\n\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.$el.off('.promo-block');\n      layout.offBreakpointChange(this.layoutHandler);\n    }\n\n    /**\n     * Callback to open block on mobile from the TE\n     *\n     * @param block\n     */\n\n  }, {\n    key: 'onSectionBlockSelect',\n    value: function onSectionBlockSelect(block) {\n      if (!layout.isBreakpoint('XS')) return;\n\n      this._expand(block.el.querySelector(this.content));\n    }\n\n    /**\n     * Callback to close block on mobile from the TE\n     *\n     * @param block\n     */\n\n  }, {\n    key: 'onSectionBlockDeselect',\n    value: function onSectionBlockDeselect(block) {\n      if (!layout.isBreakpoint('XS')) return;\n\n      this._collapse(block.el.querySelector(this.content));\n    }\n\n    /**\n     * Expand a block on first click, then allow it to behave as normal\n     *\n     * @param event\n     * @private\n     */\n\n  }, {\n    key: '_blockInteraction',\n    value: function _blockInteraction(event) {\n      var content = event.currentTarget;\n      var clicked = content.getAttribute('data-clicked');\n\n      // On second click, or on desktop, don't interfere with block\n      if (clicked || !layout.isBreakpoint('XS') || !this.compressBlocks) {\n        return;\n      }\n\n      event.preventDefault();\n      content.setAttribute('data-clicked', 'clicked');\n\n      this._expand(content);\n    }\n\n    /**\n     * Expand promo block\n     *\n     * @param content\n     * @private\n     */\n\n  }, {\n    key: '_expand',\n    value: function _expand(content) {\n      var _this2 = this;\n\n      if (!this.compressBlocks) {\n        return;\n      }\n\n      var $content = jquery$1(content);\n\n      $content.addClass('animating animating-in').one('trend', function () {\n        $content.removeClass('animating animating-in').addClass(_this2.expandedClass).off('trend');\n      });\n    }\n\n    /**\n     * Collapse a block\n     *\n     * @param content\n     * @private\n     */\n\n  }, {\n    key: '_collapse',\n    value: function _collapse(content) {\n      var _this3 = this;\n\n      if (!this.compressBlocks) {\n        return;\n      }\n\n      var $content = jquery$1(content);\n\n      $content.addClass('animating animating-out').one('trend', function () {\n        $content.removeClass('animating animating-out ' + _this3.expandedClass).off('trend');\n        content.removeAttribute('data-clicked');\n      });\n    }\n  }]);\n  return DynamicPromoBlocks;\n}();\n\nvar DynamicMenuList = function () {\n  function DynamicMenuList(section) {\n    classCallCheck(this, DynamicMenuList);\n\n    this.$el = jquery$1(section.el);\n    this.context = section.data.context;\n    this.Accordion = new Accordion(this.$el);\n\n    // Handle Accordion interaction when window size changes\n    this.layoutHandler = this.onBreakpointChange.bind(this);\n    layout.onBreakpointChange(this.layoutHandler);\n\n    this._bindEvents();\n  }\n\n  createClass(DynamicMenuList, [{\n    key: '_bindEvents',\n    value: function _bindEvents() {\n      var _this = this;\n\n      this.$el.on('click.menu-list', '[data-accordion-trigger]', function (event) {\n        event.preventDefault();\n        _this._toggleAccordion(jquery$1(event.currentTarget).parent());\n      });\n\n      this.$el.on('click.menu-list', '[data-menulist-toggle]', function (event) {\n        event.preventDefault();\n        _this._toggleList(event.currentTarget);\n      });\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.$el.off('.menu-list');\n\n      delete this.Accordion;\n    }\n  }, {\n    key: 'onSectionBlockSelect',\n    value: function onSectionBlockSelect(block) {\n      this._toggleAccordion(jquery$1(block.el), true);\n    }\n  }, {\n    key: 'onSectionBlockDeselect',\n    value: function onSectionBlockDeselect(block) {\n      this._toggleAccordion(jquery$1(block.el), false);\n    }\n  }, {\n    key: '_toggleAccordion',\n    value: function _toggleAccordion($block) {\n      if (layout.isBreakpoint('L')) return;\n\n      this.Accordion.toggle($block);\n    }\n  }, {\n    key: '_toggleList',\n    value: function _toggleList(el) {\n      var $trigger = jquery$1(el);\n      var $items = $trigger.parent().siblings('[data-hidden-default]');\n      var siblingsVisible = $trigger.data('menulist-toggle');\n\n      $items.toggleClass('menulist--menu-item-hidden', siblingsVisible);\n      $trigger.data('menulist-toggle', !siblingsVisible).text(!siblingsVisible ? this.context.see_less : this.context.see_more);\n    }\n  }, {\n    key: 'onBreakpointChange',\n    value: function onBreakpointChange(event, breakpoints) {\n      if (layout.isBreakpoint('L')) {\n        this.Accordion.openAll();\n      } else if (breakpoints.previous === 'L' && !layout.isBreakpoint('L')) {\n        this.Accordion.closeOpen();\n      }\n    }\n  }]);\n  return DynamicMenuList;\n}();\n\nvar twitterFetcher_min = createCommonjsModule(function (module, exports) {\n/*********************************************************************\n*  #### Twitter Post Fetcher v17.0.3 ####\n*  Coded by Jason Mayes 2015. A present to all the developers out there.\n*  www.jasonmayes.com\n*  Please keep this disclaimer with my code if you use it. Thanks. :-)\n*  Got feedback or questions, ask here:\n*  http://www.jasonmayes.com/projects/twitterApi/\n*  Github: https://github.com/jasonmayes/Twitter-Post-Fetcher\n*  Updates will be posted to this site.\n*********************************************************************/\n(function(root,factory){if(typeof undefined==='function'&&undefined.amd){undefined([],factory);}else {module.exports=factory();}}(commonjsGlobal,function(){var domNode='';var maxTweets=20;var parseLinks=true;var queue=[];var inProgress=false;var printTime=true;var printUser=true;var formatterFunction=null;var supportsClassName=true;var showRts=true;var customCallbackFunction=null;var showInteractionLinks=true;var showImages=false;var useEmoji=false;var targetBlank=true;var lang='en';var permalinks=true;var dataOnly=false;var script=null;function handleTweets(tweets){if(customCallbackFunction===null){var x=tweets.length;var n=0;var element=document.getElementById(domNode);var html='<ul>';while(n<x){html+='<li>'+tweets[n]+'</li>';n++;}\nhtml+='</ul>';element.innerHTML=html;}else{customCallbackFunction(tweets);}}\nfunction strip(data){return data.replace(/<b[^>]*>(.*?)<\\/b>/gi,function(a,s){return s;}).replace(/class=\"(?!(tco-hidden|tco-display|tco-ellipsis))+.*?\"|data-query-source=\".*?\"|dir=\".*?\"|rel=\".*?\"/gi,'');}\nfunction targetLinksToNewWindow(el){var links=el.getElementsByTagName('a');for(var i=links.length-1;i>=0;i--){links[i].setAttribute('target','_blank');}}\nfunction getElementsByClassName(node,classname){var a=[];var regex=new RegExp('(^| )'+classname+'( |$)');var elems=node.getElementsByTagName('*');for(var i=0,j=elems.length;i<j;i++){if(regex.test(elems[i].className)){a.push(elems[i]);}}\nreturn a;}\nfunction extractImageUrl(image_data){if(image_data!==undefined&&image_data.innerHTML.indexOf('data-image')>=0){var data_src=image_data.innerHTML.match(/data-image=\\\"([A-z0-9]+:\\/\\/[A-z0-9]+\\.[A-z0-9]+\\.[A-z0-9]+\\/[A-z0-9]+\\/[A-z0-9\\-]+)/i)[1];return decodeURIComponent(data_src)+'.jpg';}}\nvar twitterFetcher={fetch:function(config){if(config.maxTweets===undefined){config.maxTweets=20;}\nif(config.enableLinks===undefined){config.enableLinks=true;}\nif(config.showUser===undefined){config.showUser=true;}\nif(config.showTime===undefined){config.showTime=true;}\nif(config.dateFunction===undefined){config.dateFunction='default';}\nif(config.showRetweet===undefined){config.showRetweet=true;}\nif(config.customCallback===undefined){config.customCallback=null;}\nif(config.showInteraction===undefined){config.showInteraction=true;}\nif(config.showImages===undefined){config.showImages=false;}\nif(config.useEmoji===undefined){config.useEmoji=false;}\nif(config.linksInNewWindow===undefined){config.linksInNewWindow=true;}\nif(config.showPermalinks===undefined){config.showPermalinks=true;}\nif(config.dataOnly===undefined){config.dataOnly=false;}\nif(inProgress){queue.push(config);}else{inProgress=true;domNode=config.domId;maxTweets=config.maxTweets;parseLinks=config.enableLinks;printUser=config.showUser;printTime=config.showTime;showRts=config.showRetweet;formatterFunction=config.dateFunction;customCallbackFunction=config.customCallback;showInteractionLinks=config.showInteraction;showImages=config.showImages;useEmoji=config.useEmoji;targetBlank=config.linksInNewWindow;permalinks=config.showPermalinks;dataOnly=config.dataOnly;var head=document.getElementsByTagName('head')[0];if(script!==null){head.removeChild(script);}\nscript=document.createElement('script');script.type='text/javascript';if(config.list!==undefined){script.src='https://syndication.twitter.com/timeline/list?'+'callback=__twttrf.callback&dnt=false&list_slug='+\nconfig.list.listSlug+'&screen_name='+config.list.screenName+'&suppress_response_codes=true&lang='+(config.lang||lang)+'&rnd='+Math.random();}else if(config.profile!==undefined){script.src='https://syndication.twitter.com/timeline/profile?'+'callback=__twttrf.callback&dnt=false'+'&screen_name='+config.profile.screenName+'&suppress_response_codes=true&lang='+(config.lang||lang)+'&rnd='+Math.random();}else if(config.likes!==undefined){script.src='https://syndication.twitter.com/timeline/likes?'+'callback=__twttrf.callback&dnt=false'+'&screen_name='+config.likes.screenName+'&suppress_response_codes=true&lang='+(config.lang||lang)+'&rnd='+Math.random();}else{script.src='https://cdn.syndication.twimg.com/widgets/timelines/'+\nconfig.id+'?&lang='+(config.lang||lang)+'&callback=__twttrf.callback&'+'suppress_response_codes=true&rnd='+Math.random();}\nhead.appendChild(script);}},callback:function(data){if(data===undefined||data.body===undefined){inProgress=false;if(queue.length>0){twitterFetcher.fetch(queue[0]);queue.splice(0,1);}\nreturn;}\nif(!useEmoji){data.body=data.body.replace(/(<img[^c]*class=\"Emoji[^>]*>)|(<img[^c]*class=\"u-block[^>]*>)/g,'');}\nif(!showImages){data.body=data.body.replace(/(<img[^c]*class=\"NaturalImage-image[^>]*>|(<img[^c]*class=\"CroppedImage-image[^>]*>))/g,'');}\nif(!printUser){data.body=data.body.replace(/(<img[^c]*class=\"Avatar\"[^>]*>)/g,'');}\nvar div=document.createElement('div');div.innerHTML=data.body;if(typeof(div.getElementsByClassName)==='undefined'){supportsClassName=false;}\nfunction swapDataSrc(element){var avatarImg=element.getElementsByTagName('img')[0];if(avatarImg && avatarImg.length){avatarImg.src=avatarImg.getAttribute('data-src-2x');}return element;}\nvar tweets=[];var authors=[];var times=[];var images=[];var rts=[];var tids=[];var permalinksURL=[];var x=0;if(supportsClassName){var tmp=div.getElementsByClassName('timeline-Tweet');while(x<tmp.length){if(tmp[x].getElementsByClassName('timeline-Tweet-retweetCredit').length>0){rts.push(true);}else{rts.push(false);}\nif(!rts[x]||rts[x]&&showRts){tweets.push(tmp[x].getElementsByClassName('timeline-Tweet-text')[0]);tids.push(tmp[x].getAttribute('data-tweet-id'));if(printUser){authors.push(swapDataSrc(tmp[x].getElementsByClassName('timeline-Tweet-author')[0]));}\ntimes.push(tmp[x].getElementsByClassName('dt-updated')[0]);permalinksURL.push(tmp[x].getElementsByClassName('timeline-Tweet-timestamp')[0]);if(tmp[x].getElementsByClassName('timeline-Tweet-media')[0]!==undefined){images.push(tmp[x].getElementsByClassName('timeline-Tweet-media')[0]);}else{images.push(undefined);}}\nx++;}}else{var tmp=getElementsByClassName(div,'timeline-Tweet');while(x<tmp.length){if(getElementsByClassName(tmp[x],'timeline-Tweet-retweetCredit').length>0){rts.push(true);}else{rts.push(false);}\nif(!rts[x]||rts[x]&&showRts){tweets.push(getElementsByClassName(tmp[x],'timeline-Tweet-text')[0]);tids.push(tmp[x].getAttribute('data-tweet-id'));if(printUser){authors.push(swapDataSrc(getElementsByClassName(tmp[x],'timeline-Tweet-author')[0]));}\ntimes.push(getElementsByClassName(tmp[x],'dt-updated')[0]);permalinksURL.push(getElementsByClassName(tmp[x],'timeline-Tweet-timestamp')[0]);if(getElementsByClassName(tmp[x],'timeline-Tweet-media')[0]!==undefined){images.push(getElementsByClassName(tmp[x],'timeline-Tweet-media')[0]);}else{images.push(undefined);}}\nx++;}}\nif(tweets.length>maxTweets){tweets.splice(maxTweets,(tweets.length-maxTweets));authors.splice(maxTweets,(authors.length-maxTweets));times.splice(maxTweets,(times.length-maxTweets));rts.splice(maxTweets,(rts.length-maxTweets));images.splice(maxTweets,(images.length-maxTweets));permalinksURL.splice(maxTweets,(permalinksURL.length-maxTweets));}\nvar arrayTweets=[];var x=tweets.length;var n=0;if(dataOnly){while(n<x){arrayTweets.push({tweet:tweets[n].innerHTML,author:authors[n]?authors[n].innerHTML:'Unknown Author',author_data:{profile_url:authors[n]?authors[n].querySelector('[data-scribe=\"element:user_link\"]').href:null,profile_image:authors[n]?authors[n].querySelector('[data-scribe=\"element:avatar\"]').getAttribute('data-src-1x'):null,profile_image_2x:authors[n]?authors[n].querySelector('[data-scribe=\"element:avatar\"]').getAttribute('data-src-2x'):null,screen_name:authors[n]?authors[n].querySelector('[data-scribe=\"element:screen_name\"]').title:null,name:authors[n]?authors[n].querySelector('[data-scribe=\"element:name\"]').title:null},time:times[n].textContent,timestamp:times[n].getAttribute('datetime').replace('+0000','Z').replace(/([\\+\\-])(\\d\\d)(\\d\\d)/,'$1$2:$3'),image:extractImageUrl(images[n]),rt:rts[n],tid:tids[n],permalinkURL:(permalinksURL[n]===undefined)?'':permalinksURL[n].href});n++;}}else{while(n<x){if(typeof(formatterFunction)!=='string'){var datetimeText=times[n].getAttribute('datetime');var newDate=new Date(times[n].getAttribute('datetime').replace(/-/g,'/').replace('T',' ').split('+')[0]);var dateString=formatterFunction(newDate,datetimeText);times[n].setAttribute('aria-label',dateString);if(tweets[n].textContent){if(supportsClassName){times[n].textContent=dateString;}else{var h=document.createElement('p');var t=document.createTextNode(dateString);h.appendChild(t);h.setAttribute('aria-label',dateString);times[n]=h;}}else{times[n].textContent=dateString;}}\nvar op='';if(parseLinks){if(targetBlank){targetLinksToNewWindow(tweets[n]);if(printUser){targetLinksToNewWindow(authors[n]);}}\nif(printUser){op+='<div class=\"user\">'+strip(authors[n].innerHTML)+'</div>';}\nop+='<p class=\"tweet\">'+strip(tweets[n].innerHTML)+'</p>';if(printTime){if(permalinks){op+='<p class=\"timePosted\"><a href=\"'+permalinksURL[n]+'\">'+times[n].getAttribute('aria-label')+'</a></p>';}else{op+='<p class=\"timePosted\">'+\ntimes[n].getAttribute('aria-label')+'</p>';}}}else{if(tweets[n].textContent){if(printUser){op+='<p class=\"user\">'+authors[n].textContent+'</p>';}\nop+='<p class=\"tweet\">'+tweets[n].textContent+'</p>';if(printTime){op+='<p class=\"timePosted\">'+times[n].textContent+'</p>';}}else{if(printUser){op+='<p class=\"user\">'+authors[n].textContent+'</p>';}\nop+='<p class=\"tweet\">'+tweets[n].textContent+'</p>';if(printTime){op+='<p class=\"timePosted\">'+times[n].textContent+'</p>';}}}\nif(showInteractionLinks){op+='<p class=\"interact\"><a href=\"https://twitter.com/intent/'+'tweet?in_reply_to='+tids[n]+'\" class=\"twitter_reply_icon\"'+\n(targetBlank?' target=\"_blank\">':'>')+'Reply</a><a href=\"https://twitter.com/intent/retweet?'+'tweet_id='+tids[n]+'\" class=\"twitter_retweet_icon\"'+\n(targetBlank?' target=\"_blank\">':'>')+'Retweet</a>'+'<a href=\"https://twitter.com/intent/favorite?tweet_id='+\ntids[n]+'\" class=\"twitter_fav_icon\"'+\n(targetBlank?' target=\"_blank\">':'>')+'Favorite</a></p>';}\nif(showImages&&images[n]!==undefined&&extractImageUrl(images[n])!==undefined){op+='<div class=\"media\">'+'<img src=\"'+extractImageUrl(images[n])+'\" alt=\"Image from tweet\" />'+'</div>';}\nif(showImages){arrayTweets.push(op);}else if(!showImages&&tweets[n].textContent.length){arrayTweets.push(op);}\nn++;}}\nhandleTweets(arrayTweets);inProgress=false;if(queue.length>0){twitterFetcher.fetch(queue[0]);queue.splice(0,1);}}};window.__twttrf=twitterFetcher;window.twitterFetcher=twitterFetcher;return twitterFetcher;}));\n});\n\nvar DynamicTwitterFeed$1 = function () {\n  function DynamicTwitterFeed(section) {\n    var _this = this;\n\n    classCallCheck(this, DynamicTwitterFeed);\n\n    this.$el = jquery$1(section.el);\n    this.settings = section.data;\n    this.$window = jquery$1(window);\n    this.isIE9 = jquery$1('body').hasClass('ie9');\n    this.flickity = null;\n\n    this.$content = this.$el.find('[data-twitter-content]');\n    this.$wrapper = this.$el.find('[data-twitter-wrapper]');\n    this.$tweets = this.$el.find('[data-tweet-content]');\n\n    this.$wrapper.on('rimg:enter', function (event) {\n      _this._load();\n    });\n\n    state.instance.track(this.$wrapper[0]);\n  }\n\n  createClass(DynamicTwitterFeed, [{\n    key: '_load',\n    value: function _load() {\n      var _this2 = this;\n\n      this.$template = jquery$1(this.settings.template);\n\n      var onboarding = this.settings.onboarding;\n      var username = this.settings.username;\n      var retweets = this.settings.retweets;\n      var images = this.settings.images;\n      var locale = this.settings.locale || 'en';\n\n      // Activate flickity on mobile\n      this._mobileSlider = this._mobileSlider.bind(this);\n      layout.onBreakpointChange(this._mobileSlider);\n      this._mobileSlider();\n\n      this._evenHeights = this._evenHeights.bind(this);\n      this._evenHeights();\n\n      if (onboarding || !username) {\n        return;\n      }\n\n      this.$window.on('resize.twitter', justDebounce$1(function () {\n        return _this2._evenHeights;\n      }, 16, true, true));\n\n      twitterFetcher_min.fetch({\n        'profile': { 'screenName': username },\n        'maxTweets': 3,\n        'enableLinks': true,\n        'showUser': true,\n        'showTime': true,\n        'dataOnly': false,\n        'useEmoji': true,\n        'showImages': images,\n        'showRetweet': retweets,\n        'lang': locale,\n        'customCallback': function customCallback(tweets) {\n          return _this2._renderTweets(tweets);\n        },\n        'showInteraction': false\n      });\n    }\n\n    /**\n     * Unbind events when section is re-drawn\n     */\n\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      state.instance.untrack(this.$wrapper[0]);\n      this.$window.off('.twitter');\n      this.$content.off('.twitter');\n\n      layout.offBreakpointChange(this._mobileSlider);\n      this._destroyFlickity();\n    }\n\n    /**\n     * Evens the height of the twitter blocks if the browser doesn't support Flexbox\n     * @private\n     */\n\n  }, {\n    key: '_evenHeights',\n    value: function _evenHeights() {\n      if (!this.isIE9) {\n        return;\n      }\n\n      var heights = [];\n      this.$tweets.height('');\n\n      this.$tweets.each(function (i, el) {\n        var $el = jquery$1(el);\n        heights.push($el.outerHeight());\n      });\n\n      this.$tweets.height(Math.ceil(Math.max.apply(null, heights)));\n    }\n  }, {\n    key: '_initFlickity',\n    value: function _initFlickity() {\n      this.flickity = new js$1(this.$content[0], {\n        cellSelector: '[data-tweet-content]',\n        contain: true,\n        freeScroll: true,\n        percentPosition: false,\n        prevNextButtons: false,\n        pageDots: false,\n        setGallerySize: false\n      });\n\n      this._bindSlider();\n    }\n  }, {\n    key: '_destroyFlickity',\n    value: function _destroyFlickity() {\n      if (!this.flickity) {\n        return;\n      }\n\n      this.flickity.destroy();\n      this.flickity = null;\n    }\n  }, {\n    key: '_mobileSlider',\n    value: function _mobileSlider() {\n      // If is Large layout, attempt to destroy flickity\n      if (layout.isBreakpoint('L')) {\n        this._destroyFlickity();\n        return;\n      }\n\n      // Is XS/S/M, and flickity is init'd -- do nothing\n      if (this.flickity) {\n        return;\n      }\n\n      // Is XS/S/M, and flickity is not init'd\n      this._initFlickity();\n    }\n  }, {\n    key: '_bindSlider',\n    value: function _bindSlider() {\n      var _this3 = this;\n\n      var $slider = this.$content.find('.flickity-slider');\n\n      this.$window.on('resize.twitter', justDebounce$1(function () {\n        _this3.$content.trigger('heightUpdate.twitter');\n      }));\n\n      this.flickity.on('cellSelect', function () {\n        _this3.$content.trigger('heightUpdate.twitter');\n      });\n\n      this.$content.on('heightUpdate.twitter', function () {\n        if (!_this3.flickity) {\n          return;\n        }\n\n        $slider.height(Math.ceil(_this3.flickity.maxCellHeight));\n      });\n\n      // Sets the Slider to the height of the first slide\n      this.$content.trigger('heightUpdate.twitter');\n    }\n\n    /**\n     * Retrieve information about user who tweeted\n     *\n     * @param el\n     * @returns {{$avatar: *, link: *, name, screenName}}\n     * @private\n     */\n\n  }, {\n    key: '_extractAuthor',\n    value: function _extractAuthor(el) {\n      var $el = jquery$1(el);\n\n      var link = $el.find('a').attr('href');\n      var name = $el.find('[data-scribe=\"element:name\"]').text();\n      var screenName = $el.find('[data-scribe=\"element:screen_name\"]').text();\n      var $avatar = $el.find('img');\n\n      return { $avatar: $avatar, link: link, name: name, screenName: screenName };\n    }\n\n    /**\n     * Retrieve link to tweet, and when it was tweeted\n     *\n     * @param el\n     * @returns {{link: *, postedAt: *}}\n     * @private\n     */\n\n  }, {\n    key: '_extractMeta',\n    value: function _extractMeta(el) {\n      var $el = jquery$1(el);\n\n      var link = $el.find('a').attr('href');\n      var postedAt = $el.text();\n\n      return { link: link, postedAt: postedAt };\n    }\n  }, {\n    key: '_extractWrapperClass',\n    value: function _extractWrapperClass() {\n      var wrapperClass = this.$wrapper.attr('class').match(/tweet--count-\\d+$/);\n\n      if (wrapperClass) {\n        return wrapperClass[0];\n      } else {\n        return '';\n      }\n    }\n  }, {\n    key: '_renderTweets',\n    value: function _renderTweets(tweets) {\n      var _this4 = this;\n\n      var tweetsLength = tweets.length;\n\n      if (!tweets || !tweetsLength) return;\n\n      var tweetsArray = [];\n      var wrapperClass = 'tweet--count-' + tweetsLength;\n\n      tweets.forEach(function (tweet) {\n        var $tweet = jquery$1(tweet);\n\n        var $template = _this4.$template.clone();\n        var authorInfo = _this4._extractAuthor($tweet[0]);\n        var meta = _this4._extractMeta($tweet[2]);\n\n        var content = $tweet[1];\n\n        // Render header\n        $template.find('.tweet--header').attr('href', authorInfo.link);\n\n        $template.find('.tweet--header-image').html(authorInfo.$avatar);\n\n        $template.find('.tweet--header-name').text(authorInfo.name);\n\n        $template.find('.tweet--header-screenname').text(authorInfo.screenName);\n\n        // Render content\n        $template.find('.tweet--content').append($tweet[3] ? $tweet[3] : null).append(content);\n\n        // Render footer\n        $template.find('.tweet--footer').attr('href', meta.link).find('.tweet--footer--posted').text(meta.postedAt);\n\n        tweetsArray.push($template);\n      });\n\n      this.$wrapper.css('min-height', this.$wrapper.height());\n\n      this.$tweets.fadeOut().promise().then(function () {\n        _this4._destroyFlickity();\n        _this4.$tweets.remove();\n\n        _this4.$content.append(tweetsArray);\n\n        _this4.$wrapper.removeClass(_this4._extractWrapperClass()).addClass(wrapperClass).css('min-height', '');\n\n        _this4.$tweets = _this4.$el.find('[data-tweet-content]');\n\n        _this4._evenHeights();\n        _this4._mobileSlider();\n      });\n    }\n  }]);\n  return DynamicTwitterFeed;\n}();\n\nvar DynamicInstagramFeed = function () {\n  function DynamicInstagramFeed(section) {\n    var _this = this;\n\n    classCallCheck(this, DynamicInstagramFeed);\n\n    this.settings = section.data;\n    this.onboarding = this.settings.onboarding;\n    this.photoCount = this.settings.photo_count;\n    this.accessToken = this.settings.access_token;\n\n    this.$el = jquery$1(section.el);\n    this.$window = jquery$1(window);\n    this.$photoContainer = this.$el.find('[data-instagram-content]');\n    this.$photoContainerPlaceholder = this.$el.find('[data-instagram-photo-placeholder]');\n\n    this.$photoTemplate = jquery$1('<figure class=\"instagram--photo\" data-instagram-photo />');\n\n    this.$photoContainer.on('rimg:enter', function (event) {\n      _this._load();\n    });\n\n    state.instance.track(this.$photoContainer[0]);\n  }\n\n  createClass(DynamicInstagramFeed, [{\n    key: '_load',\n    value: function _load() {\n      var _this2 = this;\n\n      // Activate flickity on mobile\n      this._mobileSlider = this._mobileSlider.bind(this);\n      layout.onBreakpointChange(this._mobileSlider);\n      this._mobileSlider();\n\n      if (this.onboarding || !this.accessToken) {\n        return;\n      }\n\n      this._getPhotos().done(function (photos) {\n        return _this2._renderPhotos(photos);\n      }).fail(function (error) {\n        console.warn('Instagram: ' + error);\n      });\n    }\n  }, {\n    key: '_getPhotos',\n    value: function _getPhotos() {\n      var url = 'https://api.instagram.com/v1/users/self/media/recent?access_token=' + this.accessToken + '&count=' + this.photoCount + '&callback=';\n      var photoPromise = jquery$1.ajax(url, {\n        dataType: 'jsonp'\n      });\n\n      return photoPromise.then(function (response) {\n        if (response.meta.code !== 200) {\n          var error = response.meta.error_message + ' (' + response.meta.error_type + ')';\n          return jquery$1.Deferred().reject(error).promise();\n        }\n\n        return response.data;\n      });\n    }\n  }, {\n    key: '_renderPhotos',\n    value: function _renderPhotos(photos) {\n      var _this3 = this;\n\n      var photoArray = [];\n\n      photos.forEach(function (photo) {\n        var $template = _this3.$photoTemplate.clone();\n        var lowResolution = photo.images.low_resolution;\n        var standardResolution = photo.images.standard_resolution;\n\n        var $link = jquery$1('<a target=\"_blank\" href=\"' + photo.link + '\"></a>');\n        var $photo = jquery$1('<img src=\"' + lowResolution.url + '\">');\n\n        if (standardResolution.width >= lowResolution.width * 2) {\n          $photo.attr('srcset', standardResolution.url + ' 2x');\n        } else {\n          $photo.attr('src', '' + standardResolution.url);\n        }\n\n        $link.append($photo);\n        $template.append($link);\n\n        photoArray.push($template);\n      });\n\n      this.$photoContainerPlaceholder.fadeOut(function () {\n        _this3._destroyFlickity();\n        _this3.$photoContainer.append(photoArray);\n        _this3.$photoContainerPlaceholder.remove();\n        _this3._mobileSlider();\n      });\n    }\n  }, {\n    key: '_initFlickity',\n    value: function _initFlickity() {\n      this.flickity = new js$1(this.$photoContainer[0], {\n        cellSelector: '.instagram--photo',\n        contain: true,\n        freeScroll: true,\n        percentPosition: false,\n        prevNextButtons: false,\n        pageDots: false,\n        setGallerySize: false\n      });\n\n      this._bindSlider();\n    }\n  }, {\n    key: '_destroyFlickity',\n    value: function _destroyFlickity() {\n      if (!this.flickity) {\n        return;\n      }\n\n      this.$window.off('.instagram-feed');\n      this.$photoContainer.off('.instagram-feed');\n      this.flickity.destroy();\n      this.flickity = null;\n    }\n  }, {\n    key: '_mobileSlider',\n    value: function _mobileSlider() {\n      // If is Large layout, attempt to destroy flickity\n      if (layout.isBreakpoint('L') || layout.isBreakpoint('M')) {\n        this._destroyFlickity();\n        return;\n      }\n\n      // Is XS/S/M, and flickity is init'd -- do nothing\n      if (this.flickity) {\n        return;\n      }\n\n      // Is XS/S/M, and flickity is not init'd\n      this._initFlickity();\n    }\n  }, {\n    key: '_bindSlider',\n    value: function _bindSlider() {\n      var _this4 = this;\n\n      var $slider = this.$photoContainer.find('.flickity-slider');\n\n      this.$window.on('resize.instagram-feed', justDebounce$1(function () {\n        _this4.$photoContainer.trigger('heightUpdate.instagram-feed');\n      }));\n\n      this.flickity.on('cellSelect', function () {\n        _this4.$photoContainer.trigger('heightUpdate.instagram-feed');\n      });\n\n      this.$photoContainer.on('heightUpdate.instagram-feed', function () {\n        if (!_this4.flickity) {\n          return;\n        }\n\n        $slider.height(Math.ceil(_this4.flickity.maxCellHeight));\n      });\n\n      // Sets the Slider to the height of the first slide\n      this.$photoContainer.trigger('heightUpdate.instagram-feed');\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      state.instance.untrack(this.$photoContainer[0]);\n    }\n  }]);\n  return DynamicInstagramFeed;\n}();\n\nvar DynamicFeaturedCollection = function () {\n  function DynamicFeaturedCollection(section) {\n    var _this = this;\n\n    classCallCheck(this, DynamicFeaturedCollection);\n\n    this.section = section;\n    this.$el = jquery$1(section.el);\n\n    // Product items\n    this.productItems = [];\n    var $productItems = this.$el.find('[data-product-item]');\n\n    $productItems.each(function (i, productItem) {\n      _this.productItems.push(new ProductGridItem(jquery$1(productItem)));\n    });\n\n    this.ProductRowScroller = new ProductRowScroller(section.el.querySelector('[data-product-row]'));\n\n    this._updatePrices();\n  }\n\n  createClass(DynamicFeaturedCollection, [{\n    key: '_updatePrices',\n    value: function _updatePrices() {\n      this.$el.find('.money').each(function (index, el) {\n        return dist$2.update(el);\n      });\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.productItems.forEach(function (productItem) {\n        productItem.unload();\n      });\n\n      this.ProductRowScroller.unload();\n    }\n  }]);\n  return DynamicFeaturedCollection;\n}();\n\nvar DynamicSearch = function () {\n  function DynamicSearch(section) {\n    var _this = this;\n\n    classCallCheck(this, DynamicSearch);\n\n    this.$el = jquery$1(section.el);\n    this.settings = section.data.settings;\n    this.search = null;\n\n    this.$scripts = jquery$1('[data-scripts]');\n\n    this.$searchField = this.$el.find('[data-live-search]');\n\n    this.forms = new Forms(this.$el);\n\n    if (this.settings.live_search.enable) {\n      script$1(this.$scripts.data('shopify-api-url'), function () {\n        _this.search = new LiveSearch({\n          $el: _this.$searchField,\n          $header: _this.$el\n        }, _this.settings.live_search);\n      });\n    } else {\n      this.search = new SearchForm(this.$searchField);\n    }\n  }\n\n  createClass(DynamicSearch, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.search.unload();\n      this.forms.unload();\n    }\n  }]);\n  return DynamicSearch;\n}();\n\nvar DynamicTwitterFeed$3 = function () {\n  function DynamicTwitterFeed(section) {\n    var _this = this;\n\n    classCallCheck(this, DynamicTwitterFeed);\n\n    this.$el = jquery$1(section.el);\n\n    this.rte = [];\n    this.$el.find('[data-rte]').each(function (i, el) {\n      _this.rte.push(new RichText(jquery$1(el)));\n    });\n  }\n\n  /**\n   * Unbind events when section is re-drawn\n   */\n\n\n  createClass(DynamicTwitterFeed, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.rte.forEach(function (richTextArea) {\n        richTextArea.unload();\n      });\n    }\n  }]);\n  return DynamicTwitterFeed;\n}();\n\nvar DynamicVideo = function () {\n  function DynamicVideo(section) {\n    classCallCheck(this, DynamicVideo);\n\n    var videoEl = section.el.querySelector('[data-video]');\n    this.$el = section.el;\n\n    this.autoplay = section.data.autoplay;\n    this.hasPlayed = false;\n\n    if (videoEl) {\n      this.video = new Video(videoEl);\n      this.bindEvents();\n    }\n  }\n\n  createClass(DynamicVideo, [{\n    key: 'bindEvents',\n    value: function bindEvents() {\n      var _this = this;\n\n      window.addEventListener('scroll', function () {\n        if (_this.autoplay) {\n          var rect = _this.$el.getBoundingClientRect();\n\n          if (rect.top >= 0 || rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)) {\n            if (!_this.hasPlayed) {\n              _this.video._autoplay();\n              _this.hasPlayed = true;\n            }\n          } else {\n            _this.video._onPauseClick();\n          }\n        }\n      });\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      if (this.video) {\n        this.video.unload();\n      }\n    }\n  }]);\n  return DynamicVideo;\n}();\n\nvar DynamicNewsletter = function () {\n  function DynamicNewsletter(section) {\n    classCallCheck(this, DynamicNewsletter);\n\n    this.$el = jquery$1(section.el);\n\n    this.forms = new Forms(this.$el);\n  }\n\n  createClass(DynamicNewsletter, [{\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      this.forms.unload();\n    }\n  }]);\n  return DynamicNewsletter;\n}();\n\n/*!\n * pxs-map v2.0.1\n * (c) 2018 undefined\n */\n\nvar justDebounce$2 = debounce$2;\n\nfunction debounce$2(fn, delay, at_start, guarantee) {\n  var timeout;\n  var args;\n  var self;\n\n  return function debounced() {\n    self = this;\n    args = Array.prototype.slice.call(arguments);\n\n    if (timeout && (at_start || guarantee)) {\n      return;\n    } else if (!at_start) {\n      clear();\n\n      timeout = setTimeout(run, delay);\n      return timeout;\n    }\n\n    timeout = setTimeout(clear, delay);\n    fn.apply(self, args);\n\n    function run() {\n      clear();\n      fn.apply(self, args);\n    }\n\n    function clear() {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n}\n\nvar classCallCheck$4 = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass$4 = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar PxsMap = function () {\n  function PxsMap(section) {\n    var _this = this;\n\n    classCallCheck$4(this, PxsMap);\n\n    this.$el = jquery$1('[data-map]', section.el);\n    this.settings = section.data;\n    this.map = null;\n    this.center = null;\n\n    this.$container = jquery$1('[data-map-container]', this.$el);\n\n    // Scale so range is 12 ~ 17, rather than 1 to 6\n    this.zoom = 11 + parseInt(this.settings.zoom, 10);\n    if (isNaN(this.zoom)) this.zoom = 13;\n\n    this.colors = null;\n\n    if (this.settings.colors) {\n      this.colors = this.settings.colors;\n    }\n\n    this.resize = this.resize.bind(this);\n\n    this.address = this.settings.address;\n    this.apiKey = this.settings.api_key;\n\n    if (this.apiKey) {\n      if (window.googleMaps === undefined) {\n        script$1('https://maps.googleapis.com/maps/api/js?key=' + this.apiKey, function () {\n          window.googleMaps = true;\n          _this._createMap();\n        });\n      } else {\n        this._createMap();\n      }\n    }\n  }\n\n  createClass$4(PxsMap, [{\n    key: '_createMap',\n    value: function _createMap() {\n      var _this2 = this;\n\n      return this.geolocate().done(function (results) {\n        _this2.map = new google.maps.Map(_this2.$container.get(0), {\n          center: results[0].geometry.location,\n          clickableIcons: false,\n          disableDefaultUI: true,\n          disableDoubleClickZoom: true,\n          gestureHandling: 'none',\n          keyboardShortcuts: false,\n          maxZoom: _this2.zoom,\n          minZoom: _this2.zoom,\n          scrollWheel: false,\n          styles: _this2._getMapStyles(),\n          zoom: _this2.zoom,\n          zoomControl: false\n        });\n        _this2.center = _this2.map.getCenter();\n        _this2.map.panBy(0, 0);\n\n        new google.maps.Marker({\n          clickable: false,\n          map: _this2.map,\n          position: _this2.center\n        });\n\n        google.maps.event.addDomListener(window, 'resize', justDebounce$2(_this2.resize, 250, true, true));\n      }).fail(function (status) {\n        var usageLimits = 'https://developers.google.com/maps/faq#usagelimits';\n        var errorMessage = void 0;\n\n        switch (status) {\n          case 'ZERO_RESULTS':\n            errorMessage = '<p>Unable to find the address:</p> ' + _this2.address;\n            break;\n          case 'OVER_QUERY_LIMIT':\n            errorMessage = '\\n              <p>Unable to load Google Maps, you have reached your usage limit.</p>\\n              <p>\\n                Please visit\\n                <a href=\"' + usageLimits + '\" target=\"_blank\">' + usageLimits + '</a>\\n                for more details.\\n              </p>\\n            ';\n            break;\n          default:\n            errorMessage = 'Unable to load Google Maps.';\n            break;\n        }\n\n        _this2.displayErrorInThemeEditor(errorMessage, status);\n      });\n    }\n  }, {\n    key: 'geolocate',\n    value: function geolocate() {\n      var deferred = jquery$1.Deferred();\n      var geocoder = new google.maps.Geocoder();\n\n      geocoder.geocode({ address: this.address }, function (results, status) {\n        if (status !== google.maps.GeocoderStatus.OK) {\n          deferred.reject(status);\n        }\n\n        deferred.resolve(results);\n      });\n\n      return deferred;\n    }\n  }, {\n    key: 'resize',\n    value: function resize() {\n      if (this.map) {\n        google.maps.event.trigger(this.map, 'resize');\n        this.map.setCenter(this.center);\n        this.map.panBy(0, 100);\n      }\n    }\n  }, {\n    key: 'onSectionUnload',\n    value: function onSectionUnload() {\n      if (this.map) {\n        google.maps.event.clearListeners(this.map, 'resize');\n      }\n    }\n  }, {\n    key: '_getMapStyles',\n    value: function _getMapStyles() {\n      if (!this.colors) {\n        return;\n      }\n\n      return [{ elementType: 'geometry', stylers: [{ color: this.colors.e }] }, { elementType: 'labels.icon', stylers: [{ visibility: 'off' }] }, { elementType: 'labels.text.fill', stylers: [{ color: this.colors.a }] }, { elementType: 'labels.text.stroke', stylers: [{ color: this.colors.e }] }, { featureType: 'administrative', elementType: 'geometry', stylers: [{ visibility: 'off' }] }, { featureType: 'administrative.country', stylers: [{ visibility: 'off' }] }, { featureType: 'administrative.land_parcel', stylers: [{ visibility: 'off' }] }, { featureType: 'administrative.neighborhood', stylers: [{ visibility: 'off' }] }, { featureType: 'administrative.locality', stylers: [{ visibility: 'off' }] }, { featureType: 'poi', stylers: [{ visibility: 'off' }] }, { featureType: 'road', elementType: 'geometry.fill', stylers: [{ color: this.colors.d }] }, { featureType: 'road', elementType: 'labels.icon', stylers: [{ visibility: 'off' }] }, { featureType: 'road.arterial', elementType: 'geometry', stylers: [{ color: this.colors.c }] }, { featureType: 'road.highway', elementType: 'geometry', stylers: [{ color: this.colors.b }] }, { featureType: 'road.highway.controlled_access', stylers: [{ visibility: 'off' }] }, { featureType: 'road.local', elementType: 'labels.text.fill', stylers: [{ color: this.colors.b }] }, { featureType: 'road.local', elementType: 'labels.text.stroke', stylers: [{ color: this.colors.e }] }, { featureType: 'transit', stylers: [{ visibility: 'off' }] }, { featureType: 'water', elementType: 'geometry', stylers: [{ color: this.colors.f }] }];\n    }\n  }, {\n    key: 'displayErrorInThemeEditor',\n    value: function displayErrorInThemeEditor(errorMessage) {\n      var isThemeEditor = window.Shopify && window.Shopify.designMode;\n\n      if (!isThemeEditor) {\n        return;\n      }\n\n      this.$container.html('<div class=\"map-error-message\">' + errorMessage + '</div>');\n    }\n  }]);\n  return PxsMap;\n}();\n\n// jQuery plugins\n// Global imports\n// Responsive Images\n// Template imports\n// Section imports\nstate.init();\n\nvar sections = new Sections();\n   bcSections = Sections;\n   bcStaticCollection = (typeof StaticCollection !== 'undefined') ? StaticCollection : StaticCollection_StaticCollection;\n  \nbcSections = Sections;\nbcStaticCollection = StaticCollection;\n\nsections.register('static-header', function (section) {\n  return new StaticSectionHeader(section);\n});\nsections.register('static-footer', function (section) {\n  return new StaticSectionFooter(section);\n});\nsections.register('static-article', function (section) {\n  return new StaticArticle(section);\n});\nsections.register('static-blog', function (section) {\n  return new StaticBlog(section);\n});\nsections.register('static-cart', function (section) {\n  return new StaticCart(section);\n});\nsections.register('static-collection', function (section) {\n  return new StaticCollection(section);\n});\nsections.register('static-giftcard', function (section) {\n  return new StaticGiftcard(section);\n});\nsections.register('static-password', function (section) {\n  return new StaticPassword(section);\n});\nsections.register('static-product', function (section) {\n  return new StaticProduct(section);\n});\nsections.register('static-search', function (section) {\n  return new StaticSearch(section);\n});\nsections.register('dynamic-blog-posts', function (section) {\n  return new DynamicTwitterFeed(section);\n});\nsections.register('static-highlights-banners', function (section) {\n  return new StaticHighlightsBanners(section);\n});\nsections.register('static-slideshow', function (section) {\n  return new StaticSlideshow(section);\n});\nsections.register('dynamic-promo-mosaic', function (section) {\n  return new DynamicPromoBlocks(section);\n});\nsections.register('dynamic-promo-grid', function (section) {\n  return new DynamicPromoBlocks(section);\n});\nsections.register('dynamic-menu-list', function (section) {\n  return new DynamicMenuList(section);\n});\nsections.register('dynamic-twitter-feed', function (section) {\n  return new DynamicTwitterFeed$1(section);\n});\nsections.register('dynamic-instagram-feed', function (section) {\n  return new DynamicInstagramFeed(section);\n});\nsections.register('dynamic-featured-collection', function (section) {\n  return new DynamicFeaturedCollection(section);\n});\nsections.register('dynamic-featured-product', function (section) {\n  return new StaticProduct(section);\n});\nsections.register('dynamic-rich-text', function (section) {\n  return new DynamicTwitterFeed$3(section);\n});\nsections.register('dynamic-search', function (section) {\n  return new DynamicSearch(section);\n});\nsections.register('dynamic-video', function (section) {\n  return new DynamicVideo(section);\n});\nsections.register('pxs-newsletter', function (section) {\n  return new DynamicNewsletter(section);\n});\nsections.register('pxs-map', function (section) {\n  return new PxsMap(section);\n});\n\nnew Account();\nnew Contact();\nnew Page();\n\n}());\n//# sourceMappingURL=empire.js.map?1534895592431\n\n\nfunction QuoteCheckout(){\n localStorage.setItem(\"AlexCookie\",\"1\");\n $(\"#checkout\").trigger(\"click\");\n}\n\n\n$('#print-text').hover(function(e) {\n    $('.print-button').trigger(e.type);\n})\n\n\n$(function() {\n  $(\".open-search\").click(\n    function(){\n  \t  $(\".live-search\").toggle();\n    }\n  );\n  \n});\n\n"],
  "mappings": "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CA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,oBAChC,EACA,IAAK,CACH,aAAgB,0BAChB,2BAA8B,6BAChC,EACA,IAAK,CACH,aAAgB,mBAChB,2BAA8B,sBAChC,EACA,IAAK,CACH,aAAgB,mCAChB,2BAA8B,sCAChC,EACA,IAAK,CACH,aAAgB,0CAChB,2BAA8B,6CAChC,EACA,IAAK,CACH,aAAgB,qCAChB,2BAA8B,wCAChC,EACA,IAAK,CACH,aAAgB,0CAChB,2BAA8B,yCAChC,EACA,IAAK,CACH,aAAgB,kCAChB,2BAA8B,oCAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,kDAChB,2BAA8B,iDAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,sBAChB,2BAA8B,qBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB,8CAChB,2BAA8B,gDAChC,EACA,IAAK,CACH,aAAgB,4BAChB,2BAA8B,+BAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,kCAChB,2BAA8B,oCAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,+BAChB,2BAA8B,kCAChC,EACA,IAAK,CACH,aAAgB,oBAChB,2BAA8B,uBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,yBAChB,2BAA8B,wBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,qBAChB,2BAA8B,wBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,gCAChB,2BAA8B,mCAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,mBAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,gCAChB,2BAA8B,4BAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,mBAChB,2BAA8B,qBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,oBAChB,2BAA8B,uBAChC,EACA,IAAK,CACH,aAAgB,qCAChB,2BAA8B,wCAChC,EACA,IAAK,CACH,aAAgB,sCAChB,2BAA8B,qCAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,kDAChB,2BAA8B,qDAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,oBAChC,EACA,IAAK,CACH,aAAgB,oBAChB,2BAA8B,uBAChC,EACA,IAAK,CACH,aAAgB,qCAChB,2BAA8B,wCAChC,EACA,IAAK,CACH,aAAgB,sCAChB,2BAA8B,qCAChC,EACA,IAAK,CACH,aAAgB,sCAChB,2BAA8B,yCAChC,EACA,IAAK,CACH,aAAgB,uDAChB,2BAA8B,0DAChC,EACA,IAAK,CACH,aAAgB,4BAChB,2BAA8B,4BAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,oBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,qBAChB,2BAA8B,wBAChC,EACA,IAAK,CACH,aAAgB,eAChB,2BAA8B,kBAChC,EACA,IAAK,CACH,aAAgB,gCAChB,2BAA8B,mCAChC,EACA,IAAK,CACH,aAAgB,gBAChB,2BAA8B,mBAChC,EACA,IAAK,CACH,aAAgB,4BAChB,2BAA8B,+BAChC,EACA,IAAK,CACH,aAAgB,kBAChB,2BAA8B,qBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,qBAChB,2BAA8B,wBAChC,EACA,IAAK,CACH,aAAgB,iBAChB,2BAA8B,gBAChC,EACA,IAAK,CACH,aAAgB,cAChB,2BAA8B,iBAChC,EACA,IAAK,CACH,aAAgB,aAChB,2BAA8B,eAChC,EACA,IAAK,CACH,aAAgB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",
  "names": ["global", "window", "document", "jQuery", "arr", "support", "hasOwn", "push", "slice", "indexOf", "i", "rtrim", "rquickExpr", "Sizzle", "matches", "documentElement", "node", "nodeName", "dir", "isXML", "elem", "self", "init", "selectors", "value", "state", "deferred", "key", "getData", "data", "wrap", "event", "styles", "name", "index", "length", "j", "location", "val", "completed", "method", "type", "$", "duration", "getSize", "utils", "console", "cell", "getComputedStyle", "slide", "flickity", "IntersectionObserver", "api", "selector", "arg", "Quantity", "Forms", "Account", "Contact", "TabsLayout", "trigger", "AccordionLayout", "GroupedContent", "layout", "RichText", "Page", "Sections", "CurrencyConverter", "scripts", "s", "StickyHeader", "Accordion", "NavMobileSubMenus", "NavMobile", "MegaNavScroller", "NavDesktop", "undefined", "isArray", "Search", "SearchForm", "LiveSearch", "StaticSectionHeader", "StaticSectionFooter", "StaticArticle", "StaticBlog", "MessageBanner", "StaticCart", "shippingAddress", "exports", "defaults", "addClass", "removeClass", "VanillaModal", "css", "closeTransitionHandler", "Modal", "Node", "ProductOptions", "VariantHelper", "Images", "AddToCartFlyout", "response", "Youtube", "Video", "Pixelzoom", "scrollLeft", "ProductZoom", "ProductGallery", "ProductDetails", "ProductQuickshop", "ProductGridItem", "RecentlyViewed", "SelectWidth", "StaticCollection", "StaticGiftcard", "StaticPassword", "ProductRowScroller", "StaticProduct", "StaticSearch", "DynamicTwitterFeed", "StaticHighlightsBanners", "StaticSlideshow", "pageDots", "DynamicPromoBlocks", "DynamicMenuList", "DynamicInstagramFeed", "DynamicFeaturedCollection", "DynamicSearch", "DynamicVideo", "DynamicNewsletter", "PxsMap"]
}
