{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/assets/scripts/routes/common.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./resources/assets/scripts/util/camelCase.js","webpack:///./resources/assets/scripts/util/Router.js","webpack:///./resources/assets/scripts/modules/homepage_hero_carousel.js","webpack:///./resources/assets/scripts/routes/home.js","webpack:///./resources/assets/scripts/main.js","webpack:///./resources/assets/scripts/routes/about.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","$","window","html","body","push","pushMenuHide","touchLengthMinX","touchLengthMaxY","pushMenuSelector","pushContentSelector","menuToggleSelector","menuCloseSelector","pushLevelForwardSelector","pushLevelBackSelector","init","bannerElm","document","getElementsByClassName","sidebarElm","sidebarOffset","offset","sidebarPinOffset","top","footerElm","sidebarPinBottom","height","onscroll","scroll","currentScroll","classList","contains","add","remove","updateSideNav","touchStartX","touchStartY","touchEndX","touchEndY","pageYOffset","documentElement","scrollTop","on","innerWidth","hasClass","addClass","removeClass","event","originalEvent","pageX","pageY","touchRight","touchLengthX","Math","abs","touchLengthY","find","trigger","preventDefault","toggleClass","this","next","$thisLevel","closest","setTimeout","location","finalize","current","each","index","element","ref","attr","startsWith","parent","siblings","factory","EvEmitter","Unipointer","proto","bindStartEvent","elem","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","undefined","startEvent","PointerEvent","handleEvent","method","type","getTouch","touches","length","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","emitEvent","postStartEvents","mousedown","touchstart","pointerdown","events","forEach","eventName","addEventListener","_boundPointerEvents","_unbindPostStartEvents","removeEventListener","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","x","y","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","style","okayPointerDown","pointerDownPointer","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","target","nodeName","isClickType","isOkay","focused","activeElement","blur","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","dragEnd","onclick","isIgnoringMouseUp","staticClick","utils","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","_this","requestAnimationFrame","options","wrapAround","cells","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","slider","transform","firstSlide","slides","positionX","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cell","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Flickity","PageDots","_create","holder","createElement","className","dots","handleClick","onClick","childUIPointerDown","activate","setDots","appendChild","deactivate","removeChild","delta","addDots","removeDots","count","fragment","createDocumentFragment","newDots","max","dot","setAttribute","concat","splice","updateSelected","selectedDot","removeAttribute","onTap","uiChange","indexOf","select","destroy","allOff","extend","defaults","pageDots","createMethods","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","listener","_events","listeners","once","onceEvents","_onceEvents","off","args","slice","onceListeners","apply","getSize","Cell","Slide","animatePrototype","jQuery","getComputedStyle","console","moveElements","elems","toElem","makeArray","GUID","instances","queryElement","getQueryElement","flickityGUID","instance","option","$element","constructor","error","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","id","guid","originSide","viewport","_createSlider","watchCSS","opts","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","len","setPosition","outerHeight","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateTarget","updateSelectedSlide","groupCells","number","parseInt","percentMatch","match","percent","_init","reposition","positionSliderAtSelected","setCellAlign","cellAlignShorthands","center","left","right","shorthand","adaptiveHeight","_unshiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","backWrapDelta","forewardWrapDelta","isDragSelect","previous","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getParent","getAdjacentCellElements","adjCount","cellElems","slideIndex","selector","querySelector","focus","onresize","debounceMethod","content","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","scrollTo","pageXOffset","removeData","data","htmlInit","bridget","setJQuery","jq","global","w","Error","noGlobal","arr","getProto","getPrototypeOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","code","node","doc","val","script","text","getAttribute","head","parentNode","toType","context","fn","rtrim","isArrayLike","jquery","toArray","num","pushStack","ret","merge","prevObject","callback","arguments","first","eq","last","j","end","sort","copy","copyIsArray","clone","deep","isPlainObject","Array","isArray","expando","random","replace","isReady","msg","noop","Ctor","isEmptyObject","globalEval","trim","results","inArray","second","grep","invert","matches","callbackExpect","arg","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","push_native","list","booleans","whitespace","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","dir","childNodes","e","els","seed","nid","groups","newSelector","newContext","ownerDocument","exec","getElementById","getElementsByTagName","qsa","test","toSelector","join","testContext","querySelectorAll","qsaError","keys","cache","cacheLength","markFunction","assert","el","addHandle","attrs","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","hasCompare","subWindow","defaultView","attachEvent","createComment","getById","getElementsByName","filter","attrId","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","hasFocus","href","checked","selected","password","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","contents","prev","sibling","has","targets","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","promise","fail","then","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","stopOnFalse","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","warn","message","readyException","readyList","completed","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","types","one","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","handleObjIn","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","ctrlKey","detail","eventPhase","metaKey","shiftKey","view","charCode","buttons","clientX","clientY","offsetX","offsetY","pointerType","screenX","screenY","targetTouches","toElement","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","eased","duration","pos","step","fx","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classes","curValue","clazz","finalValue","stateVal","isValidValue","classNames","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","offsetParent","parentOffset","Height","Width","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","_jQuery","_$","noConflict","getStyleSize","logError","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","borderStyle","borderWidth","boxSizing","innerHeight","getZeroSize","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","draggable","dragThreshold","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","focusNodes","isTouchStart","isTouchPointer","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","md","isWrapAround","floor","clickedCell","scrollMoveX","scrollMoveY","str","charAt","part","Router","routes","route","CustomEvent","require","carousel","autoPlay","homepageHeroCarousel","common","home","aboutUs","loadEvents","arraySlice","removeFrom","ary","ffElems","HTMLElement","childElems","_class","methodName","threshold","timeoutName","docReady","toDashed","$1","$2","WidgetClass","dashedNamespace","dataAttrElems","jsDashElems","dataOptionsAttr","isOriginLeft","lastCell","lastMargin","LazyLoader","img","flickity","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","srcset","cellSizeChange","Player","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","clear","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","getCellsFragment","isAppend","insertCellElement","endCells","cellChange","minCellIndex","changedCellIndex","isPositioningSlider","prevSelectedElem","matchesMethod","ElemProto","Element","prefixes","side","renderPosition","setDefaultTarget","marginProperty","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","svg","createSVG","update","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","enable","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons"],"mappings":"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","file":"/scripts/main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const $ = window.jQuery;\n\nlet s = {\n html : $('html'),\n body : $('body'),\n push : $('.js-push'),\n\n pushMenuHide : 960,\n\n touchLengthMinX : 25,\n touchLengthMaxY : 25,\n\n // pushMenu : $('.js-push__menu'),\n pushMenuSelector : '.js-push__menu',\n\n // pushContent : $('.js-push__content'),\n pushContentSelector : '.js-push__content',\n\n // menuToggle : $('.js-menu__toggle'),\n menuToggleSelector : '.js-menu__toggle',\n\n // menuClose : $('.js-menu__close'),\n menuCloseSelector : '.js-menu__close',\n\n // pushLevelForward : $('.js-menu__item--has-children > a'),\n // pushLevelForwardSelector : '.js-menu__item--has-children > a',\n // pushLevelForward : $('.js-push__menu .menu-item-has-children > a'),\n pushLevelForwardSelector : '.js-push__menu .menu-item-has-children > a',\n\n // pushLevelBack : $('.js-menu__back'),\n pushLevelBackSelector : '.js-menu__back',\n};\n\nfunction events() {\n var touchStartX, touchStartY, touchEndX, touchEndY;\n\n $(window).on('load resize', function() {\n\n if (window.innerWidth < s.pushMenuHide && s.push.hasClass('push--active')) {\n s.html.addClass('no-scroll');\n s.body.addClass('no-scroll');\n } else {\n s.html.removeClass('no-scroll');\n s.body.removeClass('no-scroll');\n }\n });\n\n s.body.on('mousedown touchstart', s.pushMenuSelector, function(event) {\n\n touchStartX = event.originalEvent.pageX;\n touchStartY = event.originalEvent.pageY;\n\n })\n .on('mouseup touchend', s.pushMenuSelector, function(event) {\n\n touchEndX = event.originalEvent.pageX;\n touchEndY = event.originalEvent.pageY;\n\n // const touchUp = touchStartY < touchEndY;\n const touchRight = touchStartX < touchEndX;\n // const touchDown = touchStartY > touchEndY;\n // const touchLeft = touchStartX > touchEndX;\n\n const touchLengthX = Math.abs(touchStartX - touchEndX);\n const touchLengthY = Math.abs(touchStartY - touchEndY);\n\n /** swipe back */\n if (touchRight && (touchLengthX > s.touchLengthMinX) && (touchLengthY < s.touchLengthMaxY)) { // swipe direction && threshold\n s.push.find('.push__level--current:not(.push__level--top)').find(s.pushLevelBackSelector).trigger('click');\n }\n // else if (touchLeft && (touchLengthX > s.touchLengthMinX) && (touchLengthY < s.touchLengthMaxY)) { // swipe direction && threshold\n // \t// do something\n // }\n });\n\n s.body.on('click', s.menuToggleSelector, function(event) { event.preventDefault();\n s.body.toggleClass('no-scroll');\n s.html.toggleClass('no-scroll');\n s.push.toggleClass('push--active');\n s.push.find('.push__level--top')\n .addClass('push__level--active')\n .addClass('push__level--current');\n\n }).on('click', s.pushLevelForwardSelector, function(event) { event.preventDefault();\n\n s.push.find('.push__level--current')\n .removeClass('push__level--current');\n\n $(this).next('.push__level')\n .addClass('push__level--active')\n .addClass('push__level--current');\n\n }).on('click', s.pushLevelBackSelector, function(event) { event.preventDefault();\n const $thisLevel = $(this).closest('.push__level'); // this parent\n\n $thisLevel\n .removeClass('push__level--active')\n .removeClass('push__level--current')\n .closest('.push__level--active') // level parent\n .addClass('push__level--current');\n\n /** reset scroll */\n setTimeout(function() {\n // $thisLevel.scrollTop(0);\n $thisLevel.find('.push__level__inner')\n .scrollTop(0);\n }, 400); // transition\n\n }).on('click', s.menuCloseSelector, function(event) { event.preventDefault();\n\n s.push.find('.push__level--top')\n .addClass('push__level--active')\n .addClass('push__level--current');\n\n setTimeout(function() {\n\n /** reset scroll */\n s.push\n // .find('.push__level')\n // .scrollTop(0);\n .find('.push__level__inner')\n .scrollTop(0);\n\n /** reset active */\n s.push\n .find('.push__level--active')\n .removeClass('push__level--active');\n }, 400); // transition\n });\n\n $('.post-filter select').on('change', function() {\n\t\twindow.location = this.value;\n\t});\n}\n\nexport default {\n init() {\n // JavaScript to be fired on all pages\n\n const navHeight = 116;\n const bannerElm = document.getElementsByClassName('banner')[0];\n const sidebarElm = document.getElementsByClassName('sidebar-fixed')[0];\n const sidebarOffset = (sidebarElm) ? $(sidebarElm).offset() : 0;\n const sidebarPinOffset = (sidebarElm) ? sidebarOffset.top - navHeight : 0;\n const footerElm = document.getElementsByClassName('footer')[0];\n const sidebarPinBottom = (sidebarElm) ? $(footerElm).offset().top - $(sidebarElm).height() - (navHeight + 30) : 0;\n window.onscroll = () => {\n let scroll = currentScroll();\n if(scroll > 145 && bannerElm.classList.contains('pinned')) {\n if(!bannerElm.classList.contains('open')) {\n bannerElm.classList.add('open');\n }\n } else if(scroll > 135) {\n bannerElm.classList.add('pinned');\n } else if(scroll < 120) {\n bannerElm.classList.remove('pinned', 'open');\n }\n if(sidebarElm) {\n if(scroll > sidebarPinOffset + 25 && sidebarElm.classList.contains('pinned')) {\n if(!sidebarElm.classList.contains('open')) {\n sidebarElm.classList.add('open');\n }\n if(scroll > sidebarPinBottom) {\n if(!sidebarElm.classList.contains('pinned-bottom')) {\n sidebarElm.classList.add('pinned-bottom');\n }\n } else {\n sidebarElm.classList.remove('pinned-bottom');\n }\n } else if(scroll > sidebarPinOffset + 15) {\n sidebarElm.classList.add('pinned');\n } else if(scroll < sidebarPinOffset) {\n sidebarElm.classList.remove('pinned', 'open');\n }\n this.updateSideNav();\n }\n }\n\n let currentScroll = () => {\n return window.pageYOffset || document.documentElement.scrollTop;\n }\n\n events();\n },\n finalize() {\n // JavaScript to be fired on all pages, after page specific JS is fired\n },\n updateSideNav() {\n let links = $('.sidebar-fixed .page_item > a');\n let current;\n links.each((index, element) => {\n let ref = $(element).attr('href');\n if (ref.startsWith('#') && $(ref).offset().top <= $(window).scrollTop()) {\n current = element;\n }\n });\n $(current).parent().addClass('current-menu-item').siblings().removeClass('current-menu-item');\n },\n};\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 define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\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 * Unidragger v2.3.1\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 define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('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 // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\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","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-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 ) {\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.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = 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 = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\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","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\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.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\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 = // old method name, backwards-compatible\nPageDots.prototype.onClick = 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 this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.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 * 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 define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == '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 : this, 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","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\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, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./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,\n utils, 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.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.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.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.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.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 this.selectInitialIndex();\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.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 = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.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 ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\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, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.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( 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 = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.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 ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.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.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.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 = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\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 = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\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 = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\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.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\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 ) {\n return cell.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 = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.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.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.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 // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\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\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.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.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 // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\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 ) {\n cell.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.allOff();\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.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.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.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;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n","/*!\n * jQuery JavaScript Library v3.4.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: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar 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\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.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\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\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.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-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\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\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\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + 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\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-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\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\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!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\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\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\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\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\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\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\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\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\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 || 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 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\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\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the 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 documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\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 = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// 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, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\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 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// 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// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\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\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\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\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* 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 && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.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 = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\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 === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// 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\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\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\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\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\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* 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\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\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() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + 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, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\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 define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * Flickity v2.2.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-2019 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\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 define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == '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","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-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 ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.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.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( 'deactivate', this.onDeactivateDrag );\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\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 // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\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.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 * the most terrible camelizer on the internet, guaranteed!\n * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD\n * @return {string} String converted to camel-case, e.g., camelCaseIsHard\n */\nexport default str => `${str.charAt(0).toLowerCase()}${str.replace(/[\\W_]/g, '|').split('|')\n .map(part => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join('')\n .slice(1)}`;\n","import camelCase from './camelCase';\n\n/**\n * DOM-based Routing\n *\n * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish\n *\n * The routing fires all common scripts, followed by the page specific scripts.\n * Add additional events for more control over timing e.g. a finalize event\n */\nclass Router {\n\n /**\n * Create a new Router\n * @param {Object} routes\n */\n constructor(routes) {\n this.routes = routes;\n }\n\n /**\n * Fire Router events\n * @param {string} route DOM-based route derived from body classes (`<body class=\"...\">`)\n * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.\n * @param {string} [arg] Any custom argument to be passed to the event.\n */\n fire(route, event = 'init', arg) {\n document.dispatchEvent(new CustomEvent('routed', {\n bubbles: true,\n detail: {\n route,\n fn: event,\n },\n }));\n \n const fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';\n if (fire) {\n this.routes[route][event](arg);\n }\n }\n\n /**\n * Automatically load and fire Router events\n *\n * Events are fired in the following order:\n * * common init\n * * page-specific init\n * * page-specific finalize\n * * common finalize\n */\n loadEvents() {\n // Fire common init JS\n this.fire('common');\n\n // Fire page-specific init JS, and then finalize JS\n document.body.className\n .toLowerCase()\n .replace(/-/g, '_')\n .split(/\\s+/)\n .map(camelCase)\n .forEach((className) => {\n this.fire(className);\n this.fire(className, 'finalize');\n });\n\n // Fire common finalize JS\n this.fire('common', 'finalize');\n }\n}\n\nexport default Router;\n","/**\n * Home Hero Carousel (Flickity)\n *\n * @author Dylan James Wagner\n */\nconst Flickity = require('flickity');\n\nfunction init() {\n const carousel = document.querySelectorAll('.homepage-hero__carousel');\n\n if (carousel.length) {\n\n for (let i = 0; i < carousel.length; i++) {\n\n const flkty = new Flickity(carousel[i], {\n autoPlay: true, // Default false, true = 3s\n // wrapAround: true, // Default false\n pageDots: false, // Default true\n groupCells: true, // Default false\n // groupCells: '100%', // Default ???\n // cellAlign: 'left', // Default center\n // contain: true, // Default false\n // prevNextButtons: false, // Default true\n // pauseAutoPlayOnHover: false, // Default true\n // selectedAttraction: 0.01, // Default ???\n // friction: 0.15, // Default ???\n // adaptiveHeight: true, // Default false\n // watchCSS: true, // Default false\n // imagesLoaded: true, // Default false, requires npm flickity-imagesloaded\n // fullscreen: true, // Default false, requires npm flickity-fullscreen\n // arrowShape: {\n // x0: 10,\n // x1: 60, y1: 50,\n // x2: 70, y2: 40,\n // x3: 30\n // },\n });\n\n flkty.resize(); /** Sarfari height */\n\n /**\n * Resize cells\n *\n * @link https://flickity.metafizzy.co/extras.html\n * @link https://codepen.io/desandro/pen/ZXEGVq\n */\n // Flickity.prototype._createResizeClass = function() {\n // this.element.classList.add('flickity-resize');\n // };\n //\n // Flickity.createMethods.push('_createResizeClass');\n //\n // var resize = Flickity.prototype.resize;\n // Flickity.prototype.resize = function() {\n // this.element.classList.remove('flickity-resize');\n // resize.call( this );\n // this.element.classList.add('flickity-resize');\n // };\n }\n }\n}\n\nexport {init as default};\n","import homepageHeroCarousel from './../modules/homepage_hero_carousel.js'\n\nexport default {\n init() {\n // JavaScript to be fired on the home page\n\n homepageHeroCarousel();\n\n },\n finalize() {\n // JavaScript to be fired on the home page, after the init JS\n },\n};\n","// import external dependencies\nimport 'jquery';\n\n// Import everything from autoload\n\n\n// import local dependencies\nimport Router from './util/Router';\nimport common from './routes/common';\nimport home from './routes/home';\nimport aboutUs from './routes/about';\n\n/** Populate Router instance with DOM routes */\nconst routes = new Router({\n // All pages\n common,\n // Home page\n home,\n // About Us page, note the change from about-us to aboutUs.\n aboutUs,\n});\n\n// Load Events\njQuery(document).ready(() => routes.loadEvents());\n","export default {\n init() {\n // JavaScript to be fired on the about us page\n },\n};\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 define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\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( 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( 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","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == '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.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\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","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-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 ) {\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.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.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","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./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, 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.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","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-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 ) {\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.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 * 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 define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == '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","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\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 ) {\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-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( 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\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\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","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\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( Unipointer.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.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.bindStartEvent( this.element );\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 // click events\n this.unbindStartEvent( this.element );\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.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = 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\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 this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.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"],"sourceRoot":""}