{"version":3,"sources":["scripts/vendor.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","indexOf","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","completed","removeEventListener","ready","Data","Object","defineProperty","cache","get","expando","uid","dataAttr","key","data","name","undefined","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","data_user","set","returnTrue","returnFalse","safeActiveElement","activeElement","err","manipulationTarget","content","nodeName","firstChild","getElementsByTagName","appendChild","ownerDocument","createElement","disableScript","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","elems","refElements","l","data_priv","cloneCopyEvent","src","dest","pdataOld","pdataCur","udataOld","udataCur","events","hasData","access","handle","event","add","extend","getAll","context","tag","ret","querySelectorAll","merge","fixInput","rcheckableType","checked","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","detach","defaultDisplay","elemdisplay","iframe","documentElement","contentDocument","write","close","curCSS","computed","width","minWidth","maxWidth","getStyles","getPropertyValue","contains","rnumnonpx","rmargin","addGetHookIf","conditionFn","hookFn","apply","arguments","vendorPropName","capName","toUpperCase","slice","origName","cssPrefixes","setPositiveNumber","value","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","support","boxSizingReliable","parseFloat","showHide","show","hidden","values","index","isHidden","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","createTween","animation","tween","collection","tweeners","concat","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","rfxtypes","isEmptyObject","done","hide","remove","start","propFilter","specialEasing","camelCase","isArray","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","push","stop","gotoEnd","rejectWith","map","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","selected","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","split","state","error","buildParams","prefix","traditional","v","rbracket","getWindow","defaultView","arr","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copy","copyIsArray","clone","isPlainObject","random","isReady","msg","noop","Array","isNumeric","globalEval","code","script","indirect","eval","trim","text","head","parentNode","removeChild","string","makeArray","results","inArray","second","invert","callbackInverse","callbackExpect","arg","guid","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","id","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","find","dirrunsUnique","pop","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","node","hasCompare","parent","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","attr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","truncate","n","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","stack","once","stopOnFalse","disable","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","readyState","chainable","emptyGet","raw","bulk","acceptData","owner","accepts","descriptor","unlock","defineProperties","stored","camel","discard","removeData","_data","_removeData","camelKey","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","strundefined","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","handleObjIn","eventHandle","t","handleObj","special","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","fixHooks","keyHooks","original","charCode","keyCode","mouseHooks","eventDoc","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","opener","getComputedStyle","computePixelPositionAndBoxSizingReliable","cssText","container","divStyle","pixelPositionVal","boxSizingReliableVal","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","for","class","notxml","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","ajaxLocation","ajaxLocParts","active","lastModified","etag","url","isLocal","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","abort","finalText","method","crossDomain","param","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus","0","1223","xhrSupported","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","minErr","ErrorConstructor","paramPrefix","SKIP_INDEXES","templateArgs","message","template","shiftedIndex","toDebugString","isArrayLike","isString","jqLite","isNumber","item","forEach","iterator","isPrimitive","isBlankObject","forEachSorted","reverseParams","iteratorFn","nextUid","setHashKey","h","$$hashKey","baseExtend","dst","objs","ii","isObject","jj","isDate","valueOf","isRegExp","isElement","toInt","str","parseInt","inherit","create","identity","valueFn","hasCustomToString","isUndefined","isDefined","getPrototypeOf","isScope","$evalAsync","$watch","isFile","isFormData","isBlob","isBoolean","isPromiseLike","isTypedArray","TYPED_ARRAY_REGEXP","isArrayBuffer","makeMap","items","nodeName_","element","lowercase","arrayRemove","array","destination","copyRecurse","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","buffer","byteOffset","copied","ArrayBuffer","byteLength","Uint8Array","re","lastIndex","equals","o1","o2","keySet","t1","t2","getTime","createMap","charAt","array1","array2","sliceArgs","startIndex","curryArgs","toJsonReplacer","toJson","pretty","stringify","fromJson","timezoneToOffset","timezone","fallback","ALL_COLONS","requestedTimezoneOffset","isNaN","addDateMinutes","date","minutes","setMinutes","getMinutes","convertTimezoneToLocal","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","startingTag","elemHtml","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","config","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","scope","$apply","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","reload","getTestability","rootElement","snake_case","separator","SNAKE_CASE_REGEXP","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","JQLitePrototype","isolateScope","controller","inheritedData","$destroy","JQLite","assertArg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","path","bindFnToScope","lastInstance","getBlockNodes","blockNodes","endNode","setupModuleLoader","ensure","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","insertMethod","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","directive","component","block","shallowCopy","serializeObject","seen","publishExternalAPI","uppercase","callbacks","$$counter","$$csp","csp","angularModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","inputDirective","textarea","form","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","jqNextId","jqId","SPECIAL_CHARS_REGEXP","MOZ_HACK_REGEXP","jqLiteIsTextNode","HTML_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteHasData","jqCache","ng339","jqLiteCleanData","jqLiteRemoveData","jqLiteBuildFragment","TAG_NAME_REGEXP","XHTML_TAG_REGEXP","jqLiteParseHTML","SINGLE_TAG_REGEXP","jqLiteWrapNode","wrapper","argIsString","jqLiteMinErr","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","descendants","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","removeHandler","listenerFns","removeEventListenerFn","MOUSE_EVENT_MAP","expandoId","createIfNecessary","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","jqLiteRemoveClass","cssClasses","cssClass","jqLiteAddClass","existingClasses","jqLiteController","jqLiteInheritedData","names","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","jqLiteRemove","jqLiteDocumentLoaded","action","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","specialMouseHandlerWrapper","jqLiteContains","$get","hashKey","nextUidFn","objType","HashMap","isolatedUid","put","stringifyFn","Function","extractArgs","fnText","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","annotate","$inject","argDecl","FN_ARG_SPLIT","FN_ARG","underscore","modulesToLoad","supportObject","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","instanceInjector","factoryFn","enforce","$injector","instanceCache","serviceName","decorFn","origProvider","orig$get","origInstance","$delegate","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","createInternalInjector","getService","caller","INSTANTIATING","injectionArgs","locals","$$annotate","isClass","msie","Type","ctor","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","getFirstAnchor","some","getYOffset","scroll","yOffset","bottom","scrollIntoView","elemTop","scrollBy","elm","newVal","oldVal","mergeClasses","extractElementNode","ELEMENT_NODE","splitClasses","klass","prepareAnimateOptions","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","getHash","substr","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","cachedState","getCurrentState","lastCachedState","lastBrowserUrl","lastHistoryState","urlChangeListeners","listener","history","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","baseElement","sameState","sameBase","stripHash","urlChangeInit","onUrlChange","$$applicationDestroyed","$$checkUrlChange","baseHref","timeoutId","cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","link","nextEntry","prevEntry","caches","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","removeAll","destroy","info","UNINITIALIZED_VALUE","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","optional","attrName","parseDirectiveBindings","bindToController","controllerAs","identifierForController","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","registerDirective","directiveFactory","directives","priority","restrict","makeInjectable","tElement","tAttrs","$element","$attrs","templateUrl","ddo","transclude","aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","TTL","onChangesTtl","flushOnChangesQueue","onChangesQueue","errors","Attributes","attributesToCopy","$attr","$$element","setSpecialAttr","specialAttrHolder","attribute","removeNamedItem","setNamedItem","safeAddClass","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","domNode","compositeLinkFn","compileNodes","$$addScopeClass","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","detectNamespaceForChildElements","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","parentElement","nodeList","$rootElement","nodeLinkFn","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","nodeListLength","linkFns","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","linkFnFound","collectDirectives","applyDirectivesToNode","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","nName","ngAttrName","isNgAttr","nAttrs","attrStartName","attrEndName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compilationGenerator","eager","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","scopeToChild","slotTranscludeFn","controllerScope","scopeBindingInfo","newScopeDirective","isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","controllerResult","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","invokeLinkFn","$postLink","$template","directiveValue","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","replaceDirective","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","$$start","$$end","assertNoDuplicate","$$tlb","candidateDirective","scanningIndex","$$createComment","$$parentNode","slots","slotMap","filledSlots","elementSelector","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","linkQueue","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","ignoreChildLinkFn","previousDirective","wrapModuleNameIfDefined","moduleName","interpolateFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","$$addBindingInfo","expressions","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","annotation","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","lastValue","parentGet","parentSet","removeWatch","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","$watchCollection","initialValue","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","comment","previous","str1","str2","tokens1","tokens2","outer","jqNodes","ident","CNTRL_REG","globals","register","allowGlobals","addIdentifier","expression","later","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","toISOString","toSerialize","topLevel","defaultHttpResponseTransform","tempData","JSON_PROTECTION_PREFIX","APPLICATION_JSON","isJsonLike","jsonStart","JSON_START","JSON_ENDS","parseHeaders","fillInParsed","line","headerVal","headerKey","headersGetter","headersObj","transformData","defaults","transformResponse","transformRequest","d","common","Accept","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","chainInterceptors","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","mergeHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","defHeaders","reqHeaders","defaultHeadersIteration","serverRequest","reqData","withCredentials","sendReq","resp","requestInterceptors","responseInterceptors","reversedInterceptors","interceptor","request","requestError","responseError","$httpMinErrLegacyFn","createShortMethods","createShortMethodsWithData","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","headersString","resolveHttpPromise","resolvePromise","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","responseType","uploadEventHandlers","serializedParams","interceptorFactory","createHttpBackend","createXhr","$browserDefer","rawDocument","jsonpReq","callbackPath","wasCalled","addEventListenerFn","timeoutRequest","jsonpDone","completeRequest","createCallback","getResponse","removeCallback","urlResolve","protocol","onabort","upload","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","mustHaveExpression","parseStringifyInterceptor","getValue","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","getTrusted","$watchGroup","oldValues","currValue","invokeApply","hasParams","iteration","skipApply","$$intervalId","intervals","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","startsWith","haystack","needle","lastIndexOf","stripBaseUrl","trimEmptyHash","stripFile","serverBase","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","pathUrl","$locationMinErr","$$compose","$$url","$$absUrl","$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","removeWindowsDriveName","firstPathSegmentMatch","windowsFilePathExp","withoutHashUrl","withoutBaseUrl","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","absHref","initializing","newUrl","newState","$digest","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","formatError","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","ifDefined","plusFn","r","isStateless","filterName","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","Literal","toWatch","UnaryExpression","BinaryExpression","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","isLiteral","isConstant","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","identStart","identContinue","cacheDefault","cacheExpensive","literals","true","false","null","addLiteral","literalName","literalValue","setIdentifierFns","identifierStart","identifierContinue","interceptorFn","expensiveChecks","parsedExpression","oneTime","cacheKey","runningChecksEnabled","parseOptions","$parseOptionsExpensive","$parseOptions","lexer","Lexer","parser","Parser","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputs","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","prettyPrintExpression","lastResult","inputExpressions","oldInputValueOf","newInputValue","oldInputValueOfValues","oldInputValues","changed","isAllDefined","allDefined","watchDelegate","useInputs","regularWatch","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$runningExpensiveChecks","qFactory","nextTick","exceptionHandler","Promise","simpleBind","processQueue","pending","processScheduled","scheduleProcessQueue","promises","counter","race","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","that","rejectPromise","makePromise","resolved","isResolved","callbackOutput","errback","$Q","resolver","resolveFn","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","clearPhase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","unwatchFn","$watchCollectionInterceptor","_value","newLength","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","internalObject","$watchCollectionAction","initRun","veryOldValue","trackVeryOldValue","changeDetector","watch","watchers","dirty","logIdx","asyncTask","ttl","watchLog","asyncQueuePosition","asyncQueue","$eval","traverseScopesLoop","postDigestQueuePosition","postDigestQueue","eventName","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","uri","isImage","normalizedVal","regex","adjustMatcher","$sceMinErr","escapeForRegexp","adjustMatchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","matchUrl","isResourceUrlAllowedByPolicy","allowed","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","trustAs","Constructor","byType","maybeTrusted","trustedValueHolderBase","htmlSanitizer","CSS","URL","JS","sce","isEnabled","parseAs","enumValue","lName","vendorPrefix","eventSupport","isChromePackagedApp","chrome","app","runtime","hasHistoryPushState","pushState","android","navigator","userAgent","boxee","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","httpOptions","handleRequestFn","tpl","ignoreRequestError","handleError","$templateRequestMinErr","totalPendingRequests","getTrustedResourceUrl","transformer","testability","findBindings","opt_exactMatch","dataBinding","bindingName","findModels","prefixes","attributeEquals","getLocation","setLocation","whenStable","deferreds","$$timeoutId","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","predicateFn","matchAgainstAnyProp","expressionType","getTypeForFilter","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","digits","numberOfIntegerDigits","zeros","exponent","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","propPrefix","timeZoneGetter","zone","paddedZone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","getThursdayThisWeek","datetime","getFullYear","getMonth","getDate","weekGetter","firstThurs","thisThurs","round","ampmGetter","getHours","AMPMS","eraGetter","ERAS","longEraGetter","ERANAMES","jsonStringToDate","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","ms","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","processPredicates","sortPredicates","predicate","descending","objectValue","getPredicateValue","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","getComparisonObject","tieBreaker","predicateValues","predicates","doComparison","compareValues","ngDirective","nullFormRenameControl","control","$name","FormController","controls","$error","$$success","$pending","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","$commitViewValue","$addControl","$$renameControl","newName","oldName","$removeControl","$setValidity","addSetValidityMethod","ctrl","unset","$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","$setSubmitted","stringBasedInputType","$formatters","$isEmpty","textInputType","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","VALIDITY_STATE_PROPERTY","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","weekParser","isoWeek","existingDate","WEEK_REGEXP","week","hours","seconds","milliseconds","addDays","getSeconds","getMilliseconds","NaN","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","mm","ss","sss","part","createDateInputType","parseDate","isValidDate","parseObservedDateValue","badInputChecker","previousDate","$options","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","$validate","ngMax","maxVal","nativeValidation","numberInputType","NUMBER_REGEXP","urlInputType","modelValue","viewValue","URL_REGEXP","emailInputType","email","EMAIL_REGEXP","radioInputType","parseConstantExpr","parseFn","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","classDirective","arrayDifference","arrayClasses","addClasses","digestClassCounts","removeClasses","classCounts","classesToUpdate","updateClasses","ngClassWatchAction","$index","old$index","mod","setValidity","validationErrorKey","createAndSet","unsetAndCleanup","cachedToggleClass","PENDING_CLASS","toggleValidationCss","isObjectEmpty","combinedState","switchValue","isValid","VALID_CLASS","INVALID_CLASS","chromeHack","optionElement","REGEX_STRING_REGEXP","manualLowercase","charCodeAt","manualUppercase","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","NODE_TYPE_ATTRIBUTE","full","major","minor","dot","codeName","Node","lowercasedName","getNamedItem","$dv","multiple","nodeCount","addHandler","noEventListener","onFn","replaceNode","wrapNode","newElement","condition","classCondition","nextElementSibling","extraParameters","dummyEvent","eventFnsCopy","handlerArgs","arg3","$animateMinErr","NG_ANIMATE_CLASSNAME","postDigestElements","updateData","handleCSSClassChanges","existing","addRemoveClassesPostDigest","classesAdded","classesRemoved","pin","domOperation","from","runner","$$registeredAnimations","classNameFilter","$$classNameFilter","reservedRegex","domInsert","afterElement","afterNode","previousElementSibling","enter","move","leave","addclass","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","timeoutTick","_doneCallbacks","_tick","_state","INITIAL_STATE","DONE_PENDING_STATE","DONE_COMPLETE_STATE","chain","runners","onProgress","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","initialOptions","applyAnimationContents","closed","$$prepared","cleanupStyles","isFirstChange","Content-Type","[","{","$httpMinErr","callbackId","called","callbackMap","PATH_MATCH","http","https","ftp","locationPrototype","paramValue","Location","OPERATORS","ESCAPE","f","'","\"","lex","readString","peek","readNumber","peekMultichar","readIdent","isWhitespace","ch2","ch3","op1","op2","op3","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","$locals","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","member","SAFE_IDENTIFIER","UNSAFE_CHARACTERS","stringEscapeFn","stringEscapeRegex","c","skip","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","Z","ww","G","GG","GGG","GGGG","xlinkHref","defaultLinkFn","normalized","htmlAttr","formDirectiveFactory","isNgForm","getSetter","formElement","nameAttr","ctrls","handleFormSubmission","parentFormCtrl","DATE_REGEXP","DATETIMELOCAL_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","datetime-local","month","CONSTANT_VALUE_REGEXP","tplAttr","$compile","templateElement","ngBindHtmlGetter","ngBindHtmlWatch","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","previousElements","srcExp","onloadExp","autoScrollExp","autoscroll","previousElement","currentElement","changeCounter","cleanupLastIncludeContent","afterAnimation","thisChangeId","trimValues","UNTOUCHED_CLASS","TOUCHED_CLASS","EMPTY_CLASS","NOT_EMPTY_CLASS","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parserValid","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","$$updateEmptyClasses","currentValidationRunId","$setTouched","$$lastCommittedViewValue","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","doneCallback","processParseErrors","errorKey","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","$$parseAndValidate","writeToModelIfNeeded","updateOnDefault","$$debounceViewValueCommit","debounce","debounceDelay","formatters","modelCtrl","formCtrl","updateOn","DEFAULT_REGEXP","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","selectAsFn","viewValueFn","trackByFn","getTrackByValueFn","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","ngOptionsPostLink","addOptionElement","optionTemplate","updateOptionElement","updateOptions","selectCtrl","readValue","groupElementMap","providedEmptyOption","emptyOption","groupElement","optGroupTemplate","listFragment","ngModelCtrl","nextValue","isNotPrimitive","unknownOption","renderEmptyOption","removeEmptyOption","renderUnknownOption","removeUnknownOption","writeValue","selectedValues","selections","selectedOption","registerOption","BRACE","IS_WHEN","updateElementText","newText","lastCount","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","attributeName","tmpMatch","whenKey","countIsNaN","pluralCat","whenExpFn","NG_REMOVED","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","getBlockStart","getBlockEnd","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","lastBlockMap","nextNode","collectionLength","trackById","trackByIdFn","collectionKeys","nextBlockOrder","previousNode","nextBlockMap","blockKey","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","newStyles","oldStyles","cases","ngSwitchController","watchExpr","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","selectedTransclude","caseElement","selectedScope","anchor","ngTranscludeMinErr","fallbackLinkFn","ngTranscludeCloneAttachFn","useFallbackContent","ngTranscludeSlot","noopNgModelController","SelectController","optionsMap","unknownVal","hasOption","addOption","removeOption","optionScope","optionAttrs","interpolateValueFn","interpolateTextFn","selectPreLink","lastView","lastViewRef","selectPostLink","selectCtrlName","patternExp","intVal","getDecimals","getVF","opt_precision","pow","PLURAL_CATEGORY","ZERO","ONE","TWO","FEW","MANY","OTHER","DAY","FIRSTDAYOFWEEK","MONTH","SHORTDAY","SHORTMONTH","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","medium","mediumDate","mediumTime","short","shortDate","shortTime","minInt","localeID","vf","$RouteProvider","pathRegExp","insensitive","caseInsensitiveMatch","originalPath","slash","star","routes","route","routeCopy","reloadOnSearch","redirectPath","redirectTo","otherwise","$routeParams","switchRouteMatcher","prepareRoute","$locationEvent","lastRoute","$route","preparedRoute","parseRoute","preparedRouteIsUpdateOnly","$$route","pathParams","forceReload","commitRoute","nextRoute","interpolate","resolveLocals","getTemplateFor","loadedTemplateUrl","segment","segmentMatch","fakeLocationEvent","updateParams","newParams","$routeMinErr","$RouteParamsProvider","ngViewFactory","cleanupLastView","previousLeaveAnimation","update","ngViewFillContentFactory","resolveAs","ngRouteModule","u","R","o","S","L","x","T","g","loop","typeSpeed","deleteSpeed","pauseDelay","postfix","clear","triggerPause","triggerResume","isRunning","malarkey","toastr","toastrConfig","toasts","toast","toastId","title","optionsOverride","_getOptions","iconClasses","_buildNotification","warning","wasClicked","findToast","lastToast","deleting","isOpened","onHidden","openToasts","maxOpened","containerDefer","_notify","iconClass","_createOrGetContainer","containerId","positionClass","pointer-events","ifMaxOpenedAndAutoDismiss","autoDismiss","createScope","generateEvent","allowHtml","trustAsHtml","toastType","extraData","extendedTimeOut","messageClass","onShown","onTap","progressBar","tapToDismiss","timeOut","titleClass","toastClass","closeButton","closeHtml","createToast","cleanOptionsOverride","badOptions","newToast","createToastEl","angularDomEl","maxOpenedNotReached","shouldExit","isDuplicateOfLast","preventDuplicates","previousToastMessage","isDuplicateOpen","preventOpenDuplicates","oldToasts","newestOnTop","templates","progressbar","linkFunction","toastCtrl","updateProgress","percentage","hideTime","currentTimeOut","intervalId","ToastController","startProgressBar","stopProgressBar","toastLinkFunction","createTimeout","hideAndStopProgressBar","wantsCloseButton","tapToast","moment","utils_hooks__hooks","hookCallback","setHookCallback","res","hasOwnProp","create_utc__createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","getParsingFlags","_pf","valid__isValid","_isValid","flags","_d","invalidWeekday","_strict","bigHour","valid__createInvalid","copyConfig","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","updateInProgress","updateOffset","isMoment","absFloor","ceil","argumentForCoercion","coercedNumber","compareArrays","dontConvert","lengthDiff","diffs","Locale","normalizeLocale","chooseLocale","loadLocale","oldLocale","locales","globalLocale","_abbr","locale_locales__getSetGlobalLocale","locale_locales__getLocale","defineLocale","abbr","addUnitAlias","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","makeGetSet","keepTime","get_set__set","get_set__get","mom","getSet","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","addFormatToken","padded","ordinal","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","output","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","sth","addRegexToken","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","UTC","getUTCDate","localeMonths","_months","localeMonthsShort","_monthsShort","localeMonthsParse","monthName","_monthsParse","_longMonthsParse","_shortMonthsParse","months","monthsShort","setMonth","dayOfMonth","monthsParse","getSetMonth","getDaysInMonth","checkOverflow","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","suppressDeprecationWarnings","deprecate","firstTime","deprecateSimple","deprecations","configFromISO","from_string__isoRegex","isoDates","isoTimes","matchOffset","configFromStringAndFormat","configFromString","aspNetJsonRegex","createFromInputFallback","createDate","createUTCDate","daysInYear","isLeapYear","getIsLeapYear","weekOfYear","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","day","local__createLocal","dayOfYear","localeWeek","_week","dow","doy","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","dayOfYearFromWeeks","weekday","week1Jan","janX","getUTCDay","getSetDayOfYear","startOf","currentDateArray","_useUTC","getUTCFullYear","getUTCMonth","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","weekYear","W","E","gg","ISO_8601","parsedInput","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","_meridiem","hour","meridiem","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","minute","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","Duration","years","quarters","quarter","weeks","days","_milliseconds","_days","_bubble","isDuration","utcOffset","offsetFromString","chunk","chunkOffset","cloneWithOffset","model","setTime","local","getDateOffset","getSetOffset","keepLocalTime","localAdjust","_changeInProgress","add_subtract__addSubtract","create__createDuration","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","other","isUtcOffset","isUtc","diffRes","aspNetRegex","create__isoRegex","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","direction","period","dur","isAdding","moment_calendar__calendar","sod","calendar","inputMs","endOf","isBetween","isSame","asFloat","delta","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","moment_format__toISOString","toDate","inputString","defaultFormat","postformat","withoutSuffix","humanize","fromNow","toNow","newLocaleData","isoWeekday","to_type__valueOf","unix","toObject","moment_valid__isValid","parsingFlags","invalidAt","addWeekYearFormatToken","weeksInYear","getSetWeekYear","getSetISOWeekYear","getISOWeeksInYear","getWeeksInYear","weekInfo","getSetQuarter","parseWeekday","weekdaysParse","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","localeWeekdaysParse","weekdayName","_weekdaysParse","weekdays","weekdaysShort","weekdaysMin","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","parseMs","getZoneAbbr","getZoneName","moment__createUnix","moment__createInZone","parseZone","locale_calendar__calendar","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","preParsePostFormat","relative__relativeTime","isFuture","_relativeTime","pastFuture","locale_set__set","_ordinalParseLenient","_ordinalParse","lists__get","field","out","lists__listMonths","lists__listMonthsShort","lists__listWeekdays","lists__listWeekdaysShort","lists__listWeekdaysMin","duration_abs__abs","mathAbs","duration_add_subtract__addSubtract","duration_add_subtract__add","duration_add_subtract__subtract","absCeil","monthsFromDays","monthsToDays","daysToMonths","as","duration_as__valueOf","makeAs","alias","duration_get__get","makeGetter","substituteTimeAgo","relativeTime","duration_humanize__relativeTime","posNegDuration","thresholds","duration_humanize__getSetRelativeTimeThreshold","threshold","withSuffix","iso_string__toISOString","iso_string__abs","Y","D","total","asSeconds","match1","match2","match3","match4","match6","match1to2","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","defaultLocaleMonths","defaultLocaleMonthsShort","parseTwoDigitYear","getSetYear","defaultLocaleWeek","prototypeMin","prototypeMax","add_subtract__add","add_subtract__subtract","isoWeekYear","getSetDayOfMonth","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","_isPm","defaultLocaleMeridiemParse","getSetHour","getSetMinute","getSetSecond","getSetMillisecond","momentPrototype__proto","toJSON","isoWeeks","isoWeeksInYear","isDST","isDSTShifted","zoneAbbr","zoneName","dates","momentPrototype","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","LL","LLL","defaultInvalidDate","defaultOrdinal","defaultOrdinalParse","defaultRelativeTime","future","past","prototype__proto","firstDayOfYear","ordinalParse","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","duration_prototype__proto","toIsoString","invalid","relativeTimeThreshold","_moment","storageType","expiry","setItem","removeItem","setPrefix","setStorageType","setStorageCookie","setStorageCookieDomain","domain","setNotify","itemSet","itemRemove","webStorage","deriveQualifiedKey","browserSupportsLocalStorage","addToLocalStorage","newvalue","addToCookies","getFromLocalStorage","getFromCookies","getItem","removeFromLocalStorage","removeFromCookies","getKeysForLocalStorage","prefixLength","Description","clearAllFromLocalStorage","regularExpression","prefixRegex","testRegex","clearAllFromCookies","browserSupportsCookies","cookieEnabled","daysToExpiry","expiryDate","cookieDomain","toGMTString","cookiePath","cookies","thisCookie","storedValues","getStorageType","bindToScope","def","lsKey","lengthOfLocalStorage","storage","isSupported","clearAll","deriveKey","FastClick","layer","oldOnClick","trackingClick","trackingClickStart","targetElement","touchStartX","touchStartY","lastTouchIdentifier","touchBoundary","tapDelay","tapTimeout","notNeeded","methods","deviceIsAndroid","onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","capture","rmv","hijacked","adv","propagationStopped","onclick","deviceIsWindowsPhone","deviceIsIOS","deviceIsIOS4","deviceIsIOSWithBadTarget","deviceIsBlackBerry10","needsClick","needsFocus","readOnly","sendClick","clickEvent","touch","changedTouches","createEvent","initMouseEvent","determineEventType","screenX","screenY","forwardedTouchEvent","dispatchEvent","tagName","setSelectionRange","updateScrollParent","scrollParent","fastClickScrollParent","scrollHeight","fastClickLastScrollTop","getTargetElementFromEventTarget","eventTarget","TEXT_NODE","targetTouches","getSelection","rangeCount","isCollapsed","lastClickTime","touchHasMoved","boundary","findControl","labelElement","htmlFor","forElement","targetTagName","cancelNextClick","elementFromPoint","cancelable","permitted","detail","metaViewport","chromeVersion","blackberryVersion","firefoxVersion","ontouchstart","scrollWidth","outerWidth","msTouchAction","touchAction","attach","$locationProvider","currentPath","links","linkPrefix","setupActiveLinks","Capture","resetAll","yielders","resetYielder","setContentFor","defaultContent","defaultScope","putYielder","yielder","getYielder","removeYielder","tElem","rawContent","uiDuplicate","uiContentFor","uiYieldTo","orgHandler","isAncestorOrSelf","outerClickFn","outerClickIf","handleOuterClick","stopWatching","bindOuterClick","uiOuterClick","uiOuterClickIf","statusesMeta","scopes","exclusionGroups","initialize","isNewScope","exclusionGroup","references","setOne","ids","setMany","idOrMap","turnOn","eg","egStatuses","turnOff","isActive","Boolean","referenceCount","uiBindEvent","eventNames","SharedState","uiSharedState","defaultValueExpr","uiDefault","uiExclusionGroup","uiState","methodName","needsInterpolation","exprFn","uiTriggers","parseScopeContext","mixScopeContext","scopeVars","nextKey","parseUiCondition","uiScopeContext","uiIfFn","uiIf","nga","uiHideFn","uiShowFn","uiClassFn","classesToAdd","classesToRemove","Ui","preventTouchmoveDefaultsCb","allowTouchmoveEventFlag","allowTouchmoveDefault","fnTrue","allowTouchmoveDefaultCallback","enabledClassName","canBeFilledWithPoly","nativeOverflow","screen","ua","webkit","wkversion","wkLte534","$1","blackberry","overthrow","forget","scrollIndicatorClassName","configure","ascend","lastDown","lastRight","lastTops","lastLefts","resetVertTracking","resetHorTracking","setPointers","il","pointerEvents","changeScrollTarget","startEvent","tEnd","newTarget","touchchild","initEvent","intercept","touches","touchStartE","scrollT","scrollL","startY","startX","ty","tx","down","side","getTouchY","scrollableContent","scrollable","allowUp","allowDown","lastY","setupTouchstart","clientHeight","currY","up","elementOrNumber","marginTop","offsetTop","h1","h2","scrollableHeader","uiScrollTop","uiScrollBottom","reached","Top","Bottom","parentStyle","adjustParentPadding","marginBottom","defaultStateName","parentClass","visibleClass","activeClass","stateName","trackAsSearchParam","uiTrackAsSearchParam","outerClickCb","defaultActive","closeOnOuterClicks","$drag","changeExpr","unwatchDisabled","setModel","clickCb","transform","TRANSLATE_INSIDE","rh","$touch","$transform","sheet","insertRule","NULL_TRANSFORM","TRANSLATE_BOTH","translateX","distanceX","translateY","distanceY","TRANSLATE_HORIZONTAL","TRANSLATE_UP","TRANSLATE_DOWN","TRANSLATE_LEFT","TRANSLATE_RIGHT","TRANSLATE_VERTICAL","wrapperElementOrRectangle","rw","Element","stepX","stepY","dragOptions","touchOptions","tS","rS","startEventHandler","endEventHandler","moveEventHandler","cancelEventHandler","transformEventHandler","domElement","tO","rO","moving","isMoving","cleanup","undo","createDragInfo","originalTransform","originalRect","startRect","rect","startTransform","__UiSwipeHandled__","VELOCITY_THRESHOLD","MOVEMENT_THRESHOLD","TURNAROUND_MAX","ANGLE_THRESHOLD","defaultOptions","movementThreshold","valid","absAngle","angle","validDistance","distance","validAngle","validVelocity","averageVelocity","$swipe","onSwipe","swipe","VALID","POINTER_EVENTS","mouse","POINTER_TYPES","SENSITIVE_AREA","setPointerEvents","setValid","setMovementThreshold","setSensitiveArea","fnOrElementOrRect","atan2","sqrt","getCoordinates","getEvents","pointerTypes","eventType","pointerType","timediff","buildTouchInfo","t0","tl","ts","ts0","timestamp","tsl","x0","y0","xl","yl","totalXl","totalX","totalYl","totalY","durationl","dxl","dyl","dl","dx","dy","tv","prevX","prevY","velocity","sensitiveArea","startEvents","endEvents","moveEvents","cancelEvents","$movementTarget","resetTouch","coords","mva","mvaRect","cssPrefix","transformProperty","styleProperty","getElementTransformProperty","setElementTransformProperty","SMALL_NUMBER","rad2deg","asin","cloneMatrix","determinant2x2","determinant3x3","a1","a2","a3","b1","b2","b3","c1","c2","c3","determinant4x4","d1","d2","d3","a4","b4","c4","d4","adjoint","inverse","det","transposeMatrix4","v4MulPointByMatrix","v3Length","v3Scale","desiredLength","v3Dot","v3Combine","ascl","bscl","v3Cross","decompose","mat","localMatrix","perspectiveMatrix","rightHandSide","inversePerspectiveMatrix","transposedInversePerspectiveMatrix","perspectivePoint","perspectiveX","perspectiveY","perspectiveZ","perspectiveW","translateZ","pdum3","row","scaleX","skewXY","scaleY","skewXZ","skewYZ","scaleZ","rotateY","rotateX","rotateZ","fCom","toFixed","fPx","fDeg","fromCssMatrix","toCss","perspective","translate","rotation","skew","addMapEntry","pair","addSetEntry","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiToArray","asciiWords","reAsciiWord","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","baseIsNaN","baseIndexOfWith","baseMean","baseSum","NAN","baseProperty","basePropertyOf","baseReduce","baseSortBy","comparer","baseTimes","baseToPairs","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","escapeStringChar","chr","stringEscapes","hasUnicode","reHasUnicode","hasUnicodeWord","reHasUnicodeWord","isHostObject","iteratorToArray","mapToArray","overArg","replaceHolders","PLACEHOLDER","setToArray","setToPairs","stringSize","unicodeSize","asciiSize","stringToArray","unicodeToArray","reUnicode","unicodeWords","reUnicodeWord","runInContext","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","MAX_ARRAY_LENGTH","__views__","lazyClone","copyArray","lazyReverse","lazyValue","isArr","isRight","arrLength","view","getView","iteratees","iterLength","takeCount","nativeMin","LARGE_ARRAY_SIZE","baseWrapperValue","iterIndex","LAZY_MAP_FLAG","LAZY_FILTER_FLAG","Hash","entries","hashClear","__data__","nativeCreate","hashDelete","hashGet","HASH_UNDEFINED","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","Map","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArguments","skipIndexes","isIndex","assignInDefaults","objValue","srcValue","objectProto","assignMergeValue","assignValue","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","isNil","baseClamp","lower","upper","baseClone","isDeep","isFull","customizer","initCloneArray","getTag","isFunc","funcTag","genTag","isBuffer","cloneBuffer","objectTag","argsTag","initCloneObject","copySymbols","cloneableTags","initCloneByTag","stacked","getAllKeys","subValue","baseConforms","baseConformsTo","baseCreate","proto","objectCreate","baseDelay","FUNC_ERROR_TEXT","baseDifference","includes","isCommon","valuesLength","valuesIndex","baseEvery","baseExtremum","isSymbol","baseFill","toInteger","toLength","baseFilter","baseFlatten","isFlattenable","baseForOwn","baseFor","baseForOwnRight","baseForRight","baseFunctions","baseGet","isKey","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","objectToString","baseGt","baseHas","baseHasIn","baseInRange","nativeMax","baseIntersection","arrays","othLength","othIndex","maxLength","baseInverter","baseInvoke","baseIsArrayBuffer","arrayBufferTag","baseIsDate","dateTag","baseIsEqual","bitmask","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","arrayTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","PARTIAL_COMPARE_FLAG","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMap","mapTag","baseIsMatch","matchData","noCustomizer","UNORDERED_COMPARE_FLAG","baseIsNative","isMasked","reIsNative","reIsHostCtor","toSource","baseIsRegExp","regexpTag","baseIsSet","setTag","baseIsTypedArray","isLength","typedArrayTags","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","nativeKeys","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","mergeFunc","isArrayLikeObject","toPlainObject","baseNth","baseOrderBy","orders","getIteratee","criteria","compareMultiple","basePick","basePickBy","basePropertyDeep","basePullAll","basePullAt","indexes","baseRandom","nativeFloor","nativeRandom","baseRange","nativeCeil","baseRepeat","MAX_SAFE_INTEGER","baseRest","otherArgs","baseSet","nested","baseSlice","baseSome","baseSortedIndex","retHighest","low","HALF_MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","MAX_ARRAY_INDEX","baseSortedUniq","baseToNumber","baseToString","symbolToString","INFINITY","baseUniq","createSet","seenIndex","baseUnset","baseUpdate","updater","baseWhile","isDrop","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castSlice","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","cloneMap","cloneFunc","cloneRegExp","reFlags","cloneSet","cloneSymbol","symbol","symbolValueOf","cloneTypedArray","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","othCriteria","ordersLength","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","getSymbols","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","createBaseEach","iterable","createBaseFor","createBind","Ctor","isBind","BIND_FLAG","createCtor","createCaseFirst","trailing","createCompounder","words","deburr","reApos","thisBinding","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","funcs","prereq","thru","getFuncName","getData","isLaziable","ARY_FLAG","CURRY_FLAG","PARTIAL_FLAG","REARG_FLAG","plant","partialsRight","holdersRight","argPos","ary","holdersCount","newHolders","isBindKey","reorder","isFlip","isAry","BIND_KEY_FLAG","CURRY_RIGHT_FLAG","FLIP_FLAG","createInverter","toIteratee","createMathOperation","createOver","arrayFunc","createPadding","charsLength","createPartial","createRange","toFinite","createRelationalOperation","toNumber","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","PARTIAL_RIGHT_FLAG","CURRY_BOUND_FLAG","newData","setData","setWrapToString","createRound","precision","createToPairs","createWrap","mergeData","baseSetData","isPartial","arrValue","othValue","compared","dataViewTag","boolTag","numberTag","errorTag","stringTag","convert","symbolTag","objProps","objLength","othProps","skipCtor","objCtor","othCtor","getAllKeysIn","keysIn","getSymbolsIn","realNames","otherFunc","isKeyable","getNative","transforms","getWrapDetails","reWrapDetails","reSplitDetails","hasPath","hasFunc","getPrototype","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","insertWrapDetails","details","reWrapComment","spreadableSymbol","reIsUint","reIsPlainProp","reIsDeepProp","maskSrcKey","srcBitmask","newBitmask","isCombo","mergeDefaults","oldArray","funcToString","updateWrapDetails","wrapFlags","compact","drop","dropRight","dropRightWhile","dropWhile","fill","findIndex","findLastIndex","flatten","flattenDeep","flattenDepth","fromPairs","initial","nativeJoin","nth","pullAll","pullAllBy","pullAllWith","nativeReverse","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","uniq","uniqBy","uniqWith","unzip","unzipWith","zipObject","zipObjectDeep","tap","wrapperChain","wrapperCommit","wrapperNext","wrapperToIterator","wrapperPlant","wrapperReverse","wrapped","wrapperValue","every","flatMap","flatMapDeep","flatMapDepth","forEachRight","baseEachRight","orderBy","negate","sample","sampleSize","rand","shuffle","curry","curryRight","invokeFunc","lastArgs","lastThis","lastInvokeTime","leadingEdge","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","maxWait","shouldInvoke","trailingEdge","flush","debounced","isInvoking","flip","memoize","memoized","Cache","rest","spread","throttle","partial","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","propertyIsEnumerable","isEmpty","nonEnumShadows","isEqual","isEqualWith","isError","nativeIsFinite","isInteger","isMatch","isMatchWith","isNative","isMaskable","isNull","objectCtorString","isSafeInteger","isWeakMap","weakMapTag","isWeakSet","weakSetTag","iteratorSymbol","MAX_INTEGER","remainder","reTrim","isBinary","reIsBinary","reIsOctal","freeParseInt","reIsBadHex","toSafeInteger","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","mapKeys","mapValues","omitBy","setWith","updateWith","valuesIn","clamp","inRange","floating","freeParseFloat","capitalize","upperFirst","reLatin","deburrLetter","reComboMark","endsWith","reHasUnescapedHtml","reUnescapedHtml","escapeHtmlChar","escapeRegExp","reHasRegExpChar","reRegExpChar","pad","strLength","padEnd","padStart","radix","nativeParseInt","reHasHexPrefix","repeat","templateSettings","assignInWith","isEscaping","isEvaluating","imports","importsKeys","importsValues","reNoMatch","reDelimiters","reInterpolate","reEsTemplate","evaluate","templateCounter","escapeValue","interpolateValue","esTemplateValue","evaluateValue","reUnescapedString","variable","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","attempt","toLower","toUpper","trimEnd","reTrimEnd","trimStart","reTrimStart","DEFAULT_TRUNC_LENGTH","omission","DEFAULT_TRUNC_OMISSION","newEnd","unescape","reHasEscapedHtml","reEscapedHtml","unescapeHtmlChar","cond","conforms","defaultTo","matchesProperty","mixin","methodNames","oldDash","nthArg","propertyOf","stubArray","stubFalse","stubObject","stubString","stubTrue","times","toPath","uniqueId","idCounter","maxBy","mean","meanBy","minBy","sum","sumBy","pick","contextProps","arrayProto","funcProto","coreJsData","IE_PROTO","Buffer","moduleExports","Symbol","isConcatSpreadable","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","DataView","Set","WeakMap","metaMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","reEscape","reEvaluate","promiseTag","ctorString","lastCalled","stamp","HOT_SPAN","HOT_COUNT","reference","configurable","enumerable","reLeadingDot","rePropName","reEscapeChar","difference","differenceBy","differenceWith","intersection","intersectionBy","intersectionWith","pull","pullAt","union","unionBy","unionWith","without","xor","xorBy","xorWith","zip","zipWith","wrapperAt","countBy","findLast","groupBy","invokeMap","isProp","keyBy","partition","sortBy","bindKey","overArgs","funcsLength","partialRight","rearg","gte","nodeIsArrayBuffer","nodeIsDate","isMap","nodeIsMap","nodeIsRegExp","isSet","nodeIsSet","nodeIsTypedArray","lte","assignIn","assignWith","at","defaultsDeep","mergeWith","invertBy","omit","toPairs","toPairsIn","word","kebabCase","lowerFirst","snakeCase","startCase","upperCase","bindAll","flow","flowRight","methodOf","over","overEvery","overSome","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","minuend","subtrahend","entriesIn","extendWith","eachRight","VERSION","filtered","isFilter","LAZY_WHILE_FLAG","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","commit","rsAstralRange","rsComboMarksRange","rsComboSymbolsRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsLowerMisc","rsUpperMisc","rsOptLowerContr","rsOptUpperContr","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsEmoji","rsSymbol","deburredLetters","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","htmlEscapes","&","<","`","htmlUnescapes","&","<",">",""","'","`","\\","\n","\r","
","
","freeGlobal","freeSelf","freeExports","freeModule","freeProcess","process","nodeUtil","ancestors","objectKeys","inheritParams","currentParams","$current","$to","parentParams","inheritList","equalForKeys","filterByKeys","$Resolve","VISIT_IN_PROGRESS","VISIT_DONE","NOTHING","NO_DEPENDENCIES","NO_LOCALS","NO_PARENT","$$promises","$$values","study","invocables","visit","visited","cycle","plan","isResolve","invocableKeys","merged","$$inheritedValues","resolution","$$failure","invocable","onfailure","invocation","waitParams","dep","$TemplateFactory","fromConfig","fromString","fromUrl","templateProvider","fromProvider","UrlMatcher","parentMatcher","addParameter","paramNames","$$UMFP","Param","quoteRegExp","squash","surroundPattern","matchDetails","isSearch","cfg","caseInsensitive","searchPlaceholder","$$new","ParamSet","isOptional","sourceSearch","sourcePath","$$paramNames","$UrlMatcherFactory","valToString","valFromString","getDefaultConfig","isStrictMode","isCaseInsensitive","isInjectable","flushTypeQueue","typeQueue","$types","defaultSquashPolicy","enqueue","defaultTypes","encode","decode","int","any","$$getDefaultValue","strictMode","isMatcher","definitionFn","unwrapShorthand","isShorthand","$$fn","getType","urlType","getArrayMode","arrayDefaults","arrayParamNomenclature","getSquashPolicy","getReplace","arrayMode","configuredKeys","defaultPolicy","$value","hasReplaceVal","$replace","replacement","$asArray","dynamic","$$parent","$$keys","ignore","paramset","paramValues","$$equals","paramValues1","paramValues2","equal","$$validates","rawVal","encoded","$UrlRouterProvider","$urlMatcherFactory","regExpPrefix","handleIfMatch","$match","appendBasePath","isHtml5","absolute","rule","handled","lastPushedUrl","listen","interceptDeferred","sync","read","urlMatcher","$$avoidResync","validates","redirect","handlerIsString","strategies","sticky","deferIntercept","$StateProvider","$urlRouterProvider","isRelative","findState","stateOrName","isStr","rel","pathLength","states","queueState","parentName","flushQueuedChildren","queued","registerState","stateBuilder","$delegates","abstractKey","$stateParams","$state","navigable","transitionTo","isGlob","doesStateMatchGlob","glob","globSegments","$view","$resolve","$urlRouter","handleRedirect","TransitionAborted","retry","$retry","TransitionFailed","retryTransition","transition","TransitionSuperseded","toParams","resolveState","paramsAreFiltered","resolveViews","viewsPromises","views","injectables","controllerProvider","injectLocals","$$controller","$$controllerAs","$$resolveAs","TransitionPrevented","go","fromParams","fromPath","toState","redirectResult","keep","toLocals","reloadState","ownParams","shouldSkipReload","entering","exiting","onExit","onEnter","lossy","nav","nonSearchParamsEqual","fromAndToState","notSearchParam","nonQueryParamKeys","nonQueryParams","nonQueryParamSet","compositeName","abstract","$ViewProvider","$templateFactory","$ViewScrollProvider","useAnchorScroll","$ViewDirective","$uiViewScroll","getRenderer","statics","cb","$animator","previousEl","currentEl","$uiViewData","renderer","$$animLeave","updateView","getUiViewName","previousLocals","latestLocals","animEnter","animLeave","viewAnimData","$animEnter","$animLeave","$ViewDirectiveFill","resolveData","uiView","uiViewCreatedBy","parseStateRef","ref","preparsed","paramExpr","stateContext","stateData","getTypeInfo","isSvg","isForm","isAnchor","clickable","clickHook","ignorePreventDefaultCount","defaultOpts","$StateRefDirective","uiSrefActive","uiSref","unlinkInfoFn","uiSrefOpts","$$addStateInfo","$StateRefDynamicDirective","runStateRefLink","uiStateParams","uiStateOpts","$StateRefActiveDirective","addState","stateParams","stateHash","createStateHash","stateInfo","activeClasses","anyMatch","exactMatch","activeEqClass","uiSrefActiveEq","deregister","$IsStateFilter","$IncludedByStateFilter","includesFilter","searchParams","decodePathArray","reverseString","unquoteDashes","allReversed","paramName","parameters","nTotal","nPath","paramVal","encodeDashes","isPathParam","isDefaultValue","nextSegment","isFinalPathParam","$subPattern","sub","ArrayType","bindTo","arrayWrap","arrayUnwrap","falsey","arrayHandler","allTruthyMode","arrayEqualsHandler","val1","val2","$arrayMode","autoinject","__WEBPACK_EXTERNAL_MODULE_12__","__WEBPACK_EXTERNAL_MODULE_28__","__WEBPACK_EXTERNAL_MODULE_52__","__webpack_require__","moduleId","installedModules","loaded","requireAll","templatesContext","templateName","templateNameWithoutPrefix","cacheTemplateName","configTemplateName","calendarConfig","templateContents","webpackContext","req","webpackContextResolve","./calendar.html","./calendarDayView.html","./calendarHourList.html","./calendarMonthCell.html","./calendarMonthCellEvents.html","./calendarMonthView.html","./calendarSlideBox.html","./calendarWeekView.html","./calendarYearView.html","./mwlCalendar.js","./mwlCalendarDay.js","./mwlCalendarHourList.js","./mwlCalendarMonth.js","./mwlCalendarSlideBox.js","./mwlCalendarWeek.js","./mwlCalendarYear.js","./mwlCollapseFallback.js","./mwlDateModifier.js","./mwlDragSelect.js","./mwlDraggable.js","./mwlDroppable.js","./mwlDynamicDirectiveTemplate.js","./mwlElementDimensions.js","./mwlResizable.js","LOG_PREFIX","calendarTitle","calendarHelper","eventIsValid","startsAt","endsAt","refreshCalendar","vm","viewTitle","viewDate","shouldUpdate","previousView","changeView","newDay","dateClicked","rawDate","nextView","onViewChangeClick","calendarDate","calendarNextView","loadTemplates","templatesLoaded","eventsWatched","cellIsOpen","slideBoxDisabled","customTemplateUrls","onEventClick","onEventTimesChanged","onTimespanClick","onDateRangeSelect","cellModifier","dayViewStart","dayViewEnd","dayViewSplit","dayViewEventChunkSize","templateScope","calendarEventTitle","refreshView","dayViewHeight","getDayViewHeight","getDayView","allDayEvents","nonAllDayEvents","viewWidth","eventDragComplete","minuteChunksMoved","minutesDiff","newStart","tempStartsAt","calendarEvent","calendarNewEventStart","calendarNewEventEnd","eventDragged","eventResizeComplete","edge","eventResized","calendarUtils","updateDays","dayStart","dayEnd","hourGrid","getDayViewHourGrid","dayWidth","hourSegments","calendarCell","originalLocale","eventDropped","adjustEndDateFromStartDiff","getClickedDate","baseDate","onDragSelectStart","dayIndex","dateRangeSelect","startDate","endDate","onDragSelectMove","onDragSelectEnd","calendarRangeStartDate","calendarRangeEndDate","WEEKEND_DAY_NUMBERS","DAYS_IN_WEEK","HOURS_IN_DAY","MINUTES_IN_HOUR","getDaySpan","startOfWeek","span","totalLength","getDayOffset","isEventIsPeriod","periodStart","periodEnd","eventStart","eventEnd","getEventsInPeriod","getWeekDay","today","isPast","isToday","isWeekend","getWeekViewHeader","getWeekView","endOfWeek","eventsMapped","startsBeforeWeek","endsAfterWeek","itemA","itemB","startSecondsDiff","endA","endB","eventRows","allocatedEvents","rowSpan_1","otherRowEvents","nextEvent","getMonthView","eventsInMonth","events_1","inMonth","badgeTotal","rows","rowOffsets","eventWidth","segmentHeight","startOfView","endOfView","previousDayEvents","dayViewEvents","allDay","eventA","eventB","startsBeforeDay","endsAfterDay","hourHeightModifier","overlappingPreviousEvents","previousEvent","previousEventTop","previousEventBottom","dayEvent","segmentDuration","startOfDay","isStart","openRowIndex","weekDays","getWeekDayNames","monthView","monthOffsets","openDayIndex","dayClicked","dayClickedFirstRun","highlightEvent","shouldAddClass","highlightClass","backgroundColor","dayContainsEvent","color","secondary","handleEventDrop","newDayDate","draggedFromDate","calendarDraggedFromDate","getWeekNumberLabel","weekNumber","i18nStrings","calendarCtrl","isOpen","isMonthView","isYearView","cell","showTimes","showTimesOnWeekView","getWeekViewWithTimes","weekDragged","daysDiff","weekResized","tempTimeChanged","openMonthIndex","getYearView","monthClicked","monthClickedFirstRun","monthIndex","newMonthDate","mwlCollapseFallback","shouldCollapse","setToToday","increment","decrement","handleMouseEvent","enableMouseListeners","onMouseDown","onMouseMove","onMouseUp","disableMouseListeners","mwlDragSelect","interact","translateElement","transformValue","snap","snapGridDimensions","snapGrid","createSnapGrid","draggable","onstart","dropData","onDragStart","onmove","axis","onDrag","onend","onDragEnd","mwlDraggable","DROP_ACTIVE_CLASS","dropActiveClass","dropzone","ondragenter","ondragleave","ondropdeactivate","ondrop","onDrop","overrides","setDimensions","mwlElementDimensions","getUnitsResized","unitsResized","originalDimensions","resizeEdge","originalDimensionsStyle","resizable","edges","resizeEdges","deltaRect","onResize","onResizeEnd","mwlResizable","./calendarDate.js","./calendarLimitTo.js","./calendarTruncateEventTitle.js","./calendarTrustAsHtml.js","getFromConfig","dateFormats","formatDate","boxHeight","./calendarConfig.js","./calendarEventTitle.js","./calendarHelper.js","./calendarTitle.js","./interact.js","./moment.js","allDateFormats","weekDay","[object Object]","dateFormatter","titleFormats","displayAllMonthEvents","colorTypes","important","calendarDateFilter","calendarTruncateEventTitleFilter","yearView","monthViewTooltip","weekView","weekViewTooltip","dayView","oldStart","oldEnd","diffInSeconds","getRecurringEventPeriod","eventPeriod","recursOn","containerPeriodStart","eventIsInPeriod","filterEventsInPeriod","startPeriod","endPeriod","allEvents","getBadgeTotal","incrementsBadgeTotal","eventsInPeriod","periodEvents","weekDayLabel","dayLabel","weekViewStart","eventRow","rowEvent","newEvents","flattenedEvents","dayEvents","newDayEvents","dayViewStartM","dayViewEndM","hourHeight","templatePromises","horizontal","cssTo","uibCollapse","getScrollFromElement","expandingExpr","expandDone","expandedExpr","collapse","collapsingExpr","collapseDone","collapsedExpr","expanding","collapsing","collapsed","closeOthers","accordionConfig","openGroup","addGroup","groupScope","removeGroup","heading","panelClass","isDisabled","setHeading","accordionCtrl","openClass","toggleOpen","headingId","panelId","accordionGroupCtrl","getHeaderSelectors","uibAccordionTransclude","closeable","dismissOnTimeout","toggleEvent","buttonConfig","buttonsCtrl","uncheckableExpr","uibUncheckable","uibBtnRadio","uncheckable","getTrueValue","getCheckboxValue","btnCheckboxTrue","getFalseValue","btnCheckboxFalse","clearBufferedTransitions","bufferedTransitions","setActive","slides","slide","goNext","destroyed","currentIndex","$currentTransition","SLIDE_DIRECTION","currentIdx","getCurrentIndex","nextSlide","nextIndex","nextDirection","restartTimer","findSlideIndex","resetTimer","currentInterval","resetTransition","timerFn","isPlaying","addSlide","play","newIndex","noWrap","removeSlide","bufferedIndex","indexOfSlide","isPrevDisabled","isNextDisabled","noPause","noTransition","carouselCtrl","beforeAddClass","directionClass","removeClassFn","beforeRemoveClass","createParser","quoteIndex","inLiteral","formatCodeToRegex","createFormatter","formatter","literalIdx","constructLiteralFormatter","constructFormatterFromIdx","endIdx","currentPosStr","toTimezone","fromTimezone","localeId","SPECIAL_CHARACTERS_REGEXP","parsers","_date","tzOffset","fields","dt","mapper","datesetter","timesetter","ON_REGEXP","IS_REGEXP","linkedScopes","instances","exps","addForExp","removeScope","compareWithExp","expToData","watchFn","compareWithVal","newActivated","thisVal","onExp","lastActivated","removedScope","newWatchScope","onExpMatches","uibIsClass","expsStr","datepickerMode","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","maxDate","maxMode","minDate","minMode","monthColumns","shortcutPropagation","showWeeks","yearColumns","yearRows","datepickerConfig","$datepickerLiteralWarning","$datepickerSuppressError","dateParser","setMode","datepickerOptions","watchListeners","modes","startingDay","ngDisabled","dateObject","activeDate","activeDateId","ngModelCtrl_","initDate","render","selectedDt","_refreshView","activeDt","createDateObject","customClass","dateDisabled","toggleMode","13","32","33","34","35","36","37","38","39","40","focusElement","keydown","altKey","handleKeyDown","DAYS_IN_MONTH","getISO8601WeekNumber","checkDate","setDate","getDates","firstDayOfMonth","numDisplayedFromPreviousMonth","firstDate","labels","weekNumbers","thursdayIndex","numWeeks","curWeek","date1","date2","_date1","_date2","yearHeaderColspan","getStartingYear","columns","yearpickerInit","datepickerCtrl","daypickerCtrl","monthpickerCtrl","SCROLLBAR_WIDTH","BODY_SCROLLBAR_WIDTH","OVERFLOW_REGEX","normal","PLACEMENT_REGEX","auto","vertical","BODY_REGEX","getRawNode","parseStyle","isStaticPositioned","scrollbarWidth","isBody","bodyElem","innerWidth","clientWidth","scrollElem","scrollbarPadding","elemStyle","paddingRight","paddingBottom","widthOverflow","originalRight","heightOverflow","originalBottom","isScrollable","includeHidden","overflowRegex","includeSelf","documentEl","excludeStatic","spStyle","includeMagins","elemOffset","marginLeft","elemBCR","viewportOffset","useDocument","includePadding","offsetBCR","offsetParentBCR","offsetParentStyle","paddingTop","paddingLeft","parsePlacement","placement","autoPlace","positionElements","hostElem","targetElem","appendToBody","targetWidth","targetHeight","hostElemPos","targetElemPos","targetElemStyle","adjustedSize","xOverflow","yOverflow","adjustTop","placementClasses","containerPosition","initialHeight","currentHeight","positionArrow","innerElem","isTooltip","arrowElem","arrowCss","borderProp","borderWidth","borderRadiusProp","borderRadius","altInputFormats","clearText","closeOnDateSelection","closeText","currentText","datepickerPopup","datepickerPopupTemplateUrl","datepickerTemplateUrl","html5Types","onOpenFocus","showButtonBar","$position","datepickerPopupConfig","$datepickerPopupLiteralWarning","parseDateString","dateFormat","documentClickBind","popup","$popup","dpContainsTarget","popupContainsTarget","inputKeydownBind","positionPopup","dpElement","popupPlacement","popupEl","datepickerEl","scrollParentEl","isHtml5DateInput","_ngModel_","datepickerAppendToBody","uibDatepickerPopup","newDateFormat","ng-model","ng-change","template-url","dateSelection","debounceTime","timeoutPromise","appendToOpenClass","openScope","dropdownScope","closeDropdown","keybindFilter","getAutoClose","toggleElement","getToggleElement","dropdownElement","getDropdownElement","focusToggleElement","dropdownElementTargeted","toggleElementTargeted","isKeynavEnabled","focusDropdownEntry","dropdownConfig","uibDropdownService","getIsOpen","setIsOpen","toggleInvoker","onToggle","keynavEnabled","dropdownAppendTo","appendToEl","dropdownAppendToBody","keyboardNav","dropdownMenu","autoClose","getElement","wasOpen","rightalign","appendOffset","openContainer","hasOpenClass","dropdownMenuTemplateUrl","tplContent","newEl","dropdownCtrl","dropdownNested","tplUrl","toggleDropdown","aria-haspopup","aria-expanded","createNew","removeTop","hasKey","setResolver","resolves","resolveObj","resolveIter","$modalStack","modalInClass","NOW_CLOSING_EVENT","setIsAsync","modalOptions","backdropClass","windowTopClass","modal","getTop","backdrop","dismiss","$isRendered","modalRenderDeferObj","animationPromise","modalRendered","inputWithAutofocus","modalAnimation","uibModalAnimationClass","$$multiMap","$$stackedMap","$uibPosition","isVisible","getClientRects","backdropIndex","topBackdropIndex","opened","openedWindows","topModalIndex","removeModalWindow","modalInstance","elementToReceiveFocus","modalWindow","appendToElement","previousTopOpenedModal","modalDomEl","removeAfterAnimate","modalScope","modalBodyClass","openedClass","OPENED_MODAL_CLASS","openedClasses","areAnyOpen","toggleTopWindowClass","closedDeferred","checkRemoveBackdrop","toggleSwitch","backdropDomEl","backdropScopeRef","backdropScope","domEl","afterAnimating","asyncDeferred","asyncPromise","keydownListener","keyboard","loadFocusElementList","focusChanged","isFocusInFirstItem","isModalFocused","focusLastFocusableElement","isFocusInLastItem","focusFirstFocusableElement","broadcastClosing","resultOrReason","closing","tabbableSelector","newBackdropIndex","modalOpener","renderDeferred","currBackdropIndex","ng-style","uib-modal-animation-class","modal-in-class","modal-instance","windowTemplateUrl","window-top-class","role","aria-labelledby","ariaLabelledBy","aria-describedby","ariaDescribedBy","tabindex","windowClass","$$topModalIndex","$$uibDestructionScheduled","dismissAll","topModal","srcElement","modalDomE1","$modalProvider","$uibResolve","getTemplatePromise","$modal","promiseChain","getPromiseChain","resolveWithTemplate","templateAndResolvePromise","modalResultDeferred","modalOpenedDeferred","modalClosedDeferred","modalRenderDeferred","rendered","samePromise","tplAndVars","constructLocals","instanceOnScope","injectable","$uibModalInstance","providedScope","$close","$dismiss","ctrlInstance","ctrlInstantiate","ctrlLocals","setNumPages","numPages","_watchers","itemsPerPage","totalPages","calculateTotalPages","updatePage","newTotal","oldTotal","totalItems","page","selectPage","clickAllowed","noPrevious","noNext","uibPaging","uibPagerConfig","align","previousText","nextText","paginationCtrl","uibPaginationConfig","makePage","getPages","currentPage","pages","startPage","endPage","isMaxSized","maxSize","rotate","pageLabel","forceEllipses","boundaryLinkNumbers","previousPageSet","secondPageLink","firstPageLink","nextPageSet","secondToLastPageLink","lastPageLink","$page","boundaryLinks","directionLinks","originalRender","firstText","lastText","placementClassPrefix","popupDelay","popupCloseDelay","useContentExp","triggerMap","outsideClick","none","globalOptions","setTriggers","triggers","keypressListener","openedTooltips","ttType","defaultTriggerShow","getTriggers","startSym","endSym","tooltipLinker","tooltipCtrl","toggleTooltipBind","ttScope","hideTooltipBind","showTooltipBind","hasEnableExp","cancelHide","prepareTooltip","showTimeout","cancelShow","hideTimeout","createTooltip","assignIsOpen","positionTooltip","positionTimeout","transitionTimeout","removeTooltip","tooltip","tooltipLinkedScope","prepObservers","unregisterObservers","contentParse","popupClass","lastPlacement","closeDelay","isOpenParse","observers","repositionScheduled","bodyHideTooltipBind","prepTriggers","showTriggers","hideTriggers","unregisterTriggers","ttPosition","elementPos","adjustment","origScope","contentExp","appendToBodyVal","appendKey","tooltipTemplateTranscludeScope","parseAsResourceUrl","uibTooltipTemplateTransclude","tooltipAnimationClass","$uibTooltip","originScope","uibTitle","progressConfig","getMaxOrDefault","maxParam","bars","addBar","bar","recalculatePercentage","totalPercentage","removeBar","progressCtrl","stateOn","stateOff","enableReset","titles","ratingConfig","tmpTitles","ratingStates","buildTemplateObjects","getTitle","rate","readonly","newViewValue","onHover","onLeave","onKeydown","ratingCtrl","findTabIndex","tabs","oldIndex","previousIndex","previousSelected","tab","onDeselect","$selectedIndex","onSelect","addTab","newActiveIndex","removeTab","newActiveTabIndex","justified","tabsetCtrl","$transcludeFn","isTabHeading","uibTabContentTransclude","headingElement","hourStep","minuteStep","secondStep","showMeridian","showSeconds","meridians","readonlyInput","mousewheel","arrowkeys","showSpinners","timepickerConfig","getHoursFromTemplate","meridian","getMinutesFromTemplate","getSecondsFromTemplate","noPad","keyboardChange","makeValid","updateTemplate","invalidHours","invalidMinutes","invalidSeconds","padHours","addSecondsToSelected","addSeconds","addMinutes","newDate","modelIsEmpty","hoursInputEl","minutesInputEl","secondsInputEl","setupMousewheelEvents","setupArrowkeyEvents","setupInputEvents","noIncrementHours","incrementedSelected","noDecrementHours","decrementedSelected","noIncrementMinutes","noDecrementMinutes","noIncrementSeconds","noDecrementSeconds","noToggleMeridian","isScrollingUp","wheelDelta","deltaY","incrementHours","decrementHours","incrementMinutes","decrementMinutes","incrementSeconds","decrementSeconds","updateHours","updateMinutes","updateSeconds","invalidate","setSeconds","toggleMeridian","uibTimepickerConfig","timepickerCtrl","TYPEAHEAD_REGEXP","itemName","viewMapper","modelMapper","originalScope","$$debounce","typeaheadParser","fireRecalculating","moveInProgress","debouncedRecalculate","recalculatePosition","HOT_KEYS","eventDebounceTime","minLength","typeaheadMinLength","waitTime","typeaheadWaitMs","isEditable","typeaheadEditable","isLoadingSetter","typeaheadLoading","isSelectEvent","typeaheadShouldSelect","vals","onSelectCallback","typeaheadOnSelect","isSelectOnBlur","typeaheadSelectOnBlur","isNoResultsSetter","typeaheadNoResults","inputFormatter","typeaheadInputFormatter","typeaheadAppendToBody","typeaheadAppendTo","focusFirst","typeaheadFocusFirst","selectOnExact","typeaheadSelectOnExact","isOpenSetter","typeaheadIsOpen","showHint","typeaheadShowHint","parsedModel","$setModelValue","parserResult","uibTypeahead","offDestroy","popupId","aria-autocomplete","aria-owns","inputsContainer","hintInputElem","border-color","box-shadow","background","vertical-align","background-color","popUpEl","move-in-progress","query","assign-is-open","typeaheadTemplateUrl","typeaheadPopupTemplateUrl","resetHint","resetMatches","activeIdx","getMatchId","inputIsExactMatch","inputValue","getMatchesAsync","onCurrentRequest","debounceUpdate","firstLabel","scheduleSearchWithTimeout","cancelPreviousTimeout","$item","$model","$label","typeaheadFocusOnSelect","shouldSelect","editable","dismissClickHandler","_modelCtrl","_ngModelOptions","candidateViewValue","emptyViewValue","popupTemplateUrl","isDropdownOpen","matchIdx","selectActive","selectMatch","tplEl","escapeRegexp","queryToEscape","containsHtml","matchItem","isSanitizePresent","$$uibCarouselCss","$$uibDatepickerCss","$$uibPositionCss","$$uibDatepickerpopupCss","$$uibTooltipCss","$$uibTimepickerCss","$$uibTypeaheadCss","realWindow","blank","_window","thing","Window","isDocFrag","DocumentFragment","isBool","trySelector","pointerExtend","deprecated","vendor","prefixedPropREs","copyCoords","client","setEventXY","targetObj","pointers","interaction","pointer","pointerAverage","getPageXY","tmpXY","getClientXY","setEventDeltas","hypot","vx","vy","isNativePointer","supportsTouch","Touch","getXY","xy","isOperaMobile","scrollX","scrollY","getScrollXY","getPointerId","pointerId","getActualElement","SVGElementInstance","correspondingUseElement","rootNode","getElementClientRect","clientRect","SVGElement","getElementRect","isIOS7","getTouchPair","average","touchBBox","minX","minY","maxX","maxY","touchDistance","deltaSource","sourceX","sourceY","touchAngle","prevAngle","atan","dr","drClamped","getOriginXY","interactable","origin","getRect","_getQBezierValue","iT","getQuadraticCurvePoint","cpX","cpY","endX","endY","easeOutQuad","nodeContains","inContext","_context","testIgnore","interactableElement","ignoreFrom","matchesUpTo","testAllow","allowFrom","checkAxis","thisAxis","drag","checkSnap","checkRestrict","checkAutoScroll","autoScroll","withinInteractionLimit","maxActions","maxPerElement","activeInteractions","targetCount","targetElementCount","interactions","otherAction","prepared","interacting","maxInteractions","indexOfDeepestElement","deepestZone","deepestZoneParents","dropzoneParents","HTMLElement","SVGSVGElement","ownerSVGElement","previousSibling","Interaction","dropTarget","dropElement","prevDropTarget","prevDropElement","matchElements","inertiaStatus","smoothEnd","ending","upCoords","xe","ye","sx","sy","vx0","vys","resumeDx","resumeDy","lambda_v0","one_ve_v0","boundInertiaFrame","inertiaFrame","boundSmoothEndFrame","smoothEndFrame","activeDrops","dropzones","rects","pointerIds","downTargets","downTimes","holdTimers","prevCoords","curCoords","startCoords","pointerDelta","downEvent","downPointer","_eventTarget","_curEventTarget","prevEvent","tapTime","prevTap","startOffset","restrictOffset","snapOffsets","gesture","startDistance","prevDistance","startAngle","snapStatus","realX","realY","snappedX","snappedY","restrictStatus","restrictedX","restrictedY","restricted","pointerIsDown","pointerWasMoved","gesturing","dragging","resizing","resizeAxes","getInteractionFromPointer","mouseEvent","inertia","allowResume","supportsPointerEvent","doOnInteractions","curEventTarget","prevTouchTime","_updateEventTargets","InteractEvent","starting","relativePoints","elementRect","clientX0","clientY0","buttons","zeroResumeDelta","resize","square","axes","ds","da","prevScale","velocityX","velocityY","overlap","preventOriginalDefault","getActionCursor","cursor","actionCursors","cursorKey","edgeNames","checkResizeEdge","defaultActionChecker","shouldResize","actionIsEnabled","resizeOptions","validateAction","actionName","delegateListener","useCapture","fakeEvent","delegated","delegatedEvents","delegateUseCapture","interactables","Interactable","_element","_iEvents","pEventTypes","pointerDown","pointerHover","_doc","documents","listenToDocument","warnOnce","warned","endAllInteractions","pointerEnd","PointerEvent","MSPointerEvent","selectorDown","pointerMove","pointerOver","pointerOut","pointerUp","pointerCancel","autoScrollMove","frameElement","parentDoc","windowParentError","checkAndPreventDefault","useAttachEvent","currentAction","ie8MatchesSelector","prefixedMatchesSelector","dynamicDrop","accept","actionChecker","styleCursor","dropChecker","manualStart","preserveAspectRatio","perAction","endOnly","offsets","resistance","minSpeed","endSpeed","smoothEndDuration","_holdDuration","dtx","prevTimeX","dty","prevTimeY","isScrolling","cancelFrame","reqFrame","DocumentTouch","pointerMoveTolerance","atob","resizex","resizey","resizexy","resizetop","resizeleft","resizebottom","resizeright","resizetopleft","resizebottomright","resizetopright","resizebottomleft","wheelEvent","eventTypes","globalEvents","appName","platform","appVersion","elementIndex","typeCount","attachedListeners","supplied","useCount","listenerIndex","preventDef","stopProp","stopImmProp","addEvent","cancelBubble","_elements","_targets","_attachedListeners","ptr","pushCurMatches","curMatches","curMatchElements","prevTargetElement","addPointer","elementInteractable","elementAction","getAction","forEachSelector","validateSelector","pushMatches","eventCopy","pointerIndex","pointerHold","collectEventTargets","forceAction","newAction","setModifications","preEnd","shouldMove","shouldSnap","shouldRestrict","setSnapping","setRestriction","setStartOffsets","snapOffset","pageUp","clientUp","inertiaPosition","recordPointer","duplicateMove","absX","absY","targetAxis","thisInteraction","getDraggable","selectorInteractable","dragStart","dragEvent","setActiveDrops","dropEvents","getDropEvents","activate","fireActiveDrops","dragMove","draggableElement","getDrop","resizeStart","resizeEvent","linkedEdges","_linkedEdges","resizeStartAspectRatio","resizeRects","resizeMove","invertible","originalEdges","gestureStart","gestureEvent","gestureMove","removePointer","ie8Dblclick","endEvent","inertiaOptions","pointerSpeed","inertiaPossible","endSnap","endRestrict","snapRestrict","vy0","v0","calcInertia","statusObject","useStatusXY","modifiedXe","modifiedYe","deactivate","collectDrops","drops","dropElements","prevElement","dragElement","possibleDrops","validDrops","dropCheck","dropIndex","pointerEvent","dragLeave","prevDropzone","dragEnter","dragmove","clearTargets","lambda","te","quadPoint","collectSelectors","firePointers","createNewDoubleTap","originalPointer","doubleTap","matchElement","pageCoords","relIndex","snapChanged","restriction","prevent","inertiaDur","innerHeight","interactionListeners","indexOfElement","setOnEvents","phases","ondropactivate","ondropmove","oninertiastart","setPerAction","checker","dropped","dropOverlap","dragRect","cx","cy","overlapArea","overlapRatio","squareResize","gesturable","setOptions","thisOption","gridOffset","grid","anchors","elementOrigin","allActions","rectChecker","iEvent","onEvent","eventList","matchFound","useCap","perActions","setting","enableDragging","enableResizing","enableGesturing","downTime","getPointerAverage","getTouchBBox","getTouchDistance","getTouchAngle","offsetX","offsetY","gridx","gridy","newX","newY","lastTime","vendors","currTime","timeToCall","$TouchProvider","ngClickOverrideEnabled","ngClickDirectiveAdded","ngTouchClickDirectiveFactory","makeSwipeDirective","ngTouch","MAX_VERTICAL_DISTANCE","MAX_VERTICAL_RATIO","MIN_HORIZONTAL_DISTANCE","validSwipe","deltaX","swipeHandler","MOVE_BUFFER_RADIUS","lastPos","hit","x1","y1","x2","y2","CLICKBUSTER_THRESHOLD","checkAllowableRegions","touchCoordinates","lastPreventedTime","PREVENT_DURATION","lastLabelClickCoordinates","preventGhostClick","TAP_DURATION","MOVE_TOLERANCE","ACTIVE_CLASS_NAME","resetState","tapping","tapElement","clickHandler","ngClick","dist","touchend","KEY","TAB","ENTER","ESC","SPACE","LEFT","UP","RIGHT","DOWN","SHIFT","CTRL","ALT","PAGE_UP","PAGE_DOWN","HOME","END","BACKSPACE","DELETE","COMMAND","MAP","91","8","9","16","17","18","19","20","27","43","44","45","46","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","186","187","188","189","190","191","192","219","220","221","222","isControl","isFunctionKey","isVerticalMovement","isHorizontalMovement","toSeparator","sep","latestId","uis","theme","searchEnabled","sortable","refreshDelay","closeOnSelect","skipFocusser","dropdownPosition","removeSelected","resetSearchInput","generateId","boundingClientRect","uiSelectConfig","RepeatParser","uiSelectMinErr","groupByExp","groupFilterExp","groupFilter","getGroupNgRepeatExpression","choices","repeatExpression","rowsInner","clickTarget","$select","parseRepeatAttr","disableChoiceExpression","uiDisableChoice","onHighlightCallback","onHighlight","activeIndex","tagging","isActivated","minimumInputLength","$$uisDebounce","_findIndex","_resetSearchInput","EMPTY_SEARCH","_groupsFilter","groupNames","_updateItemDisabled","disabledItemIndex","disabledItems","_isItemDisabled","_initaliseLockedChoices","doInitalise","_updateItemLocked","isLocked","lockedItemIndex","lockedItems","_isItemlocked","itemScope","itemIndex","lockChoiceExpression","_handleDropDownSelection","processed","_ensureHighlightVisible","highlighted","posY","isGrouped","paste","focusser","fct","taggingTokens","clickTriggeredSelect","searchInput","initSearchValue","avoidReset","taggingLabel","animateHandler","focusSearchInput","findGroupByName","repeatAttr","updateGroups","groupFn","groupName","groupFilterFn","setPlainItems","setItemsFn","itemProperty","originalSource","createArrayFromObject","origSrc","$uisSource","refreshItems","selectedItems","filteredItems","selectedItem","calculateDropdownPos","_refreshDelayPromise","refreshAttr","_isItemSelected","isTag","setFocus","focusInput","sizeWatch","updaterScheduled","sizeSearchInput","calculateContainerWidth","updateIfVisible","containerWidth","inputWidth","offsetLeft","tagged","clipboardData","oldsearch","uisOffset","combined","inputId","onDocumentClick","focusableControls","targetController","positionDropdown","originalWidth","resetDropdown","generatedId","baseTitle","focusserTitle","focusserId","onRemoveCallback","onRemove","choiceGrouped","taggingEval","autofocus","focusOn","transcluded","transcludedMatch","transcludedChoices","transcludedNoChoice","dropdown","directionUpClassName","setDropdownPosUp","offsetDropdown","setDropdownPosDown","calculateDropdownPosAfterAnimation","needsCalculated","multi","setAllowClear","allow","allowClear","uiLockChoice","activeMatchIndex","updateModel","refreshComponent","removeChoice","removedChoice","getPlaceholder","_getCaretPosition","selectionStart","_handleMatchSelection","getNewActiveMatchIndex","$selectMultiple","curr","caretPosition","_findCaseInsensitiveDupe","hasDupe","origItem","_findApproxDupe","dupeIndex","tempArr","mockObj","resultMultiple","checkFnMultiple","propsItemNameMatches","tagItems","tagItem","stashArr","hasTag","itemsWithoutTag","checkFnSingle","uiSelectSort","$ngModel","uiSelectSortOptions","draggingClassName","droppingClassName","droppingBeforeClassName","droppingAfterClassName","dataTransfer","dropTimeout","dragOverHandler","layerY","layerX","dropHandler","droppedItemIndex","_dropHandler","theList","itemToMove","onOpenCloseCallback","uisOpenClose","previousState","filterMatch","grouped","$SanitizeProvider","toMap","lowercaseKeys","htmlParserImpl","inertBodyElement","mXSSAttempts","$sanitizeMinErr","stripCustomNsAttrs","attrToMap","encodeEntities","SURROGATE_PAIR_REGEXP","hi","NON_ALPHANUMERIC_REGEXP","htmlSanitizeWriterImpl","buf","uriValidator","ignoreCurrentElement","blockedElements","validElements","lkey","validAttrs","uriAttrs","voidElements","attrNode","removeAttributeNode","svgEnabled","svgElements","htmlParser","htmlSanitizeWriter","enableSvg","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","implementation","createHTMLDocument","docElement","getDocumentElement","bodyElements","sanitizeText","writer","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","addText","addLink","linkAttributes","attributesFn","$httpProvider","cfpLoadingBar","setComplete","startTimeout","reqsCompleted","reqsTotal","isCached","latencyThreshold","ignoreLoadingBar","rejection","autoIncrement","includeSpinner","includeBar","startSize","parentSelector","spinnerTemplate","loadingBarTemplate","_start","completeTimeout","started","$parentSelector","$after","loadingBarContainer","spinner","_set","pct","loadingBar","incTimeout","_inc","_status","rnd","stat","_completeAnimation","_complete","inc","and","or","reTree","CHROME","FIREFOX","SAFARI","OPERA","IE","MS_EDGE","PS4","VITA","UNKNOWN","ANDROID","I_PAD","IPHONE","I_POD","BLACKBERRY","FIREFOX_OS","CHROME_BOOK","WINDOWS_PHONE","WINDOWS","MAC","IOS","LINUX","UNIX","CHROME_OS","WINDOWS_3_11","WINDOWS_95","WINDOWS_ME","WINDOWS_98","WINDOWS_CE","WINDOWS_2000","WINDOWS_XP","WINDOWS_SERVER_2003","WINDOWS_VISTA","WINDOWS_7","WINDOWS_8_1","WINDOWS_8","WINDOWS_10","WINDOWS_PHONE_7_5","WINDOWS_PHONE_8_1","WINDOWS_PHONE_10","WINDOWS_NT_4_0","deviceDetector","DEVICES","BROWSERS","OS","deviceInfo","isMobile","device","isAndroid","isIOS","os","OS_VERSIONS","OS_RE","BROWSERS_RE","DEVICES_RE","OS_VERSIONS_RE","BROWSER_VERSIONS_RE_MAP","BROWSER_VERSIONS_RE","browser","os_version","browser_version","isTablet","isDesktop","toBoolean","AngularPrint","classList","print","printIf","printTable","tds","minView","maxView","startView","autoclose","leftArrow","rightArrow","yearsFormat","monthsFormat","daysFormat","hoursFormat","secondsFormat","minutesStep","secondsStep","change","momentToDate","valueUpdate","valueMoment","limits","isAfterOrEqualMin","minDateMoment","isBeforeOrEqualMax","maxDateMoment","isSelectable","checkValue","checkView","decade","detectMinMax","picker","selectable","setParentView","decadeView","fourYears","setYear","fourMonths","threeHours","setHour","hourView","minutesFormat","setMinute","minuteView","setSecond","_handled","_deferreds","setImmediate","_setImmediateFn","_setUnhandledRejectionFn","writable","delete","A","ShadowDOMPolyfill","wrapIfNeeded","uid_","takeRecords","callback_","nodes_","removeTransientObservers","subtree","records_","C","addedNodes","removedNodes","attributeNamespace","transientObservedNodes","JsMutationObserver","postMessage","observe","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","disconnect","addListeners_","removeListeners_","addTransientObserver","handleEvent","relatedNode","namespaceURI","attrChange","MutationEvent","ADDITION","prevValue","MutationObserver","_isPolyfilled","performance","mozRequestAnimationFrame","mozCancelAnimationFrame","CustomEvent","initCustomEvent","bubbles","WebComponents","CustomElements","addModule","initializeModules","hasNative","registerElement","isIE","useNative","HTMLImports","shadowRoot","olderShadowRoot","IMPORT_LINK_TYPE","forDocumentTree","forSubtree","upgrade","__upgraded__","__attached","attachedCallback","detachedCallback","DOCUMENT_FRAGMENT_NODE","__watched","dom","localName","_URL","groupEnd","__observer","baseURI","hasPolyfillMutations","hasThrottledAttached","createShadowRoot","watchShadow","upgradeDocumentTree","upgradeDocument","upgradeSubtree","upgradeAll","attached","HTMLTemplateElement","decorate","getRegisteredDefinition","__proto__","getOwnPropertyNames","getOwnPropertyDescriptor","createdCallback","upgradeWithDefinition","implementPrototype","__name","lifecycle","ancestry","_polyfilled","attributeChangedCallback","createElementNS","registry","reservedTagList","readyTime","elapsed","unwrapIfNeeded","__importsParsingHook","Trix","ZERO_WIDTH_SPACE","NON_BREAKING_SPACE","OBJECT_REPLACEMENT_CHARACTER","BasicObject","proxyMethod","toMethod","toProperty","__super__","fromJSONString","fromJSON","hasSameConstructorAs","isEqualTo","contentsForInspection","toJSONString","toUTF16String","UTF16String","getCacheKey","normalizeSpaces","summarizeStringChange","added","removed","utf16String","codepoints","fromCodepoints","objectsAreEqual","arraysAreEqual","arrayStartsWith","spliceArray","summarizeArrayChange","getAllAttributeNames","getTextAttributeNames","getBlockAttributeNames","getBlockConfig","blockAttributes","getTextConfig","textAttributes","getListAttributeNames","listAttribute","onElement","matchingSelector","withCallback","inPhase","findClosestElementFromNode","handleEventOnce","triggerEvent","elementMatchesSelector","untilNode","findInnerElement","innerElementIsActive","elementContainsNode","findNodeFromContainerAndOffset","findElementFromContainerAndOffset","findChildIndexOfNode","walkTree","onlyNodesOfType","usingFilter","expandEntityReferences","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","SHOW_COMMENT","SHOW_ALL","createTreeWalker","makeElement","contenteditable","dataset","cloneFragment","makeFragment","getBlockTagNames","blockTagNames","nodeIsBlockContainer","nodeIsBlockStartComment","nodeProbablyIsBlockContainer","nodeIsBlockStart","nodeIsCommentNode","COMMENT_NODE","nodeIsCursorTarget","nodeIsTextNode","nodeIsAttachmentElement","AttachmentView","attachmentSelector","nodeIsEmptyTextNode","normalizeRange","rangeIsCollapsed","rangesAreEqual","extendsTagName","defaultCSS","getDOMSelection","getDOMRange","getRangeAt","setDOMRange","removeAllRanges","addRange","selectionChangeObserver","startContainer","endContainer","fromCommonAttributesOfObjects","getKeys","getKeysCommonToHash","ObjectGroup","objects","asTree","groupObjects","canBeGrouped","canBeGroupedWith","getObjects","getDepth","ObjectMap","ElementStore","trixStoreKey","Operation","isPerforming","performing","hasPerformed","performed","hasSucceeded","succeeded","hasFailed","perform","release","ucs2String","ucs2Length","fromUCS2String","offsetToUCS2Offset","offsetFromUCS2Offset","fromCodePoint","bold","bullets","byte","bytes","captionPlaceholder","captionPrompt","heading1","indent","italic","numbers","outdent","redo","strike","unlink","urlPlaceholder","GB","KB","MB","PB","TB","attachment","typePrefix","captionEdited","captionEditor","editingCaption","removeButton","default","nestable","breakOnReturn","plaintext","bulletList","bullet","numberList","fileSize","inheritable","fontStyle","groupTagName","frozen","serializers","application/json","Document","fromHTML","toSerializableDocument","text/html","DocumentView","deserializers","serializeToContentType","deserializeFromContentType","toolbar","undoInterval","cursorTarget","trixSelection","trixCursorTarget","trixSerialize","selectionElements","ObjectView","childViews","rootView","getNodes","createNodes","parentView","invalidateViewForObject","findViewForObject","findOrCreateCachedChildView","getCachedViewForObject","recordChildView","createChildView","cacheViewForObject","viewClass","ObjectGroupView","getAllChildViews","findElement","findElementForObject","getViewCache","isViewCachingEnabled","viewCache","shouldCacheViews","enableViewCaching","disableViewCaching","garbageCollectCachedViews","objectGroup","getChildViews","createContainerElement","Controller","didMutate","mutations","findSignificantMutations","elementDidMutate","getMutationSummary","mutationIsSignificant","nodesModifiedByMutation","nodeIsSignificant","nodeIsMutable","getTextMutationSummary","getTextChangesFromCharacterData","additions","deletions","getTextChangesFromChildList","textAdded","textDeleted","getMutationsByType","FileVerificationOperation","FileReader","readAsArrayBuffer","CompositionInput","inputController","responder","inputSummary","deleteInDirection","selectionIsExpanded","insertPlaceholder","requestRender","getSelectedRange","selectPlaceholder","forgetPlaceholder","canApplyToDocument","setInputSummary","preferDocument","inputControllerWillPerformTyping","setSelectedRange","insertString","requestReparse","getEndData","isEnded","InputController","resetInputSummary","mutationObserver","handlerFor","keyNames","handleInput","editorWillSyncDocumentView","editorDidSyncDocumentView","inputControllerDidRequestRender","inputControllerDidRequestReparse","isComposing","inputControllerDidAllowUnhandledInput","mutationIsExpected","didDelete","positionIsBlockBreak","compositionInput","attachFiles","inputControllerWillAttachFiles","insertFiles","inputControllerDidReceiveKeyboardCommand","keypress","textInput","dragenter","dragstart","serializeSelectionToDataTransfer","draggedRange","inputControllerDidStartDrag","dragover","canAcceptDataTransfer","draggingPoint","inputControllerDidReceiveDragOverPoint","dragend","inputControllerDidCancelDrag","files","setLocationRangeFromPointRange","inputControllerWillMoveText","moveTextFromRange","insertDocument","cut","inputControllerWillCutText","testClipboardData","getPastedHTMLUsingHiddenElement","inputControllerWillPasteText","insertHTML","inputControllerDidPaste","insertText","Text","textForStringWithAttributes","getAsFile","insertFile","compositionstart","getCompositionInput","compositionupdate","compositionend","backspace","return","insertLineBreak","canIncreaseNestingLevel","increaseNestingLevel","selectionIsInCursorTarget","moveCursorInDirection","updatePosition","canDecreaseNestingLevel","decreaseNestingLevel","expandSelectionInDirection","alt","meta","inputControllerWillHandleInput","inputControllerDidHandleInput","getSelectedDocument","Files","application/x-trix-feature-detection","AttachmentEditorController","attachmentPiece","uninstall","didKeyDownCaption","didChangeCaption","didClickCaption","didClickRemoveButton","install","undos","makeElementMutable","isPreviewable","makeCaptionEditable","addRemoveButton","do","trixMutable","editCaption","getCaption","attachmentEditorDidRequestRemovalOfAttachment","attachmentEditorDidRequestUpdatingAttributesForAttachment","attachmentEditorDidRequestRemovingAttributeForAttachment","attachmentEditorDidRequestDeselectingAttachment","didUninstallAttachmentEditor","uploadProgressDelegate","piece","createContentNodes","getClassName","getContent","createCaptionElement","trixAttachment","trixContentType","getContentType","trixId","getAttributesForAttachment","trixAttributes","isPending","progressElement","getUploadProgress","getHref","getFilename","getFormattedFilesize","getExtension","findProgressElement","attachmentDidChangeUploadProgress","PreviewableAttachmentView","previewDelegate","updateAttributesForImage","getURL","getPreviewURL","getWidth","getHeight","attachmentDidChangePreviewURL","PieceView","getAttributes","textConfig","createAttachmentNodes","createStringNodes","preserveSpaces","isLast","isFirst","followsWhitespace","TextView","getPieces","BlockView","getLastAttribute","shouldAddExtraNewlineElement","elementStore","shadowElement","getBlocks","isSynced","createDocumentFragmentForSync","didSync","CompositionController","composition","didClickAttachment","didBlur","didFocus","documentView","focused","compositionControllerDidFocus","blurPromise","compositionControllerDidBlur","findAttachmentForElement","compositionControllerDidSelectAttachment","revision","compositionControllerWillSyncDocumentView","reinstallAttachmentEditor","compositionControllerDidSyncDocumentView","compositionControllerDidRender","rerenderViewForObject","refreshViewCache","installAttachmentEditorForAttachment","attachmentEditor","uninstallAttachmentEditor","getAttachmentPieceForAttachment","editAttachmentCaption","compositionControllerWillUpdateAttachment","updateAttributesForAttachment","removeAttributeForAttachment","compositionControllerDidRequestRemovalOfAttachment","compositionControllerDidRequestDeselectingAttachment","getAttachmentById","ToolbarController","didKeyDownDialogInput","didClickDialogButton","didClickAttributeButton","didClickActionButton","resetDialogInputs","toolbarDidClickButton","getDialog","toggleDialog","toolbarDidInvokeAction","toolbarDidToggleAttribute","refreshAttributeButtons","hideDialog","updateActions","refreshActionButtons","eachActionButton","updateAttributes","eachAttributeButton","dialogIsVisible","applyKeyboardCommand","showDialog","toolbarWillShowDialog","toolbarDidShowDialog","willValidate","checkValidity","toolbarDidUpdateAttribute","toolbarDidRemoveAttribute","toolbarDidHideDialog","ImagePreloadOperation","Image","naturalWidth","naturalHeight","Attachment","releaseFile","didChangeAttributes","previewablePattern","attachmentForFile","attributesForFile","setFile","filename","filesize","setAttributes","attachmentDidChangeAttributes","preloadURL","getFilesize","getFile","preloadFile","releasePreloadedFile","uploadProgress","setUploadProgress","previewURL","preloadingURL","setPreviewURL","preload","fileObjectURL","createObjectURL","revokeObjectURL","Piece","registerType","copyWithAttributes","copyWithAdditionalAttributes","copyWithoutAttribute","getAttributesHash","getCommonAttributes","pieceList","getPieceAtIndex","eachPiece","hasSameStringValueAsPiece","hasSameAttributesAsPiece","isBlockBreak","isSerializable","getLength","canBeConsolidatedWith","AttachmentPiece","ensureAttachmentExclusivelyHasAttribute","toConsole","StringPiece","consolidateWith","splitAtOffset","SplittableList","eachObject","insertObjectAtIndex","insertSplittableListAtIndex","insertSplittableListAtPosition","splitObjectAtPosition","editObjectAtIndex","replaceObjectAtIndex","removeObjectAtIndex","getObjectAtIndex","getSplittableListInRange","splitObjectsAtRange","selectSplittableList","removeObjectsInRange","transformObjectsInRange","getObjectAtPosition","findIndexAndOffsetAtPosition","consolidate","consolidateFromIndexToIndex","findPositionAtIndexAndOffset","getEndPosition","endPosition","textForAttachmentWithAttributes","copyWithPieceList","copyUsingObjectMap","appendText","insertTextAtPosition","removeTextAtRange","replaceTextAtRange","moveTextFromRangeToPosition","getTextAtRange","addAttributeAtRange","addAttributesAtRange","removeAttributeAtRange","setAttributesAtRange","getAttributesAtPosition","getCommonAttributesAtRange","getExpandedRangeForAttributeAtOffset","getStringAtRange","getStringAtPosition","startsWithString","endsWithString","getAttachmentPieces","getAttachments","getAttachmentAndPositionById","getRangeOfAttachment","getPieceAtPosition","toSerializableText","Block","copyWithText","copyWithoutText","addAttribute","removeLastAttribute","getAttributeLevel","getAttributeAtLevel","hasAttributes","getLastNestableAttribute","getNestableAttributes","getNestingLevel","getListItemAttributes","isListItem","isTerminalBlock","breaksOnReturn","findLineBreakInDirectionFromPosition","getTextWithoutBlockBreak","getBlockBreakPosition","blockBreak","HTMLParser","referenceElement","blocks","processedElements","O","getDocument","createHiddenContainer","containerElement","processNode","currentNode","translateBlockElementMarginsToNewlines","removeHiddenContainer","FILTER_REJECT","FILTER_ACCEPT","processTextNode","appendBlockForElement","processElement","isBlockElement","currentBlockElement","isInsignificantTextNode","getBlockAttributes","currentBlock","appendBlockForAttributesWithElement","findParentBlockElement","appendEmptyBlock","appendStringWithAttributes","getTextAttributes","appendAttachmentWithAttributes","isExtraBR","appendPiece","appendStringToTextAtIndex","prependStringToTextAtIndex","findBlockElementAncestors","whiteSpace","getMarginOfDefaultBlockElement","getMarginOfBlockElementAtIndex","blockList","getBlockAtIndex","consolidateBlocks","copyUsingObjectsFromDocument","copyWithBaseBlockAttributes","replaceBlock","insertDocumentAtRange","locationFromPosition","getBlockAtPosition","mergeDocumentAtRange","getBaseBlockAttributes","getBlockCount","insertTextAtRange","locationRangeFromRange","getDocumentAtRange","firstBlockInRangeIsEntirelySelected","eachBlockAtRange","eachBlock","getTextAtIndex","insertBlockBreakAtRange","applyBlockAttributeAtRange","expandRangeToLineBreaksAndSplitBlocks","removeLastListAttributeAtRange","exceptAttributeName","convertLineBreaksToBlockBreaksInRange","removeLastTerminalAttributeAtRange","consolidateBlocksAtRange","positionFromLocation","getTextAtPosition","getCharacterAtPosition","getEditCount","editCount","getCommonAttributesAtPosition","getRangeOfCommonAttributeAtPosition","getLocationRangeOfAttachment","locationRangeFromPosition","rangeFromLocationRange","getTexts","LineBreakInsertion","startPosition","startLocation","endLocation","previousCharacter","nextCharacter","shouldInsertBlockBreak","shouldBreakFormattedBlock","shouldDecreaseListLevel","shouldPrependListItem","shouldRemoveLastBlockAttribute","Composition","attachments","currentAttributes","refreshAttachments","compositionDidChangeDocument","getSnapshot","selectedRange","loadSnapshot","compositionWillLoadSnapshot","setSelection","compositionDidLoadSnapshot","notifyDelegateOfInsertionAtRange","insertBlock","getCurrentTextAttributes","insertBlockBreak","decreaseListLevel","removeLastBlockAttribute","breakFormattedBlock","getPosition","replaceHTML","getLocationRange","compositionShouldAcceptFile","insertAttachment","canDecreaseBlockAttributeLevel","getBlock","decreaseBlockAttributeLevel","getExpandedRangeInDirection","getAttachmentAtRange","editAttachment","removeAttachment","stopEditingAttachment","removeCurrentAttribute","placeholderPosition","hasCurrentAttribute","toggleCurrentAttribute","setCurrentAttribute","canSetCurrentAttribute","canSetCurrentBlockAttribute","canSetCurrentTextAttribute","selectionContainsAttachmentWithAttribute","setBlockAttribute","setTextAttribute","notifyDelegateOfCurrentAttributesChange","removeBlockAttribute","updateCurrentAttributes","removeTextAttribute","getPreviousBlock","ignoreLock","getCurrentAttributes","freezeSelection","thawSelection","hasFrozenSelection","compositionDidRequestChangingSelectionToLocationRange","getSelectionManager","setLocationRange","translateUTF16PositionFromOffset","editingAttachment","expandSelectionForEditing","expandSelectionAroundCommonAttribute","positionIsCursorTarget","locationIsCursorTarget","compositionDidRemoveAttachment","compositionDidAddAttachment","compositionDidEditAttachment","compositionDidChangeAttachmentPreviewURL","compositionDidStartEditingAttachment","compositionDidStopEditingAttachment","canEditAttachmentCaption","compositionDidChangeCurrentAttributes","compositionDidPerformInsertionAtRange","UndoManager","undoEntries","redoEntries","recordUndoEntry","consolidatable","createEntry","description","snapshot","canUndo","canRedo","Editor","selectionManager","undoManager","loadDocument","loadHTML","loadJSON","getClientRectAtPosition","getClientRectAtLocationRange","activateAttribute","attributeIsActive","canActivateAttribute","deactivateAttribute","canDecreaseIndentationLevel","canIncreaseIndentationLevel","decreaseIndentationLevel","increaseIndentationLevel","ManagedAttachment","attachmentManager","requestRemovalOfAttachment","AttachmentManager","managedAttachments","manageAttachment","attachmentIsManaged","attachmentManagerDidRequestRemovalOfAttachment","unmanageAttachment","LocationMapper","findLocationFromContainerAndOffset","findAttachmentElementParentForNode","findContainerAndOffsetFromLocation","findNodeAndOffsetFromLocation","getSignificantNodesForIndex","PointMapper","createDOMRangeFromPoint","caretPositionFromPoint","offsetNode","setStart","caretRangeFromPoint","createTextRange","moveToPoint","getClientRectsForDOMRange","SelectionChangeObserver","selectionManagers","registerSelectionManager","unregisterSelectionManager","notifySelectionManagersOfSelectionChange","selectionDidChange","domRange","endOffset","SelectionManager","didMouseDown","locationMapper","pointMapper","lockCount","createLocationRangeFromDOMRange","currentLocationRange","lockedLocationRange","createDOMRangeFromLocationRange","updateCurrentLocationRange","getLocationAtPoint","clearSelection","selectionIsCollapsed","pauseTemporarily","paused","locationRangeDidChange","setEnd","domRangeWithinElement","EditorController","editorElement","compositionController","toolbarController","toolbarElement","editor","handlingInput","updateCurrentActions","pasting","pastedRange","attachmentLocationRange","loadingSnapshot","isFocused","requestedLocationRange","compositionRevisionWhenLocationRangeRequested","renderedCompositionRevision","requestedRender","reparse","recordTypingUndoEntry","pasteData","locationRangeBeforeDrag","invokeAction","recordFormattingUndoEntry","selectionFrozen","dialogName","increaseBlockLevel","decreaseBlockLevel","canInvokeAction","actionIsExternal","getCurrentActions","currentActions","getUndoContext","getLocationContext","getTimeContext","queryCommandSupported","execCommand","inputElement","editorController","documentChangedSinceLastRender","registerResetListener","unregisterResetListener","resetListener","resetBubbled","trixInitialize","trixChange","trixSelectionChange","trixFocus","trixBlur","trixFileAccept","trixAttachmentAdd","trixAttachmentRemove","registerEvents","preventTrixFileAccept","_arrayBufferToBase64","binary","btoa","onChange","onAfterValidate","FILE_READER_EVENTS","_maxnum","maxnum","_minnum","minnum","_maxsize","maxsize","_minsize","minsize","_accept","regExp","fileExt","filetype","_setViewValue","fileObjects","_attachHandlerForEvent","fReader","fileObject","rawFiles","_readerOnLoad","exceedsMaxSize","doNotParseIfOversize","base64","fileObj","deferredObj","_attachEventHandlers","_readFiles","reader","_onChange","_onAfterValidate","_clearInput"],"mappings":"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","file":"scripts/vendor-d54d534ab3.js","sourcesContent":["/*!\n * jQuery JavaScript Library v2.1.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-04-28T16:01Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\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// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\n\nvar arr = [];\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 support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\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.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\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\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\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\t\tret.context = this.context;\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\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\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(null);\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\" && !jQuery.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\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\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\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\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 obj;\n\t},\n\n\t// Support: Android<4.1\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\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 value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\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// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\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\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\n\t// Support: iOS 8.2 (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 = \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\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.2.0-pre\n * http://sizzlejs.com/\n *\n * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-12-16\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\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// http://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// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + 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 = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes 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// 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// 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 match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\tnodeType = context.nodeType;\n\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\tif ( !seed && documentIsHTML ) {\n\n\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\n\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\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} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType !== 1 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\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} finally {\n\t\t\t\t\tif ( !old ) {\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 div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = 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 = attrs.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\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\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 positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\tparent = doc.defaultView;\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Support tests\n\t---------------------------------------------------------------------- */\n\tdocumentIsHTML = !isXML( doc );\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( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.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( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( doc.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 programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\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} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\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\" && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\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 ( 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 http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\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// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"\" +\n\t\t\t\t\"\";\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// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.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 ( !div.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.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\n\t\t\tif ( !div.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 ( !div.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 sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\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 = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.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 ( div.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 ( !div.querySelectorAll(\":enabled\").length ) {\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\tdiv.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( div ) {\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( div, \"div\" );\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( div, \"[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 does not implement inclusive descendent\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 === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || 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 === doc ? -1 :\n\t\t\t\tb === doc ? 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 doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.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, outerCache, node, diff, 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\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 ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\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\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && 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\touterCache[ 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// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\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\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\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\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"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} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, 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 dir 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\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\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\touterCache[ dir ] = 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};\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;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) 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\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, 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// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\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 no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root 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\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.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\trsibling.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( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.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( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.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( div ) {\n\treturn div.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;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\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\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\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\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn 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 to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\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// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\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\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.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\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\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 || rootjQuery ).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.context = this[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 ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\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\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.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\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\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( 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.unique(\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 jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.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 jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || 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\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( 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 rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], 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\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\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\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\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\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\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 && type !== \"string\" ) {\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\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\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\t\t\t\treturn this;\n\t\t\t},\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 ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\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 ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\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\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\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\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\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\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 && jQuery.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.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\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\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\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// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\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[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = 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(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\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( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\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// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\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\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// We once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\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 = jQuery.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 ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( 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 ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\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( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android<4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android<4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\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\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(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, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = 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 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, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\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\tdata_user.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 data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.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 data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.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 = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.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: IE11+\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 = jQuery.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\tdata_priv.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\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\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\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.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 get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\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, camelKey, undefined );\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\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\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\tdata_user.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 = data_priv.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 || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.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 data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.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\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 = data_priv.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 cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\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: Safari<=5.1\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: Safari<=5.1, Android<4.2\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+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\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 = data_priv.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// 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\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 !== strundefined && 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( rnotwhite ) || [ \"\" ];\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 || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\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 = data_priv.hasData( elem ) && data_priv.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( rnotwhite ) || [ \"\" ];\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] && new 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 || selector === \"**\" && 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 || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\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 the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\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 = 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(\".\") >= 0 ) {\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.namespace_re = 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 && !jQuery.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\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 = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.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 && jQuery.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 || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name 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 && jQuery.isFunction( elem[ type ] ) && !jQuery.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\t\t\t\t\telem[ type ]();\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\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.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\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++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.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 || handleObj.handler )\n\t\t\t\t\t\t\t.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, matches, sel, handleObj,\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\t// Black-hole SVG instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\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 ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\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 ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\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\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\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\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\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\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\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 || jQuery.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// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\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 && e.stopPropagation ) {\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 && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\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 mousenter/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\n// Support: Firefox, Chrome, Safari\n// Create \"bubbling\" focus and blur events\nif ( !support.focusinBubbles ) {\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\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\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 = data_priv.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\tdata_priv.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 = data_priv.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\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( 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\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 ? handleObj.origType + \".\" + handleObj.namespace : handleObj.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\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\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\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\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE9\n\t\toption: [ 1, \"\" ],\n\n\t\tthead: [ 1, \"\", \"
\" ],\n\t\tcol: [ 2, \"\", \"
\" ],\n\t\ttr: [ 2, \"\", \"
\" ],\n\t\ttd: [ 3, \"\", \"
\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\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\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\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\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\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 ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.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 ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\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\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://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\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\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 ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\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\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\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 this.domManip( 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 this.domManip( 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 this.domManip( 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 this.domManip( 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\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\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 = value.replace( rxhtmlTag, \"<$1>\" );\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 arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\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\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\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\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\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\n\t\treturn this;\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: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optimization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"\n *\n * **Example.** Custom components\n *\n * \n *\n * NOTE: `ui-toggle/set/turnOn/turnOff` responds to `click/tap` without\n * stopping propagation so you can use them along with ng-click too.\n * You can also change events to respond to with `ui-triggers` attribute.\n *\n * Any `SharedState` method is exposed through `Ui` object in `$rootScope`.\n * So you could always do `ng-click=\"Ui.turnOn('myVar')\"`.\n *\n * Since `SharedState` is a service you can initialize/set statuses through\n * controllers too:\n *\n * ``` js\n * app.controller('myController', function($scope, SharedState){\n * SharedState.initialize($scope, \"activeTab\", 3);\n * });\n * ```\n *\n * As well as you can use `ui-default` for that:\n *\n * ``` html\n *
\n * ```\n *\n */\n var module = angular.module('mobile-angular-ui.core.sharedState', []);\n\n /**\n * @ngdoc service\n * @class SharedState\n *\n * @description\n *\n * A `SharedState` state can be considered as a global variable identified by an `id`.\n *\n * `SharedState` service exposes methods to interact with statuses to create,\n * read and update states.\n *\n * It acts as a BUS between UI elements to share UI related state that is\n * automatically disposed when all scopes requiring it are destroyed.\n *\n * eg.\n *\n * ``` js\n * app.controller('controller1', function($scope, SharedState){\n * SharedState.initialize($scope, 'myId');\n * });\n *\n * app.controller('controller2', function(SharedState){\n * SharedState.toggle('myId');\n * });\n * ```\n *\n * Data structures retaining statuses will stay outside angular scopes thus\n * they are not evaluated against digest cycle until its necessary. Also\n * although statuses are sort of global variables `SharedState` will take\n * care of disposing them when no scopes are requiring them anymore.\n *\n * A set of `ui-*` directives are available to interact with `SharedState`\n * module and will hopefully var you spare your controllers and your time for\n * something that is more meaningful than this:\n *\n * ``` js\n * $scope.activeTab = 1;\n *\n * $scope.setActiveTab = function(n) {\n * $scope.activeTab = n;\n * };\n * ```\n *\n */\n\n /**\n * @event 'mobile-angular-ui.state.initialized.ID'\n * @shortname initialized\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Broadcasted on `$rootScope` when `#initialize` is called for a new state not\n * referenced by any scope currently.\n *\n * @param {any} currentValue The value with which this state has been initialized\n *\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n\n /**\n * @event 'mobile-angular-ui.state.destroyed.ID'\n * @shortname destroyed\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Broadcasted on `$rootScope` when a state is destroyed.\n *\n */\n\n /**\n * @event 'mobile-angular-ui.state.changed.ID'\n * @shortname changed\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Broadcasted on `$rootScope` the value of a state changes.\n *\n * ``` js\n * $scope.$on('mobile-angular-ui.state.changed.uiSidebarLeft', function(e, newVal, oldVal) {\n * if (newVal === true) {\n * console.log('sidebar opened');\n * } else {\n * console.log('sidebar closed');\n * }\n * });\n * ```\n *\n * @param {any} newValue\n * @param {any} oldValue\n *\n */\n\n module.factory('SharedState', [\n '$rootScope', '$log',\n function($rootScope, $log) {\n var values = {}; // values, context object for evals\n var statusesMeta = {}; // status info\n var scopes = {}; // scopes references\n var exclusionGroups = {}; // support exclusive boolean sets\n\n return {\n /**\n * @function initialize\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Initialize, or require if already intialized, a state identified by `id` within the provided `scope`, making it available to the rest of application.\n *\n * A `SharedState` is bound to one or more scopes. Each time\n * `initialize` is called for an angular `scope` this will be bound to\n * the `SharedState` and a reference count is incremented to allow\n * garbage collection.\n *\n * Reference count is decremented once the scope is destroyed. When the counter reach 0 the state will be disposed.\n *\n * @param {scope} scope The scope to bound this state\n * @param {string} id The unique name of this state\n * @param {object} [options] Options\n * @param {object} [options.defaultValue] the initialization value, it is taken into account only if the state `id` is not already initialized\n * @param {string} [options.exclusionGroup] Specifies an exclusion group\n * for the state. This means that for boolean operations (ie. toggle,\n * turnOn, turnOf) when this state is set to `true`, any other state\n * that is in the same `exclusionGroup` will be set to `false`.\n */\n initialize: function(scope, id, options) {\n options = options || {};\n\n var isNewScope = scopes[scope] === undefined;\n var defaultValue = options.defaultValue;\n var exclusionGroup = options.exclusionGroup;\n\n scopes[scope.$id] = scopes[scope.$id] || [];\n scopes[scope.$id].push(id);\n\n if (!statusesMeta[id]) { // is a brand new state\n // not referenced by any\n // scope currently\n\n statusesMeta[id] = angular.extend({}, options, {references: 1});\n\n $rootScope.$broadcast('mobile-angular-ui.state.initialized.' + id, defaultValue);\n\n if (defaultValue !== undefined) {\n this.setOne(id, defaultValue);\n }\n\n if (exclusionGroup) {\n // Exclusion groups are sets of statuses references\n exclusionGroups[exclusionGroup] = exclusionGroups[exclusionGroup] || {};\n exclusionGroups[exclusionGroup][id] = true;\n }\n\n } else if (isNewScope) { // is a new reference from\n // a different scope\n statusesMeta[id].references++;\n }\n scope.$on('$destroy', function() {\n var ids = scopes[scope.$id] || [];\n for (var i = 0; i < ids.length; i++) {\n var status = statusesMeta[ids[i]];\n\n if (status.exclusionGroup) {\n delete exclusionGroups[status.exclusionGroup][ids[i]];\n if (Object.keys(exclusionGroups[status.exclusionGroup]).length === 0) {\n delete exclusionGroups[status.exclusionGroup];\n }\n }\n\n status.references--;\n if (status.references <= 0) {\n delete statusesMeta[ids[i]];\n delete values[ids[i]];\n $rootScope.$broadcast('mobile-angular-ui.state.destroyed.' + id);\n }\n }\n delete scopes[scope.$id];\n });\n },\n\n /**\n * @function setOne\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Set the value of the state identified by `id` to the `value` parameter.\n *\n * @param {string} id Unique identifier for state\n * @param {any} value New value for this state\n */\n setOne: function(id, value) {\n if (statusesMeta[id] !== undefined) {\n var prev = values[id];\n values[id] = value;\n if (prev !== value) {\n $rootScope.$broadcast('mobile-angular-ui.state.changed.' + id, value, prev);\n }\n return value;\n }\n $log.warn('Warning: Attempt to set uninitialized shared state: ' + id);\n },\n\n /**\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @function setMany\n * @description\n *\n * Set multiple statuses at once. ie.\n *\n * ```\n * SharedState.setMany({ activeTab: 'firstTab', sidebarIn: false });\n * ```\n *\n * @param {object} object An object of the form `{state1: value1, ..., stateN: valueN}`\n */\n setMany: function(map) {\n angular.forEach(map, function(value, id) {\n this.setOne(id, value);\n }, this);\n },\n\n /**\n * @function set\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * A shorthand for both `setOne` and `setMany`.\n * When called with only one parameter that is an object\n * it is the same of `setMany`, otherwise is the\n * same of `setOne`.\n *\n * @param {string|object} idOrMap A state id or a `{state: value}` map object.\n * @param {any} [value] The value to assign in case idOrMap is a string.\n */\n set: function(idOrMap, value) {\n if (!idOrMap) {\n return;\n } else if (angular.isObject(idOrMap)) {\n this.setMany(idOrMap);\n } else {\n this.setOne(idOrMap, value);\n }\n },\n\n /**\n * @function turnOn\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Set shared state identified by `id` to `true`. If the\n * shared state has been initialized with `exclusionGroup`\n * option it will also turn off (set to `false`) all other\n * statuses from the same exclusion group.\n *\n * @param {string} id The unique name of this state\n */\n turnOn: function(id) {\n // Turns off other statuses belonging to the same exclusion group.\n var eg = statusesMeta[id] && statusesMeta[id].exclusionGroup;\n if (eg) {\n var egStatuses = Object.keys(exclusionGroups[eg]);\n for (var i = 0; i < egStatuses.length; i++) {\n var item = egStatuses[i];\n if (item !== id) {\n this.turnOff(item);\n }\n }\n }\n return this.setOne(id, true);\n },\n\n /**\n * @function turnOff\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Set shared state identified by `id` to `false`.\n *\n * @param {string} id The unique name of this state\n */\n turnOff: function(id) {\n return this.setOne(id, false);\n },\n\n /**\n * @function toggle\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * If current value for shared state identified by `id` evaluates\n * to `true` it calls `turnOff` on it otherwise calls `turnOn`.\n * Be aware that it will take into account `exclusionGroup` option.\n * See `#turnOn` and `#initialize` for more.\n *\n * @param {string} id The unique name of this state\n */\n toggle: function(id) {\n return this.get(id) ? this.turnOff(id) : this.turnOn(id);\n },\n\n /**\n * @function get\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Returns the current value of the state identified by `id`.\n *\n * @param {string} id The unique name of this state\n * @returns {any}\n */\n get: function(id) {\n return statusesMeta[id] && values[id];\n },\n\n /**\n * @function isActive\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Return `true` if the boolean conversion of `#get(id)` evaluates to `true`.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n isActive: function(id) {\n return Boolean(this.get(id));\n },\n\n /**\n * @function active\n * @alias mobile-angular-ui.core.sharedState~SharedState.isActive\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Alias for `#isActive`.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n active: function(id) {\n return this.isActive(id);\n },\n\n /**\n * @function isUndefined\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Return `true` if state identified by `id` is not defined.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n isUndefined: function(id) {\n return statusesMeta[id] === undefined || this.get(id) === undefined;\n },\n\n /**\n * Returns `true` if state identified by `id` exsists.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n *\n * @function has\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n has: function(id) {\n return statusesMeta[id] !== undefined;\n },\n\n /**\n * Returns the number of references of a status.\n *\n * @param {string} id The unique name of this state\n * @returns {integer}\n *\n * @function referenceCount\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n referenceCount: function(id) {\n var status = statusesMeta[id];\n return status === undefined ? 0 : status.references;\n },\n\n /**\n * Returns `true` if `#get(id)` is exactly equal (`===`) to `value` param.\n *\n * @param {string} id The unique name of this state\n * @param {any} value The value for comparison\n * @returns {bool}\n *\n * @function equals\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n equals: function(id, value) {\n return this.get(id) === value;\n },\n\n /**\n * Alias for `#equals`\n *\n * @param {string} id The unique name of this state\n * @param {any} value The value for comparison\n * @returns {bool}\n *\n * @function eq\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @alias mobile-angular-ui.core.sharedState~SharedState.equals\n */\n eq: function(id, value) {\n return this.equals(id, value);\n },\n\n /**\n * Returns an object with all the status values currently stored.\n * It has the form of `{statusId: statusValue}`.\n *\n * Bear in mind that in order to spare resources it currently\n * returns just the internal object retaining statuses values.\n * Thus it is not intended to be modified and direct changes to it will be not tracked or notified.\n *\n * Just clone before apply any change to it.\n *\n * @returns {object}\n *\n * @function values\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n values: function() {\n return values;\n },\n\n exclusionGroups: function() {\n return exclusionGroups;\n }\n };\n }\n ]);\n\n var uiBindEvent = function(scope, element, eventNames, fn) {\n eventNames = eventNames || 'click tap';\n element.on(eventNames, function(event) {\n scope.$apply(function() {\n fn(scope, {$event: event});\n });\n });\n };\n\n /**\n * Calls `SharedState#initialize` on the scope relative to the element using it.\n *\n * @param {string} uiState The shared state id\n * @param {expression} [uiDefault] the default value\n *\n * @directive uiSharedState\n */\n module.directive('uiSharedState', [\n 'SharedState', function(SharedState) {\n return {\n restrict: 'EA',\n priority: 601, // more than ng-if\n link: function(scope, elem, attrs) {\n var id = attrs.uiSharedState || attrs.id;\n var defaultValueExpr = attrs.uiDefault || attrs.default;\n var defaultValue = defaultValueExpr ? scope.$eval(defaultValueExpr) : undefined;\n\n SharedState.initialize(scope, id, {\n defaultValue: defaultValue,\n exclusionGroup: attrs.uiExclusionGroup\n });\n }\n };\n }\n ]);\n\n /**\n * Alias for uiSharedState. **Deprecated** since it clashes with\n * [UI-Router](https://ui-router.github.io/) `uiState` directive.\n *\n * @deprecated\n * @param {string} uiState The shared state id\n * @param {expression} [uiDefault] the default value\n *\n * @directive uiState\n */\n module.directive('uiState', [\n 'SharedState', function(SharedState) {\n return {\n restrict: 'EA',\n priority: 601, // more than ng-if\n link: function(scope, elem, attrs) {\n var id = attrs.uiState || attrs.id;\n var defaultValueExpr = attrs.uiDefault || attrs.default;\n var defaultValue = defaultValueExpr ? scope.$eval(defaultValueExpr) : undefined;\n\n SharedState.initialize(scope, id, {\n defaultValue: defaultValue,\n exclusionGroup: attrs.uiExclusionGroup\n });\n }\n };\n }\n ]);\n\n angular.forEach(['toggle', 'turnOn', 'turnOff', 'set'],\n function(methodName) {\n var directiveName = 'ui' + methodName[0].toUpperCase() + methodName.slice(1);\n\n /**\n * Calls `SharedState#toggle` when triggering events happens on the element using it.\n *\n * @param {string} uiToggle the target shared state\n * @param {expression} uiDefault the default value\n *\n * @directive uiToggle\n */\n\n /**\n * @function uiTurnOn\n *\n * @description\n * Calls `SharedState#turnOn` when triggering events happens on the element using it.\n *\n *\n * @ngdoc directive\n *\n * @param {string} uiTurnOn the target shared state\n * @param {expression} uiDefault the default value\n */\n\n /**\n * @function uiTurnOff\n *\n * @description\n * Calls `SharedState#turnOff` when triggering events happens on the element using it.\n *\n * @ngdoc directive\n *\n * @param {string} uiTurnOff the target shared state\n * @param {string} [uiTriggers='click tap'] the event triggering the call.\n */\n\n /**\n * @function uiSet\n *\n * @description\n * Calls `SharedState#set` when triggering events happens on the element using it.\n *\n * @ngdoc directive\n *\n * @param {object} uiSet The object to pass to SharedState#set\n * @param {string} [uiTriggers='click tap'] the event triggering the call.\n */\n\n module.directive(directiveName, [\n '$parse',\n '$interpolate',\n 'SharedState',\n function($parse, $interpolate, SharedState) {\n var method = SharedState[methodName];\n return {\n restrict: 'A',\n priority: 1, // This would make postLink calls happen after ngClick\n // (and similar) ones, thus intercepting events after them.\n //\n // This will prevent eventual ng-if to detach elements\n // before ng-click fires.\n\n compile: function(elem, attrs) {\n var attr = attrs[directiveName];\n var needsInterpolation = attr.match(/\\{\\{/);\n\n var exprFn = function($scope) {\n var res = attr;\n if (needsInterpolation) {\n var interpolateFn = $interpolate(res);\n res = interpolateFn($scope);\n }\n if (methodName === 'set') {\n res = ($parse(res))($scope);\n }\n return res;\n };\n\n return function(scope, elem, attrs) {\n var callback = function() {\n var arg = exprFn(scope);\n return method.call(SharedState, arg);\n };\n uiBindEvent(scope, elem, attrs.uiTriggers, callback);\n };\n }\n };\n }\n ]);\n });\n\n /**\n * @name uiScopeContext\n * @inner\n * @description\n *\n * `uiScopeContext` is not a directive, but a parameter common to any of the\n * `ui-*` directives in this module.\n *\n * By default all `ui-*` conditions in this module evaluates in the context of\n * `SharedState` only, thus scope variable are not accessible. To use them you have\n * two options:\n *\n * #### 1. pre-interpolation\n *\n * You can use pre-interpolation in expression attribute. For instance the following syntax\n * is ligit:\n *\n * ``` html\n *
\n * ```\n *\n * In this case `idx` value is taken from scope and embedded into\n * conditions before parse them.\n *\n * This works as expected and is fine for the most cases, but it has a little caveat:\n *\n * The condition has to be re-parsed at each digest loop and has to walk scopes\n * in watchers.\n *\n * #### 2. uiScopeContext\n *\n * If you are concerned about performance issues using the first approach\n * `uiScopeContext` is a more verbose but also lightweight alternative\n * to accomplish the same.\n *\n * It allows to use current scope vars inside `ui-*` conditions, leaving\n * other scope vars (or the entire scope if not present) apart from the\n * condition evaluation process.\n *\n * Hopefully this will keep evaluation running against a flat and small data\n * structure instead of taking into account the whole scope.\n *\n * It is a list `scopeVar[ as aliasName] [, ...]` specifing one of more scope\n * variables to take into account when evaluating conditions. ie:\n *\n * ``` html\n * \n *
\n *
\n * \n *
\n *
\n * ```\n *\n * ``` html\n *
\n *
\n * ```\n *\n * Be aware that scope vars will take precedence over sharedStates so,\n * in order to avoid name clashes you can use 'as' to refer to scope vars\n * with a different name in conditions:\n *\n * ``` html\n *
\n *
\n * ```\n */\n var parseScopeContext = function(attr) {\n if (!attr || attr === '') {\n return [];\n }\n var vars = attr ? attr.trim().split(/ *, */) : [];\n var res = [];\n for (var i = 0; i < vars.length; i++) {\n var item = vars[i].split(/ *as */);\n if (item.length > 2 || item.length < 1) {\n throw new Error('Error parsing uiScopeContext=\"' + attr + '\"');\n }\n res.push(item);\n }\n return res;\n };\n\n var mixScopeContext = function(context, scopeVars, scope) {\n for (var i = 0; i < scopeVars.length; i++) {\n var key = scopeVars[i][0];\n var alias = scopeVars[i][1] || key;\n context[alias] = key.split('.').reduce(function(scope, nextKey) {\n return scope[nextKey];\n }, scope);\n }\n };\n\n var parseUiCondition = function(name, attrs, $scope, SharedState, $parse, $interpolate) {\n var expr = attrs[name];\n var needsInterpolation = expr.match(/\\{\\{/);\n var exprFn;\n\n if (needsInterpolation) {\n exprFn = function(context) {\n var interpolateFn = $interpolate(expr);\n var parseFn = $parse(interpolateFn($scope));\n return parseFn(context);\n };\n } else {\n exprFn = $parse(expr);\n }\n\n var uiScopeContext = parseScopeContext(attrs.uiScopeContext);\n return function() {\n var context;\n if (uiScopeContext.length) {\n context = angular.extend({}, SharedState.values());\n mixScopeContext(context, uiScopeContext, $scope);\n } else {\n context = SharedState.values();\n }\n return exprFn(context);\n };\n };\n\n /**\n * @ngdoc directive\n * @function uiIf\n *\n * @description\n * Same as `ngIf` but evaluates condition against `SharedState` statuses too\n *\n * @param {expression} uiIf A condition to decide wether to attach the\n * element to the dom\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when\n * evaluating condition.\n */\n module.directive('uiIf', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse, $interpolate) {\n function getBlockNodes(nodes) {\n var node = nodes[0];\n var endNode = nodes[nodes.length - 1];\n var blockNodes = [node];\n do {\n node = node.nextSibling;\n if (!node) {\n break;\n }\n blockNodes.push(node);\n } while (node !== endNode);\n\n return angular.element(blockNodes);\n }\n\n return {\n multiElement: true,\n transclude: 'element',\n priority: 600,\n terminal: true,\n restrict: 'A',\n $$tlb: true,\n link: function($scope, $element, $attr, ctrl, $transclude) {\n var block;\n var childScope;\n var previousElements;\n var uiIfFn = parseUiCondition('uiIf', $attr, $scope, SharedState, $parse, $interpolate);\n\n $scope.$watch(uiIfFn, function uiIfWatchAction(value) {\n if (value) {\n if (!childScope) {\n $transclude(function(clone, newScope) {\n childScope = newScope;\n clone[clone.length++] = document.createComment(' end uiIf: ' + $attr.uiIf + ' ');\n // Note: We only need the first/last node of the cloned nodes.\n // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n // by a directive with templateUrl when its template arrives.\n block = {\n clone: clone\n };\n $animate.enter(clone, $element.parent(), $element);\n });\n }\n } else {\n if (previousElements) {\n previousElements.remove();\n previousElements = null;\n }\n if (childScope) {\n childScope.$destroy();\n childScope = null;\n }\n if (block) {\n previousElements = getBlockNodes(block.clone);\n var done = function() {\n previousElements = null;\n };\n var nga = $animate.leave(previousElements, done);\n if (nga) {\n nga.then(done);\n }\n block = null;\n }\n }\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive\n * @function uiHide\n *\n * @description\n * Same as `ngHide` but evaluates condition against `SharedState` statuses\n *\n * @param {expression} uiShow A condition to decide wether to hide the element\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when evaluating condition.\n */\n module.directive('uiHide', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse, $interpolate) {\n var NG_HIDE_CLASS = 'ng-hide';\n var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n\n return {\n restrict: 'A',\n multiElement: true,\n link: function(scope, element, attr) {\n var uiHideFn = parseUiCondition('uiHide', attr, scope, SharedState, $parse, $interpolate);\n scope.$watch(uiHideFn, function uiHideWatchAction(value) {\n $animate[value ? 'addClass' : 'removeClass'](element, NG_HIDE_CLASS, {\n tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n });\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive\n * @function uiShow\n *\n * @description\n * Same as `ngShow` but evaluates condition against `SharedState` statuses\n *\n * @param {expression} uiShow A condition to decide wether to show the element\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when evaluating condition.\n */\n module.directive('uiShow', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse) {\n var NG_HIDE_CLASS = 'ng-hide';\n var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n\n return {\n restrict: 'A',\n multiElement: true,\n link: function(scope, element, attr) {\n var uiShowFn = parseUiCondition('uiShow', attr, scope, SharedState, $parse);\n scope.$watch(uiShowFn, function uiShowWatchAction(value) {\n $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {\n tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n });\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive\n * @function uiClass\n *\n * @description\n * A simplified version of `ngClass` that evaluates in context of `SharedState`, it only suppors the `{'className': expr}` syntax.\n *\n * @param {expression} uiClass An expression that has to evaluate to an object\n * of the form `{'className': expr}`, where `expr` decides wether the class\n * should appear to element's class list.\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when evaluating\n * condition.\n */\n module.directive('uiClass', ['SharedState', '$parse', '$interpolate', function(SharedState, $parse) {\n return {\n restrict: 'A',\n link: function(scope, element, attr) {\n var uiClassFn = parseUiCondition('uiClass', attr, scope, SharedState, $parse);\n scope.$watch(uiClassFn, function uiClassWatchAction(value) {\n var classesToAdd = '';\n var classesToRemove = '';\n angular.forEach(value, function(expr, className) {\n if (expr) {\n classesToAdd += ' ' + className;\n } else {\n classesToRemove += ' ' + className;\n }\n classesToAdd = classesToAdd.trim();\n classesToRemove = classesToRemove.trim();\n if (classesToAdd.length) {\n element.addClass(classesToAdd);\n }\n if (classesToRemove.length) {\n element.removeClass(classesToRemove);\n }\n });\n }, true);\n }\n };\n }]);\n\n module.run([\n '$rootScope',\n 'SharedState',\n function($rootScope, SharedState) {\n $rootScope.Ui = SharedState;\n }\n ]);\n\n})();\n\n/**\n * Provides directives and service to prevent touchmove default behaviour\n * for touch devices (ie. bounce on overscroll in IOS).\n *\n * #### Usage\n *\n * Use `ui-prevent-touchmove-defaults` directive on root element of your app:\n *\n * ``` html\n * \n * \n * \n * ```\n *\n * Doing so `touchmove.preventDefault` logic for inner elements is inverted,\n * so any `touchmove` default behaviour is automatically prevented.\n *\n * If you wish to allow the default behaviour, for example to allow\n * inner elements to scroll, you have to explicitly mark an event to allow\n * touchmove default.\n *\n * Mobile Angular UI already handles this for `scrollable` elements, so you don't have\n * to do anything in order to support scroll.\n *\n * If you wish to allow touchmove defaults for certain element under certain conditions\n * you can use the `allowTouchmoveDefault` service.\n *\n * ie.\n *\n * ``` js\n * // always allow touchmove default for an element\n * allowTouchmoveDefault(myelem);\n * ```\n *\n * ``` js\n * // allow touchmove default for an element only under certain conditions\n * allowTouchmoveDefault(myelem, function(touchmove){\n * return touchmove.pageY > 100;\n * });\n * ```\n *\n * @module mobile-angular-ui.core.touchmoveDefaults\n */\n(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.core.touchmoveDefaults', []);\n\n module.directive('uiPreventTouchmoveDefaults', function() {\n var preventTouchmoveDefaultsCb = function(e) {\n // Get this flag from either the saved event if jQuery is being used, otherwise get it from the event itself.\n var allowTouchmoveEventFlag = e.originalEvent ? e.originalEvent.allowTouchmoveDefault : e.allowTouchmoveDefault;\n if (allowTouchmoveEventFlag !== true) {\n e.preventDefault();\n }\n };\n\n return {\n compile: function(element) {\n if ('ontouchmove' in document) {\n element.on('touchmove', preventTouchmoveDefaultsCb);\n }\n }\n };\n });\n\n /**\n * Bind a listener to an element to allow `touchmove` default behaviour\n * when `touchmove` happens inside the bound element.\n *\n * You can also provide a function to decide when to allow and\n * when to prevent it.\n *\n * ``` js\n * // always allow touchmove default\n * allowTouchmoveDefault(myelem);\n *\n * // allow touchmove default only under certain conditions\n * allowTouchmoveDefault(myelem, function(touchmove){\n * return touchmove.pageY > 100;\n * });\n * ```\n *\n * @param {Element|$element} element The element to bind.\n * @param {function} condition A `function(touchmove)⟶boolean` to decide\n * whether to allow default behavior or not.\n *\n * @service allowTouchmoveDefault\n * @as function\n * @returns function Function to unbind the listener\n */\n\n module.factory('allowTouchmoveDefault', function() {\n var fnTrue = function() {\n return true;\n };\n\n if ('ontouchmove' in document) {\n return function($element, condition) {\n condition = condition || fnTrue;\n\n var allowTouchmoveDefaultCallback = function(e) {\n if (condition(e)) {\n e.allowTouchmoveDefault = true;\n // jQuery normalizes the event object, need to put this property on the copied originalEvent.\n if (e.originalEvent) {\n e.originalEvent.allowTouchmoveDefault = true;\n }\n }\n };\n\n $element = angular.element($element);\n $element.on('touchmove', allowTouchmoveDefaultCallback);\n\n $element.on('$destroy', function() {\n $element.off('touchmove', allowTouchmoveDefaultCallback);\n $element = null;\n });\n\n return function() {\n if ($element) {\n $element.off('touchmove', allowTouchmoveDefaultCallback);\n }\n };\n };\n }\n\n return angular.noop;\n });\n\n})();\n\n/**\n * @module mobile-angular-ui.core\n *\n * @description\n *\n * It has all the core functionalities of Mobile Angular UI. It aims to act as a common base\n * for an UI framework providing services and directives to create components and implement\n * UI interactions with angular.\n *\n *
\n * NOTE\n *
    \n *
  • It has no dependency on Bootstrap.
  • \n *
  • It is not related to mobile apps only.
  • \n *
  • It is not requiring CSS support.
  • \n *
  • You can use it on any Angular Application and with any CSS framework.
  • \n *
\n *
\n *\n * ## Standalone Usage\n *\n * Although `.core` module is required by `mobile-angular-ui` by default you can use it alone.\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.core']);\n * ```\n */\n(function() {\n 'use strict';\n angular.module('mobile-angular-ui.core', [\n 'mobile-angular-ui.core.fastclick',\n 'mobile-angular-ui.core.activeLinks',\n 'mobile-angular-ui.core.capture',\n 'mobile-angular-ui.core.outerClick',\n 'mobile-angular-ui.core.sharedState',\n 'mobile-angular-ui.core.touchmoveDefaults'\n ]);\n})();\n\n/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, undefined ){\n\t\n\tvar doc = w.document,\n\t\tdocElem = doc.documentElement,\n\t\tenabledClassName = \"overthrow-enabled\",\n\n\t\t// Touch events are used in the polyfill, and thus are a prerequisite\n\t\tcanBeFilledWithPoly = \"ontouchmove\" in doc,\n\t\t\n\t\t// The following attempts to determine whether the browser has native overflow support\n\t\t// so we can enable it but not polyfill\n\t\tnativeOverflow = \n\t\t\t// Features-first. iOS5 overflow scrolling property check - no UA needed here. thanks Apple :)\n\t\t\t\"WebkitOverflowScrolling\" in docElem.style ||\n\t\t\t// Test the windows scrolling property as well\n\t\t\t\"msOverflowStyle\" in docElem.style ||\n\t\t\t// Touch events aren't supported and screen width is greater than X\n\t\t\t// ...basically, this is a loose \"desktop browser\" check. \n\t\t\t// It may wrongly opt-in very large tablets with no touch support.\n\t\t\t( !canBeFilledWithPoly && w.screen.width > 800 ) ||\n\t\t\t// Hang on to your hats.\n\t\t\t// Whitelist some popular, overflow-supporting mobile browsers for now and the future\n\t\t\t// These browsers are known to get overlow support right, but give us no way of detecting it.\n\t\t\t(function(){\n\t\t\t\tvar ua = w.navigator.userAgent,\n\t\t\t\t\t// Webkit crosses platforms, and the browsers on our list run at least version 534\n\t\t\t\t\twebkit = ua.match( /AppleWebKit\\/([0-9]+)/ ),\n\t\t\t\t\twkversion = webkit && webkit[1],\n\t\t\t\t\twkLte534 = webkit && wkversion >= 534;\n\t\t\t\t\t\n\t\t\t\treturn (\n\t\t\t\t\t/* Android 3+ with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13 */\n\t\t\t\t\tua.match( /Android ([0-9]+)/ ) && RegExp.$1 >= 3 && wkLte534 ||\n\t\t\t\t\t/* Blackberry 7+ with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0 Mobile Safari/534.11+ */\n\t\t\t\t\tua.match( / Version\\/([0-9]+)/ ) && RegExp.$1 >= 0 && w.blackberry && wkLte534 ||\n\t\t\t\t\t/* Blackberry Playbook with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+ */ \n\t\t\t\t\tua.indexOf( \"PlayBook\" ) > -1 && wkLte534 && !ua.indexOf( \"Android 2\" ) === -1 ||\n\t\t\t\t\t/* Firefox Mobile (Fennec) 4 and up\n\t\t\t\t\t~: Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0 */\n\t\t\t\t\tua.match(/Firefox\\/([0-9]+)/) && RegExp.$1 >= 4 ||\n\t\t\t\t\t/* WebOS 3 and up (TouchPad too)\n\t\t\t\t\t~: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.48 Safari/534.6 TouchPad/1.0 */\n\t\t\t\t\tua.match( /wOSBrowser\\/([0-9]+)/ ) && RegExp.$1 >= 233 && wkLte534 ||\n\t\t\t\t\t/* Nokia Browser N8\n\t\t\t\t\t~: Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/012.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.0 Mobile Safari/533.4 3gpp-gba \n\t\t\t\t\t~: Note: the N9 doesn't have native overflow with one-finger touch. wtf */\n\t\t\t\t\tua.match( /NokiaBrowser\\/([0-9\\.]+)/ ) && parseFloat(RegExp.$1) === 7.3 && webkit && wkversion >= 533\n\t\t\t\t);\n\t\t\t})();\n\n\t// Expose overthrow API\n\tw.overthrow = {};\n\n\tw.overthrow.enabledClassName = enabledClassName;\n\n\tw.overthrow.addClass = function(){\n\t\tif( docElem.className.indexOf( w.overthrow.enabledClassName ) === -1 ){\n\t\t\tdocElem.className += \" \" + w.overthrow.enabledClassName;\n\t\t}\n\t};\n\n\tw.overthrow.removeClass = function(){\n\t\tdocElem.className = docElem.className.replace( w.overthrow.enabledClassName, \"\" );\n\t};\n\n\t// Enable and potentially polyfill overflow\n\tw.overthrow.set = function(){\n\t\t\t\n\t\t// If nativeOverflow or at least the element canBeFilledWithPoly, add a class to cue CSS that assumes overflow scrolling will work (setting height on elements and such)\n\t\tif( nativeOverflow ){\n\t\t\tw.overthrow.addClass();\n\t\t}\n\n\t};\n\n\t// expose polyfillable \n\tw.overthrow.canBeFilledWithPoly = canBeFilledWithPoly;\n\n\t// Destroy everything later. If you want to.\n\tw.overthrow.forget = function(){\n\n\t\tw.overthrow.removeClass();\n\t\t\n\t};\n\t\t\n\t// Expose overthrow API\n\tw.overthrow.support = nativeOverflow ? \"native\" : \"none\";\n\t\t\n})( this );\n\n/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, undefined ){\n\t\n\t// Auto-init\n\tw.overthrow.set();\n\n}( this ));\n/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, o, undefined ){\n\n\t// o is overthrow reference from overthrow-polyfill.js\n\tif( o === undefined ){\n\t\treturn;\n\t}\n\n\to.scrollIndicatorClassName = \"overthrow\";\n\t\n\tvar doc = w.document,\n\t\tdocElem = doc.documentElement,\n\t\t// o api\n\t\tnativeOverflow = o.support === \"native\",\n\t\tcanBeFilledWithPoly = o.canBeFilledWithPoly,\n\t\tconfigure = o.configure,\n\t\tset = o.set,\n\t\tforget = o.forget,\n\t\tscrollIndicatorClassName = o.scrollIndicatorClassName;\n\n\t// find closest overthrow (elem or a parent)\n\to.closest = function( target, ascend ){\n\t\treturn !ascend && target.className && target.className.indexOf( scrollIndicatorClassName ) > -1 && target || o.closest( target.parentNode );\n\t};\n\t\t\n\t// polyfill overflow\n\tvar enabled = false;\n\to.set = function(){\n\t\t\t\n\t\tset();\n\n\t\t// If nativeOverflow or it doesn't look like the browser canBeFilledWithPoly, our job is done here. Exit viewport left.\n\t\tif( enabled || nativeOverflow || !canBeFilledWithPoly ){\n\t\t\treturn;\n\t\t}\n\n\t\tw.overthrow.addClass();\n\n\t\tenabled = true;\n\n\t\to.support = \"polyfilled\";\n\n\t\to.forget = function(){\n\t\t\tforget();\n\t\t\tenabled = false;\n\t\t\t// Remove touch binding (check for method support since this part isn't qualified by touch support like the rest)\n\t\t\tif( doc.removeEventListener ){\n\t\t\t\tdoc.removeEventListener( \"touchstart\", start, false );\n\t\t\t}\n\t\t};\n\n\t\t// Fill 'er up!\n\t\t// From here down, all logic is associated with touch scroll handling\n\t\t\t// elem references the overthrow element in use\n\t\tvar elem,\n\t\t\t\n\t\t\t// The last several Y values are kept here\n\t\t\tlastTops = [],\n\t\n\t\t\t// The last several X values are kept here\n\t\t\tlastLefts = [],\n\t\t\t\n\t\t\t// lastDown will be true if the last scroll direction was down, false if it was up\n\t\t\tlastDown,\n\t\t\t\n\t\t\t// lastRight will be true if the last scroll direction was right, false if it was left\n\t\t\tlastRight,\n\t\t\t\n\t\t\t// For a new gesture, or change in direction, reset the values from last scroll\n\t\t\tresetVertTracking = function(){\n\t\t\t\tlastTops = [];\n\t\t\t\tlastDown = null;\n\t\t\t},\n\t\t\t\n\t\t\tresetHorTracking = function(){\n\t\t\t\tlastLefts = [];\n\t\t\t\tlastRight = null;\n\t\t\t},\n\t\t\n\t\t\t// On webkit, touch events hardly trickle through textareas and inputs\n\t\t\t// Disabling CSS pointer events makes sure they do, but it also makes the controls innaccessible\n\t\t\t// Toggling pointer events at the right moments seems to do the trick\n\t\t\t// Thanks Thomas Bachem http://stackoverflow.com/a/5798681 for the following\n\t\t\tinputs,\n\t\t\tsetPointers = function( val ){\n\t\t\t\tinputs = elem.querySelectorAll( \"textarea, input\" );\n\t\t\t\tfor( var i = 0, il = inputs.length; i < il; i++ ) {\n\t\t\t\t\tinputs[ i ].style.pointerEvents = val;\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\t// For nested overthrows, changeScrollTarget restarts a touch event cycle on a parent or child overthrow\n\t\t\tchangeScrollTarget = function( startEvent, ascend ){\n\t\t\t\tif( doc.createEvent ){\n\t\t\t\t\tvar newTarget = ( !ascend || ascend === undefined ) && elem.parentNode || elem.touchchild || elem,\n\t\t\t\t\t\ttEnd;\n\t\t\t\t\t\t\t\n\t\t\t\t\tif( newTarget !== elem ){\n\t\t\t\t\t\ttEnd = doc.createEvent( \"HTMLEvents\" );\n\t\t\t\t\t\ttEnd.initEvent( \"touchend\", true, true );\n\t\t\t\t\t\telem.dispatchEvent( tEnd );\n\t\t\t\t\t\tnewTarget.touchchild = elem;\n\t\t\t\t\t\telem = newTarget;\n\t\t\t\t\t\tnewTarget.dispatchEvent( startEvent );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\t// Touchstart handler\n\t\t\t// On touchstart, touchmove and touchend are freshly bound, and all three share a bunch of vars set by touchstart\n\t\t\t// Touchend unbinds them again, until next time\n\t\t\tstart = function( e ){\n\n\t\t\t\t// Stop any throw in progress\n\t\t\t\tif( o.intercept ){\n\t\t\t\t\to.intercept();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Reset the distance and direction tracking\n\t\t\t\tresetVertTracking();\n\t\t\t\tresetHorTracking();\n\t\t\t\t\n\t\t\t\telem = o.closest( e.target );\n\t\t\t\t\t\n\t\t\t\tif( !elem || elem === docElem || e.touches.length > 1 ){\n\t\t\t\t\treturn;\n\t\t\t\t}\t\t\t\n\n\t\t\t\tsetPointers( \"none\" );\n\t\t\t\tvar touchStartE = e,\n\t\t\t\t\tscrollT = elem.scrollTop,\n\t\t\t\t\tscrollL = elem.scrollLeft,\n\t\t\t\t\theight = elem.offsetHeight,\n\t\t\t\t\twidth = elem.offsetWidth,\n\t\t\t\t\tstartY = e.touches[ 0 ].pageY,\n\t\t\t\t\tstartX = e.touches[ 0 ].pageX,\n\t\t\t\t\tscrollHeight = elem.scrollHeight,\n\t\t\t\t\tscrollWidth = elem.scrollWidth,\n\t\t\t\t\n\t\t\t\t\t// Touchmove handler\n\t\t\t\t\tmove = function( e ){\n\t\t\t\t\t\n\t\t\t\t\t\tvar ty = scrollT + startY - e.touches[ 0 ].pageY,\n\t\t\t\t\t\t\ttx = scrollL + startX - e.touches[ 0 ].pageX,\n\t\t\t\t\t\t\tdown = ty >= ( lastTops.length ? lastTops[ 0 ] : 0 ),\n\t\t\t\t\t\t\tright = tx >= ( lastLefts.length ? lastLefts[ 0 ] : 0 );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t// If there's room to scroll the current container, prevent the default window scroll\n\t\t\t\t\t\tif( ( ty > 0 && ty < scrollHeight - height ) || ( tx > 0 && tx < scrollWidth - width ) ){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This bubbling is dumb. Needs a rethink.\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tchangeScrollTarget( touchStartE );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If down and lastDown are inequal, the y scroll has changed direction. Reset tracking.\n\t\t\t\t\t\tif( lastDown && down !== lastDown ){\n\t\t\t\t\t\t\tresetVertTracking();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If right and lastRight are inequal, the x scroll has changed direction. Reset tracking.\n\t\t\t\t\t\tif( lastRight && right !== lastRight ){\n\t\t\t\t\t\t\tresetHorTracking();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// remember the last direction in which we were headed\n\t\t\t\t\t\tlastDown = down;\n\t\t\t\t\t\tlastRight = right;\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t// set the container's scroll\n\t\t\t\t\t\telem.scrollTop = ty;\n\t\t\t\t\t\telem.scrollLeft = tx;\n\t\t\t\t\t\n\t\t\t\t\t\tlastTops.unshift( ty );\n\t\t\t\t\t\tlastLefts.unshift( tx );\n\t\t\t\t\t\n\t\t\t\t\t\tif( lastTops.length > 3 ){\n\t\t\t\t\t\t\tlastTops.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( lastLefts.length > 3 ){\n\t\t\t\t\t\t\tlastLefts.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t\t// Touchend handler\n\t\t\t\t\tend = function( e ){\n\n\t\t\t\t\t\t// Bring the pointers back\n\t\t\t\t\t\tsetPointers( \"auto\" );\n\t\t\t\t\t\tsetTimeout( function(){\n\t\t\t\t\t\t\tsetPointers( \"none\" );\n\t\t\t\t\t\t}, 450 );\n\t\t\t\t\t\telem.removeEventListener( \"touchmove\", move, false );\n\t\t\t\t\t\telem.removeEventListener( \"touchend\", end, false );\n\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\telem.addEventListener( \"touchmove\", move, false );\n\t\t\t\telem.addEventListener( \"touchend\", end, false );\n\t\t\t};\n\t\t\t\n\t\t// Bind to touch, handle move and end within\n\t\tdoc.addEventListener( \"touchstart\", start, false );\n\t};\n\t\t\n})( this, this.overthrow );\n\n/**\n * This module will provide directives to create modals and overlays components.\n *\n * @module mobile-angular-ui.components.modals\n */\n(function() {\n 'use strict';\n angular.module('mobile-angular-ui.components.modals', [])\n\n /**\n * A directive to create modals and overlays components.\n *\n * Modals are basically the same of Bootstrap 3 but you have to use uiSharedState\n * with `ngIf/uiIf` or `ngHide/uiHide` to `activate/dismiss` it.\n *\n * By default both modals and overlay are made always showing up by\n * css rule `.modal {display:block}`, so you can use it with\n * `ngAnimate` and other angular directives in a simpler way.\n *\n * Overlay are a style of modal that looks more native in mobile devices providing a blurred\n * overlay as background.\n *\n * You can create an overlay adding `.modal-overlay` class to a modal.\n *\n * ### Note\n *\n * For modals and overlays to cover the entire page you have to attach them\n * as child of `body` element. To achieve this from a view is a common use for\n * `contentFor/yieldTo` directives contained from\n * [capture module](/docs/module:mobile-angular-ui/module:core/module:capture):\n *\n * ``` html\n * \n *\n * \n * \n *
\n *\n * \n * ```\n *\n * Then you can wrap your modals and overlays in `contentFor`:\n *\n * ``` html\n *
\n * *
\n *
\n * ```\n *\n * **Example.** Create a Modal.\n *\n * ``` html\n *
\n *
\n *
\n *
\n *
\n *
\n * \n *

Modal title

\n *
\n *
\n *

Lorem ipsum ...

\n *
\n *
\n * \n * \n *
\n *
\n *
\n *
\n *
\n * ```\n *\n * **Example.** Create an Overlay.\n *\n * ``` html\n *
\n *
\n *
\n *
\n *
\n * \n *

Modal title

\n *
\n *
\n *

Lorem ipsum ...

\n *
\n *
\n * \n * \n *
\n *
\n *
\n *
\n *
\n * ```\n *\n * @directive modal\n * @restrict C\n */\n .directive('modal', [\n '$rootElement',\n function($rootElement) {\n return {\n restrict: 'C',\n link: function(scope, elem) {\n $rootElement.addClass('has-modal');\n elem.on('$destroy', function() {\n $rootElement.removeClass('has-modal');\n });\n scope.$on('$destroy', function() {\n $rootElement.removeClass('has-modal');\n });\n\n if (elem.hasClass('modal-overlay')) {\n $rootElement.addClass('has-modal-overlay');\n elem.on('$destroy', function() {\n $rootElement.removeClass('has-modal-overlay');\n });\n scope.$on('$destroy', function() {\n $rootElement.removeClass('has-modal-overlay');\n });\n }\n }\n };\n }]);\n})();\n\n/**\n * @module mobile-angular-ui.components.navbars\n * @description\n *\n * Bootstrap default navbars are awesome for responsive websites, but are not the\n * best with a small screen. Also fixed positioning is yet not an option to create\n * navbars standing in top or bottom of the screen.\n *\n * Mobile Angular Ui offers an alternative to bootstrap navbars that is more\n * suitable for mobile.\n *\n * It uses scrollable areas to avoid scroll issues. In the following figure you can\n * see the difference between fixed navbars and navbars with absolute positioning.\n *\n *
\n * \"\"/\n *
\n *\n * Here is the basic markup to achieve this.\n *\n * ``` html\n *
\n *
\n * \n *
\n *\n *
\n * \n *
\n *\n *
\n * \n *
\n *
\n * ```\n *\n * As you can notice the base class is `.navbar-app` while the positioning is\n * obtained adding either `.navbar-absolute-top` or `.navbar-absolute-bottom`\n * class.\n *\n * ### Mobile Navbar Layout\n *\n * Top navbar in mobile design most of the times follows a clear pattern: a\n * centered title surrounded by one or two action buttons, the _back_ or the\n * _menu_ buttons are two common examples.\n *\n * Twitter Bootstrap ships with a different arrangement of components for navbars\n * since they are supposed to host an horizontal navigation menu.\n *\n * `.navbar-app` is specifically designed to support this different type of\n * `.interaction and arrangement.\n *\n * Consider the following example:\n *\n * ``` html\n *
\n *\n *
\n * Navbar Brand\n *
\n *\n *
\n *
\n * Left Action\n *
\n *
\n *\n *
\n *
\n * Right Action\n *
\n *
\n *
\n * ```\n *\n * `.navbar-brand-center` is a specialization of BS3's `.navbar-brand`. It will\n * render the title centered and below the two button groups. Note that `.navbar-\n * brand-center` will position the title with absolute positioning ensuring that\n * it will never cover the buttons, which would cause interaction problems.\n *\n */\n\n(function() {\n 'use strict';\n\n var module = angular.module('mobile-angular-ui.components.navbars', []);\n\n /**\n * @directive navbarAbsoluteTop\n * @restrict C\n * @description\n *\n * Setup absolute positioned top navbar.\n *\n * ``` html\n *
\n * \n *
\n * ```\n */\n\n /**\n * @directive navbarAbsoluteBottom\n * @restrict C\n * @description\n *\n * Setup absolute positioned bottom navbar.\n *\n * ``` html\n *
\n * \n *
\n * ```\n */\n angular.forEach(['top', 'bottom'], function(side) {\n var directiveName = 'navbarAbsolute' + side.charAt(0).toUpperCase() + side.slice(1);\n module.directive(directiveName, [\n '$rootElement',\n function($rootElement) {\n return {\n restrict: 'C',\n link: function(scope) {\n $rootElement.addClass('has-navbar-' + side);\n scope.$on('$destroy', function() {\n $rootElement.removeClass('has-navbar-' + side);\n });\n }\n };\n }\n ]);\n });\n})();\n\n/**\n * @module mobile-angular-ui.components.scrollable\n * @description\n *\n * One thing you'll always have to deal with approaching mobile web app\n * development is scroll and `position:fixed` bugs.\n *\n * Due to the lack of support in some devices fixed positioned elements may\n * bounce or disappear during scroll. Also mobile interaction often leverages\n * horizontal scroll eg. in carousels or sliders.\n *\n * We use `overflow:auto` to create scrollable areas and solve any problems\n * related to scroll.\n *\n * Since `overflow:auto` is not always available in touch devices we use [Overthrow](http://filamentgroup.github.io/Overthrow/) to polyfill that.\n *\n * Markup for any scrollable areas is as simple as:\n *\n * ``` html\n *
\n *
...
\n *
\n * ```\n *\n * This piece of code will trigger a directive that properly setup a new `Overthrow`\n * instance for the `.scrollable` node.\n *\n * #### Headers and footers\n *\n * `.scrollable-header/.scrollable-footer` can be used to add fixed header/footer\n * to a scrollable area without having to deal with css height and positioning to\n * avoid breaking scroll.\n *\n * ``` html\n *
\n *
\n *
\n *
\n *
\n * ```\n *\n * #### scrollTo\n *\n * `.scrollable-content` controller exposes a `scrollTo` function: `scrollTo(offsetOrElement, margin)`\n *\n * You have to require it in your directives to use it or obtain through `element().controller`:\n *\n * ``` js\n * var elem = element(document.getElementById('myScrollableContent'));\n * var scrollableContentController = elem.controller('scrollableContent');\n *\n * // - Scroll to top of containedElement\n * scrollableContentController.scrollTo(containedElement);\n *\n * // - Scroll to top of containedElement with a margin of 10px;\n * scrollableContentController.scrollTo(containedElement, 10);\n *\n * // - Scroll top by 200px;\n * scrollableContentController.scrollTo(200);\n * ```\n *\n * #### `ui-scroll-bottom/ui-scroll-top`\n *\n * You can use `ui-scroll-bottom/ui-scroll-top` directives handle that events and implement features like _infinite scroll_.\n *\n * ``` html\n *
\n *
\n *
    \n *
  • \n * {{item.name}}\n *
  • \n *
\n *
\n *
\n * ```\n */\n(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.components.scrollable',\n ['mobile-angular-ui.core.touchmoveDefaults']);\n\n var getTouchY = function(event) {\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var e = (event.changedTouches && event.changedTouches[0]) ||\n (event.originalEvent && event.originalEvent.changedTouches &&\n event.originalEvent.changedTouches[0]) ||\n touches[0].originalEvent || touches[0];\n\n return e.clientY;\n };\n\n module.directive('scrollableContent', function() {\n return {\n restrict: 'C',\n controller: ['$element', '$document', 'allowTouchmoveDefault', function($element, $document, allowTouchmoveDefault) {\n var scrollableContent = $element[0];\n var scrollable = $element.parent()[0];\n\n // Handle nobounce behaviour\n if ('ontouchmove' in $document[0]) {\n var allowUp;\n var allowDown;\n var lastY;\n var setupTouchstart = function(event) {\n allowUp = (scrollableContent.scrollTop > 0);\n\n allowDown = (scrollableContent.scrollTop < scrollableContent.scrollHeight - scrollableContent.clientHeight);\n lastY = getTouchY(event);\n };\n\n $element.on('touchstart', setupTouchstart);\n $element.on('$destroy', function() {\n $element.off('touchstart');\n });\n\n allowTouchmoveDefault($element, function(event) {\n var currY = getTouchY(event);\n var up = (currY > lastY);\n var down = !up;\n lastY = currY;\n return (up && allowUp) || (down && allowDown);\n });\n }\n\n this.scrollableContent = scrollableContent;\n\n this.scrollTo = function(elementOrNumber, marginTop) {\n marginTop = marginTop || 0;\n\n if (angular.isNumber(elementOrNumber)) {\n scrollableContent.scrollTop = elementOrNumber - marginTop;\n } else {\n var target = angular.element(elementOrNumber)[0];\n if ((!target.offsetParent) || target.offsetParent === scrollable) {\n scrollableContent.scrollTop = target.offsetTop - marginTop;\n } else {\n // recursively subtract offsetTop from marginTop until it reaches scrollable element.\n this.scrollTo(target.offsetParent, marginTop - target.offsetTop);\n }\n }\n };\n }],\n link: function(scope, element) {\n if (overthrow.support !== 'native') {\n element.addClass('overthrow');\n overthrow.forget();\n overthrow.set();\n }\n }\n };\n });\n\n angular.forEach(['input', 'textarea'], function(directiveName) {\n module.directive(directiveName, ['$rootScope', '$timeout', function($rootScope, $timeout) {\n return {\n require: '?^^scrollableContent',\n link: function(scope, elem, attrs, scrollable) {\n // Workaround to avoid soft keyboard hiding inputs\n elem.on('focus', function() {\n if (scrollable && scrollable.scrollableContent) {\n var h1 = scrollable.scrollableContent.offsetHeight;\n $timeout(function() {\n var h2 = scrollable.scrollableContent.offsetHeight;\n //\n // if scrollableContent height is reduced in half second\n // since an input got focus we assume soft keyboard is showing.\n //\n if (h1 > h2) {\n var marginTop = 10;\n // if scrollableHeader is present increase the marginTop to compensate for scrollableHeader's height.\n var scrollableHeader = scrollable.scrollableContent.parentElement.querySelector('.scrollable-header');\n if (scrollableHeader) {\n marginTop = (scrollableHeader.getBoundingClientRect().bottom - scrollableHeader.getBoundingClientRect().top) + marginTop;\n }\n scrollable.scrollTo(elem, marginTop);\n }\n }, 500);\n }\n });\n }\n };\n }]);\n });\n\n /**\n * @directive uiScrollTop\n * @restrict A\n *\n * @param {expression} uiScrollTop The expression to be evaluated when scroll\n * reaches top of element.\n */\n\n /**\n * @directive uiScrollBottom\n * @restrict A\n *\n * @param {expression} uiScrollBottom The expression to be evaluated when scroll\n * reaches bottom of element.\n */\n angular.forEach(\n {\n uiScrollTop: function(elem) {\n return elem.scrollTop === 0;\n },\n uiScrollBottom: function(elem) {\n return elem.scrollHeight === elem.scrollTop + elem.clientHeight;\n }\n },\n function(reached, directiveName) {\n module.directive(directiveName, [function() {\n return {\n restrict: 'A',\n link: function(scope, elem, attrs) {\n elem.on('scroll', function() {\n /* If reached bottom */\n if (reached(elem[0])) {\n /* Do what is specified by onScrollBottom */\n scope.$apply(function() {\n scope.$eval(attrs[directiveName]);\n });\n }\n });\n }\n };\n }]);\n });\n\n /**\n * @directive uiScrollableHeader\n * @restrict C\n */\n\n /**\n * @directive uiScrollableFooter\n * @restrict C\n */\n angular.forEach({Top: 'scrollableHeader', Bottom: 'scrollableFooter'},\n function(directiveName, side) {\n module.directive(directiveName, [\n '$window',\n function($window) {\n return {\n restrict: 'C',\n link: function(scope, element) {\n var el = element[0];\n var parentStyle = element.parent()[0].style;\n\n var adjustParentPadding = function() {\n var styles = $window.getComputedStyle(el);\n var margin = parseInt(styles.marginTop, 10) + parseInt(styles.marginBottom, 10);\n parentStyle['padding' + side] = el.offsetHeight + margin + 'px';\n };\n\n var interval = setInterval(adjustParentPadding, 30);\n\n element.on('$destroy', function() {\n parentStyle['padding' + side] = null;\n clearInterval(interval);\n interval = adjustParentPadding = element = null;\n });\n }\n };\n }\n ]);\n });\n})();\n\n/**\n * @module mobile-angular-ui.components.sidebars\n *\n * @description\n *\n * Sidebars can be placed either in left side or right side adding respectively\n * `.sidebar-left` and `.sidebar-right` classes.\n *\n * ``` html\n *
\n *
\n *

My App

\n *
\n *
\n * Link 1\n * \n * Link 2\n * \n *
\n *
\n *
\n *
\n *\n *
\n * \n *
\n * ```\n *\n * #### Interacting with sidebars\n *\n * Under the hood sidebar uses `SharedState` exposing respective statuses:\n * `uiSidebarLeft` and `uiSidebarRight` unless you define different state name\n * through `id` attribute on sidebar elements.\n *\n * ``` html\n * Toggle sidebar left\n *\n * Toggle sidebar right\n * ```\n *\n * You can put `ui-turn-off='uiSidebarLeft'` or `ui-turn-off='uiSidebarLeft'`\n * inside the sidebar to make it close after clicking links inside them.\n *\n * By default sidebar are closed by clicking/tapping outside them.\n */\n(function() {\n 'use strict';\n\n var module = angular.module(\n 'mobile-angular-ui.components.sidebars', [\n 'mobile-angular-ui.core.sharedState',\n 'mobile-angular-ui.core.outerClick'\n ]\n );\n\n angular.forEach(['left', 'right'], function(side) {\n var directiveName = 'sidebar' + side.charAt(0).toUpperCase() + side.slice(1);\n var defaultStateName = 'ui' + directiveName.charAt(0).toUpperCase() + directiveName.slice(1);\n\n module.directive(directiveName, [\n '$rootElement',\n 'SharedState',\n 'bindOuterClick',\n '$location',\n function(\n $rootElement,\n SharedState,\n bindOuterClick,\n $location\n ) {\n return {\n restrict: 'C',\n link: function(scope, elem, attrs) {\n var parentClass = 'has-sidebar-' + side;\n var visibleClass = 'sidebar-' + side + '-visible';\n var activeClass = 'sidebar-' + side + '-in';\n var stateName = attrs.id ? attrs.id : defaultStateName;\n var trackAsSearchParam = attrs.uiTrackAsSearchParam === '' || attrs.uiTrackAsSearchParam;\n\n var outerClickCb = function() {\n SharedState.turnOff(stateName);\n };\n\n var outerClickIf = function() {\n return SharedState.isActive(stateName);\n };\n\n $rootElement.addClass(parentClass);\n scope.$on('$destroy', function() {\n $rootElement\n .removeClass(parentClass);\n $rootElement\n .removeClass(visibleClass);\n $rootElement\n .removeClass(activeClass);\n });\n\n var defaultActive = attrs.active !== undefined && attrs.active !== 'false';\n SharedState.initialize(scope, stateName, {defaultValue: defaultActive});\n\n scope.$on('mobile-angular-ui.state.changed.' + stateName, function(e, active) {\n if (trackAsSearchParam) {\n $location.search(stateName, active || null);\n }\n\n if (active) {\n $rootElement\n .addClass(visibleClass);\n $rootElement\n .addClass(activeClass);\n } else {\n $rootElement\n .removeClass(activeClass);\n // Note: .removeClass(visibleClass) is called on 'mobile-angular-ui.app.transitionend'\n }\n });\n\n scope.$on('$routeChangeSuccess', function() {\n SharedState.turnOff(stateName);\n });\n\n scope.$on('$routeUpdate', function() {\n if (trackAsSearchParam) {\n if (($location.search())[stateName]) {\n SharedState.turnOn(stateName);\n } else {\n SharedState.turnOff(stateName);\n }\n }\n });\n\n scope.$on('mobile-angular-ui.app.transitionend', function() {\n if (!SharedState.isActive(stateName)) {\n $rootElement.removeClass(visibleClass);\n }\n });\n\n if (attrs.closeOnOuterClicks !== 'false') {\n bindOuterClick(scope, elem, outerClickCb, outerClickIf);\n }\n }\n };\n }\n ]);\n });\n\n module.directive('app', ['$rootScope', function($rootScope) {\n return {\n restrict: 'C',\n link: function(scope, element) {\n\n element.on('transitionend webkitTransitionEnd oTransitionEnd otransitionend', function() {\n $rootScope.$broadcast('mobile-angular-ui.app.transitionend');\n });\n\n }\n };\n }]);\n})();\n\n/**\n * A module with just a directive to create a switch input component.\n *\n * @module mobile-angular-ui.components.switch\n */\n(function() {\n 'use strict';\n angular.module('mobile-angular-ui.components.switch', [])\n\n /**\n * @directive uiSwitch\n * @restrict EA\n * @requires ngModel\n * @description\n *\n * The `ui-switch` directive (not to be confused with `ng-switch`) lets\n * you create a toggle switch control bound to a boolean `ngModel` value.\n *\n *
\n * \"\"/\n *
\n *\n * It requires `ngModel`. It supports `ngChange` and `ngDisabled`.\n *\n * ``` html\n * \n * ```\n *\n * ``` html\n * \n * ```\n *\n * ``` html\n * \n * ```\n *\n * Note that if `$drag` service from `mobile-angular-ui.gestures` is available\n * `ui-switch` will support drag too.\n *\n * @param {expression} ngModel The model bound to this component.\n * @param {boolean} [disabled] Whether this component should be disabled.\n * @param {expression} [ngChange] An expression to be evaluated when model changes.\n */\n .directive('uiSwitch', ['$injector', function($injector) {\n var $drag = $injector.has('$drag') && $injector.get('$drag');\n\n return {\n restrict: 'EA',\n scope: {\n model: '=ngModel',\n changeExpr: '@ngChange'\n },\n link: function(scope, elem, attrs) {\n elem.addClass('switch');\n\n var disabled = attrs.disabled || elem.attr('disabled');\n\n var unwatchDisabled = scope.$watch(\n function() {\n return attrs.disabled || elem.attr('disabled');\n },\n function(value) {\n if (!value || value === 'false' || value === '0') {\n disabled = false;\n } else {\n disabled = true;\n }\n }\n );\n\n var handle = angular.element('
');\n elem.append(handle);\n\n if (scope.model) {\n elem.addClass('active');\n }\n elem.addClass('switch-transition-enabled');\n\n var unwatch = scope.$watch('model', function(value) {\n if (value) {\n elem.addClass('active');\n } else {\n elem.removeClass('active');\n }\n });\n\n var setModel = function(value) {\n if (!disabled && (value !== scope.model)) {\n scope.model = value;\n scope.$apply();\n if (scope.changeExpr !== null && scope.changeExpr !== undefined) {\n scope.$parent.$eval(scope.changeExpr);\n }\n }\n };\n\n var clickCb = function() {\n setModel(!scope.model);\n };\n\n elem.on('click tap', clickCb);\n\n var unbind = angular.noop;\n\n if ($drag) {\n unbind = $drag.bind(handle, {\n transform: $drag.TRANSLATE_INSIDE(elem),\n start: function() {\n elem.off('click tap', clickCb);\n },\n cancel: function() {\n handle.removeAttr('style');\n elem.off('click tap', clickCb);\n elem.on('click tap', clickCb);\n },\n end: function() {\n var rh = handle[0].getBoundingClientRect();\n var re = elem[0].getBoundingClientRect();\n if (rh.left - re.left < rh.width / 3) {\n setModel(false);\n handle.removeAttr('style');\n } else if (re.right - rh.right < rh.width / 3) {\n setModel(true);\n handle.removeAttr('style');\n } else {\n handle.removeAttr('style');\n }\n elem.on('click tap', clickCb);\n }\n });\n }\n\n elem.on('$destroy', function() {\n unbind();\n unwatchDisabled();\n unwatch();\n setModel = unbind = unwatch = unwatchDisabled = clickCb = null;\n });\n }\n };\n }]);\n})();\n\n/**\n * @module mobile-angular-ui.components\n *\n * @description\n *\n * It has directives and services providing mobile friendly\n * components like navbars and sidebars.\n * It requires `mobile-angular-ui.base.css`\n * in order to work properly.\n *\n * ## Standalone Usage\n *\n * Although `.components` module is required by `mobile-angular-ui` by default\n * you can use it alone. Some submodules requires `mobile-angular-ui.core` to work,\n * so be sure its sources are available.\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.components']);\n * ```\n *\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.components', [\n 'mobile-angular-ui.components.modals',\n 'mobile-angular-ui.components.navbars',\n 'mobile-angular-ui.components.sidebars',\n 'mobile-angular-ui.components.scrollable',\n 'mobile-angular-ui.components.switch'\n ]);\n})();\n\n/**\n * @module mobile-angular-ui\n * @position 0\n * @description\n *\n * This is the main angular module of `mobile-angular-ui` framework.\n *\n * By requiring this module you will have all `mobile-angular-ui.core`\n * and `mobile-angular-ui.components` features required as well.\n *\n * ## Usage\n *\n * Declare it as a dependency for your application:\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui', [\n 'mobile-angular-ui.core',\n 'mobile-angular-ui.components'\n ]);\n\n})();\n\n/**\n * @module mobile-angular-ui.gestures.drag\n * @description\n *\n * `mobile-angular-ui.gestures.drag` module exposes the `$drag` service that is used\n * to handle drag gestures. `$drag` service wraps [$touch](../module:touch) service adding\n * CSS transforms reacting to `touchmove` events.\n *\n * ## Usage\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures']);\n * ```\n *\n * Or\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures.drag']);\n * ```\n *\n * ``` js\n * var dragOptions = {\n * transform: $drag.TRANSLATE_BOTH,\n * start: function(dragInfo, event){},\n * end: function(dragInfo, event){},\n * move: function(dragInfo, event){},\n * cancel: function(dragInfo, event){}\n * };\n *\n * $drag.bind(element, dragOptions, touchOptions);\n * ```\n *\n * Where:\n *\n * - `transform` is a `function(element, currentTransform, touch) -> newTransform`\n * returning taking an `element`, its `currentTransform` and returning the `newTransform`\n * for the element in response to `touch`. See [$transform](../module:transform) for more.\n * Default to `$drag.TRANSLATE_BOTH`.\n * - `start`, `end`, `move`, `cancel` are optional callbacks responding to `drag` movement phases.\n * - `dragInfo` is an extended version of `touchInfo` from [$touch](../module:touch),\n * extending it with:\n * - `originalTransform`: The [$transform](../module:transform) object relative to CSS transform before `$drag` is bound.\n * - `originalRect`: The [Bounding Client Rect](https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect)\n * for bound element before any drag action.\n * - `startRect`: The [Bounding Client Rect](https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect)\n * for bound element registered at `start` event.\n * - `startTransform`: The [$transform](../module:transform) at `start` event.\n * - `rect`: The current [Bounding Client Rect](https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect) for bound element.\n * - `transform`: The current [$transform](../module:transform).\n * - `reset`: A function restoring element to `originalTransform`.\n * - `undo`: A function restoring element to `startTransform`.\n * - `touchOptions` is an option object to be passed to underlying [`$touch`](../module:touch) service.\n *\n * ### Predefined transforms\n *\n * - `$drag.NULL_TRANSFORM`: No transform follow movement\n * - `$drag.TRANSLATE_BOTH`: Transform translate following movement on both x and y axis.\n * - `$drag.TRANSLATE_HORIZONTAL`: Transform translate following movement on x axis.\n * - `$drag.TRANSLATE_UP`: Transform translate following movement on negative y axis.\n * - `$drag.TRANSLATE_DOWN`: Transform translate following movement on positive y axis.\n * - `$drag.TRANSLATE_LEFT`: Transform translate following movement on negative x axis.\n * - `$drag.TRANSLATE_RIGHT`: Transform translate following movement on positive x axis.\n * - `$drag.TRANSLATE_VERTICAL`: Transform translate following movement on y axis.\n * - `$drag.TRANSLATE_INSIDE`: Is a function and should be used like:\n *\n * ``` js\n * {\n * transform: $drag.TRANSLATE_INSIDE(myElement)\n * }\n * ```\n *\n * It returns a transform function that contains translate movement inside\n * the passed element.\n *\n * ### `.ui-drag-move` style\n *\n * While moving an `.ui-drag-move` class is attached to element. Style for this class is defined via\n * [insertRule](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.insertRule) and aims to\n * fix common problems while dragging, specifically:\n *\n * - Brings the element in front of other elements\n * - Disable transitions\n * - Makes text unselectable\n *\n * **NOTE** Transitions are disabled cause they may introduce conflicts between `transition: transform`\n * and `dragOptions.transform` function.\n *\n * They will be re-enabled after drag, and this can be used to achieve some graceful effects.\n *\n * If you need transition that does not involve transforms during movement you can apply them to an\n * inner or wrapping element.\n *\n * ### Examples\n *\n * #### Limit movement to an element\n *\n * ``` js\n * app.directive('dragMe', ['$drag', function($drag){\n * return {\n * controller: function($scope, $element) {\n * $drag.bind($element,\n * {\n * transform: $drag.TRANSLATE_INSIDE($element.parent()),\n * end: function(drag) {\n * drag.reset();\n * }\n * },\n * { // release touch when movement is outside bounduaries\n * sensitiveArea: $element.parent()\n * }\n * );\n * }\n * };\n * }]);\n * ```\n * \n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.gestures.drag', [\n 'mobile-angular-ui.gestures.touch',\n 'mobile-angular-ui.gestures.transform'\n ])\n\n .provider('$drag', function() {\n this.$get = ['$touch', '$transform', function($touch, $transform) {\n\n // Add some css rules to be used while moving elements\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(''));\n document.head.appendChild(style);\n var sheet = style.sheet;\n\n // Makes z-index 99999\n sheet.insertRule('html .ui-drag-move{z-index: 99999 !important;}', 0);\n // Disable transitions\n sheet.insertRule('html .ui-drag-move{' +\n '-webkit-transition: none !important;' +\n '-moz-transition: none !important;-o-transition: none !important;' +\n '-ms-transition: none !important;transition: none !important;' +\n '}', 0);\n\n // Makes text unselectable\n sheet.insertRule('html .ui-drag-move, html .ui-drag-move *{' +\n '-webkit-touch-callout: none !important;' +\n '-webkit-user-select: none !important;' +\n '-khtml-user-select: none !important;' +\n '-moz-user-select: none !important;' +\n '-ms-user-select: none !important;' +\n 'user-select: none !important;' +\n '}', 0);\n\n style = sheet = null; // we wont use them anymore so make\n // their memory immediately claimable\n\n return {\n\n //\n // built-in transforms\n //\n NULL_TRANSFORM: function(element, transform) {\n return transform;\n },\n\n TRANSLATE_BOTH: function(element, transform, touch) {\n transform.translateX = touch.distanceX;\n transform.translateY = touch.distanceY;\n return transform;\n },\n\n TRANSLATE_HORIZONTAL: function(element, transform, touch) {\n transform.translateX = touch.distanceX;\n transform.translateY = 0;\n return transform;\n },\n\n TRANSLATE_UP: function(element, transform, touch) {\n transform.translateY = touch.distanceY <= 0 ? touch.distanceY : 0;\n transform.translateX = 0;\n return transform;\n },\n\n TRANSLATE_DOWN: function(element, transform, touch) {\n transform.translateY = touch.distanceY >= 0 ? touch.distanceY : 0;\n transform.translateX = 0;\n return transform;\n },\n\n TRANSLATE_LEFT: function(element, transform, touch) {\n transform.translateX = touch.distanceX <= 0 ? touch.distanceX : 0;\n transform.translateY = 0;\n return transform;\n },\n\n TRANSLATE_RIGHT: function(element, transform, touch) {\n transform.translateX = touch.distanceX >= 0 ? touch.distanceX : 0;\n transform.translateY = 0;\n return transform;\n },\n\n TRANSLATE_VERTICAL: function(element, transform, touch) {\n transform.translateX = 0;\n transform.translateY = touch.distanceY;\n return transform;\n },\n\n TRANSLATE_INSIDE: function(wrapperElementOrRectangle) {\n wrapperElementOrRectangle = wrapperElementOrRectangle.length ? wrapperElementOrRectangle[0] : wrapperElementOrRectangle;\n\n return function(element, transform, touch) {\n element = element.length ? element[0] : element;\n var re = element.getBoundingClientRect();\n var rw = wrapperElementOrRectangle instanceof Element ? wrapperElementOrRectangle.getBoundingClientRect() : wrapperElementOrRectangle;\n var tx;\n var ty;\n\n if (re.width >= rw.width) {\n tx = 0;\n } else if (re.right + touch.stepX > rw.right) {\n tx = rw.right - re.right;\n } else if (re.left + touch.stepX < rw.left) {\n tx = rw.left - re.left;\n } else {\n tx = touch.stepX;\n }\n\n if (re.height >= rw.height) {\n ty = 0;\n } else if (re.bottom + touch.stepY > rw.bottom) {\n ty = rw.bottom - re.bottom;\n } else if (re.top + touch.stepY < rw.top) {\n ty = rw.top - re.top;\n } else {\n ty = touch.stepY;\n }\n\n transform.translateX += tx;\n transform.translateY += ty;\n return transform;\n };\n },\n\n //\n // bind function\n //\n bind: function($element, dragOptions, touchOptions) {\n $element = angular.element($element);\n dragOptions = dragOptions || {};\n touchOptions = touchOptions || {};\n\n var startEventHandler = dragOptions.start;\n var endEventHandler = dragOptions.end;\n var moveEventHandler = dragOptions.move;\n var cancelEventHandler = dragOptions.cancel;\n var transformEventHandler = dragOptions.transform || this.TRANSLATE_BOTH;\n\n var domElement = $element[0];\n var tO = $transform.get($element); // original transform\n var rO = domElement.getBoundingClientRect(); // original bounding rect\n var tS; // transform at start\n var rS;\n\n var moving = false;\n\n var isMoving = function() {\n return moving;\n };\n\n var cleanup = function() {\n moving = false;\n tS = rS = null;\n $element.removeClass('ui-drag-move');\n };\n\n var reset = function() {\n $transform.set(domElement, tO);\n };\n\n var undo = function() {\n $transform.set(domElement, tS || tO);\n };\n\n var setup = function() {\n moving = true;\n rS = domElement.getBoundingClientRect();\n tS = $transform.get(domElement);\n $element.addClass('ui-drag-move');\n };\n\n var createDragInfo = function(touch) {\n touch = angular.extend({}, touch);\n touch.originalTransform = tO;\n touch.originalRect = rO;\n touch.startRect = rS;\n touch.rect = domElement.getBoundingClientRect();\n touch.startTransform = tS;\n touch.transform = $transform.get(domElement);\n touch.reset = reset;\n touch.undo = undo;\n return touch;\n };\n\n var onTouchMove = function(touch, event) {\n // preventDefault no matter what\n // it is (ie. maybe html5 drag for images or scroll)\n event.preventDefault();\n\n // $touch calls start on the first touch\n // to ensure $drag.start is called only while actually\n // dragging and not for touches we will bind $drag.start\n // to the first time move is called\n\n if (isMoving()) { // drag move\n touch = createDragInfo(touch);\n\n var transform = transformEventHandler($element, angular.extend({}, touch.transform), touch, event);\n\n $transform.set(domElement, transform);\n\n if (moveEventHandler) {\n moveEventHandler(touch, event);\n }\n } else { // drag start\n setup();\n if (startEventHandler) {\n startEventHandler(createDragInfo(touch), event);\n }\n }\n };\n\n var onTouchEnd = function(touch, event) {\n if (!isMoving()) {\n return;\n }\n\n // prevents outer swipes\n event.__UiSwipeHandled__ = true;\n\n touch = createDragInfo(touch);\n cleanup();\n\n if (endEventHandler) {\n endEventHandler(touch, event);\n }\n };\n\n var onTouchCancel = function(touch, event) {\n if (!isMoving()) {\n return;\n }\n\n touch = createDragInfo(touch);\n undo(); // on cancel movement is undoed automatically;\n cleanup();\n\n if (cancelEventHandler) {\n cancelEventHandler(touch, event);\n }\n };\n\n return $touch.bind($element,\n {move: onTouchMove, end: onTouchEnd, cancel: onTouchCancel},\n touchOptions);\n } // ~ bind\n }; // ~ return $drag\n }]; // ~ $get\n });\n\n})();\n\n/**\n * A module providing swipe gesture services and directives.\n *\n * @module mobile-angular-ui.gestures.swipe\n */\n(function() {\n 'use strict';\n\n var module = angular.module('mobile-angular-ui.gestures.swipe',\n ['mobile-angular-ui.gestures.touch']);\n\n /**\n * An adaptation of `ngTouch.$swipe`, it is basically the same despite of:\n *\n * - It is based on [$touch](../module:touch)\n * - Swipes are recognized by touch velocity and direction\n * - It does not require `ngTouch` thus is better compatible with fastclick.js\n * - Swipe directives are nestable\n * - It allows to unbind\n * - It has only one difference in interface, and its about how to pass `pointerTypes`:\n *\n * ``` js\n * // ngTouch.$swipe\n * $swipe.bind(..., ['mouse', ... });\n *\n * // mobile-angular-ui.gestures.swipe.$swipe\n * $swipe.bind(..., pointerTypes: { mouse: { start: 'mousedown', ...} });\n * ```\n * This is due to the fact that the second parameter of `$swipe.bind` is destinated to options for\n * underlying `$touch` service.\n *\n * @service $swipe\n * @as class\n */\n module.factory('$swipe', ['$touch', function($touch) {\n var VELOCITY_THRESHOLD = 500; // px/sec\n var MOVEMENT_THRESHOLD = 10; // px\n var TURNAROUND_MAX = 10; // px\n var ANGLE_THRESHOLD = 10; // deg\n var abs = Math.abs;\n\n var defaultOptions = {\n movementThreshold: MOVEMENT_THRESHOLD, // start to consider only if movement\n // exceeded MOVEMENT_THRESHOLD\n valid: function(t) {\n var absAngle = abs(t.angle);\n absAngle = absAngle >= 90 ? absAngle - 90 : absAngle;\n\n var validDistance = t.total - t.distance <= TURNAROUND_MAX;\n var validAngle = absAngle <= ANGLE_THRESHOLD || absAngle >= 90 - ANGLE_THRESHOLD;\n var validVelocity = t.averageVelocity >= VELOCITY_THRESHOLD;\n\n return validDistance && validAngle && validVelocity;\n }\n };\n\n return {\n /**\n * Bind swipe gesture handlers for an element.\n *\n * ``` js\n * var unbind = $swipe.bind(elem, {\n * end: function(touch) {\n * console.log('Swiped:', touch.direction);\n * unbind();\n * }\n * });\n * ```\n *\n * **Swipes Detection**\n *\n * Before consider a touch to be a swipe Mobile Angular UI verifies that:\n *\n * 1. Movement is quick. Average touch velocity should exceed a `VELOCITY_THRESHOLD`.\n * 2. Movement is linear.\n * 3. Movement has a clear, non-ambiguous direction. So we can assume without error\n * that underlying `touch.direction` is exactly the swipe direction. For that\n * movement is checked against an `ANGLE_THRESHOLD`.\n *\n * @param {Element|$element} element The element to observe for swipe gestures.\n * @param {object} eventHandlers An object with handlers for specific swipe events.\n * @param {function} [eventHandlers.start] The callback for swipe start event.\n * @param {function} [eventHandlers.end] The callback for swipe end event.\n * @param {function} [eventHandlers.move] The callback for swipe move event.\n * @param {function} [eventHandlers.cancel] The callback for swipe cancel event.\n * @param {object} [options] Options to be passed to underlying [$touch.bind](../module:touch) function.\n *\n * @returns {function} The unbind function.\n *\n * @method bind\n * @memberOf mobile-angular-ui.gestures.swipe~$swipe\n */\n bind: function(element, eventHandlers, options) {\n options = angular.extend({}, defaultOptions, options || {});\n return $touch.bind(element, eventHandlers, options);\n }\n };\n }]);\n\n /**\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\n * A leftward swipe is a quick, right-to-left slide of the finger.\n *\n * @directive uiSwipeLeft\n * @param {expression} uiSwipeLeft An expression to be evaluated on leftward swipe.\n */\n /**\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\n * A rightward swipe is a quick, left-to-right slide of the finger.\n *\n * @directive uiSwipeRight\n * @param {expression} uiSwipeRight An expression to be evaluated on rightward swipe.\n */\n /**\n * Alias for [uiSwipeLeft](#uiswipeleft).\n *\n * @directive ngSwipeLeft\n * @deprecated\n */\n /**\n * Alias for [uiSwipeRight](#uiswiperight).\n *\n * @directive ngSwipeRight\n * @deprecated\n */\n angular.forEach(['ui', 'ng'], function(prefix) {\n angular.forEach(['Left', 'Right'], function(direction) {\n var directiveName = prefix + 'Swipe' + direction;\n module.directive(directiveName, ['$swipe', '$parse', function($swipe, $parse) {\n return {\n link: function(scope, elem, attrs) {\n var onSwipe = $parse(attrs[directiveName]);\n $swipe.bind(elem, {\n end: function(swipe, event) {\n if (swipe.direction === direction.toUpperCase()) {\n if (!event.__UiSwipeHandled__) {\n event.__UiSwipeHandled__ = true;\n scope.$apply(function() {\n onSwipe(scope, {$touch: swipe});\n });\n }\n }\n }\n });\n }\n };\n }]);\n });\n });\n})();\n\n/* eslint complexity: 0 */\n\n/**\n * Device agnostic touch handling.\n *\n * **Usage**\n *\n * Require this module doing either\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures']);\n * ```\n *\n * Or standalone\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures.touch']);\n * ```\n *\n * Then you will be able to use the `$touch` service like that:\n *\n * ``` js\n * var unbindFn = $touch.bind(element, {\n * start: function(touchInfo, e);\n * move: function(touchInfo, e);\n * end: function(touchInfo, e);\n * cancel: function(touchInfo, e);\n * }, options);\n * ```\n *\n * @module mobile-angular-ui.gestures.touch\n */\n(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.gestures.touch', []);\n\n /**\n * `$touch` is an abstraction of touch event handling that works with\n * any kind of input devices.\n *\n * It is intended for single touch only and provides\n * extended infos about touch like: movement, direction, velocity, duration, and more.\n * $touch service is intended as base to build any single-touch gesture handlers.\n *\n * **Usage**\n *\n * ``` js\n * var unbindFn = $touch.bind(element, {\n * start: function(touchInfo, e);\n * move: function(touchInfo, e);\n * end: function(touchInfo, e);\n * cancel: function(touchInfo, e);\n * }, options);\n * ```\n *\n * @service $touch\n * @as class\n */\n\n /**\n * Configurable provider for `$touch` service\n * @class $touchProvider\n * @ngdoc provider\n * @memberOf mobile-angular-ui.gestures.touch~$touch\n */\n module.provider('$touch', function() {\n\n /* =====================================\n = Configuration =\n =====================================*/\n\n var VALID = function() {\n return true;\n };\n\n var MOVEMENT_THRESHOLD = 1;\n\n var POINTER_EVENTS = {\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n end: 'mouseup'\n },\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n cancel: 'touchcancel'\n }\n };\n\n var POINTER_TYPES = ['mouse', 'touch'];\n\n // function or element or rect\n var SENSITIVE_AREA = function($element) {\n return $element[0].ownerDocument.documentElement.getBoundingClientRect();\n };\n\n /**\n * Set default pointer events option.\n * Pointer Events option specifies a device-by-device map between device specific events and\n * touch events.\n *\n * The default Pointer Events Map is defined as:\n *\n * ``` js\n * var POINTER_EVENTS = {\n * 'mouse': {\n * start: 'mousedown',\n * move: 'mousemove',\n * end: 'mouseup'\n * },\n * 'touch': {\n * start: 'touchstart',\n * move: 'touchmove',\n * end: 'touchend',\n * cancel: 'touchcancel'\n * }\n * };\n * ```\n *\n * Ie.\n *\n * ```\n * app.config(function($touchProvider){\n * $touchProvider.setPointerEvents({ pen: {start: \"pendown\", end: \"penup\", move: \"penmove\" }});\n * });\n * ```\n *\n * @name setPointerEvents\n * @param {object} pointerEvents The pointer events map object\n * @memberOf mobile-angular-ui.gestures.touch~$touch.$touchProvider\n */\n this.setPointerEvents = function(pointerEvents) {\n POINTER_EVENTS = pointerEvents;\n POINTER_TYPES = Object.keys(POINTER_EVENTS);\n };\n\n /**\n * Set default validity function for a touch.\n *\n * The default is defined as always true:\n *\n * ``` js\n * $touchProvider.setValid(function(touch, event) {\n * return true;\n * });\n * ```\n *\n * @param {function} validityFunction The validity function. A function that takes two\n * arguments: `touchInfo` and `event`, and returns\n * a `Boolean` indicating wether the corresponding touch\n * should be considered valid and its handlers triggered,\n * or considered invalid and its handlers be ignored.\n * @method setValid\n * @memberOf mobile-angular-ui.gestures.touch~$touch.$touchProvider\n */\n this.setValid = function(fn) {\n VALID = fn;\n };\n\n /**\n * Set default amount of pixels of movement before\n * start to trigger `touchmove` handlers.\n *\n * Default is `1`.\n *\n * ie.\n *\n * ``` js\n * $touchProvider.setMovementThreshold(120);\n * ```\n *\n * @param {integer} threshold The new treeshold.\n *\n * @method setMovementThreshold\n * @memberOf mobile-angular-ui.gestures.touch~$touch.$touchProvider\n */\n this.setMovementThreshold = function(v) {\n MOVEMENT_THRESHOLD = v;\n };\n /**\n * Set default sensitive area.\n *\n * The sensitive area of a touch is the area of the screen inside what\n * we consider a touch to be meaningful thus triggering its handlers.\n *\n * **NOTE:** if movement goes out the sensitive area the touch event is not cancelled,\n * instead its handler are just ignored.\n *\n * By default sensitive area is defined as `ownerDocument` bounding rectangle\n * of the bound element.\n *\n * ie.\n *\n * ``` js\n * $touchProvider.setSensitiveArea(function($element) {\n * return $element[0].ownerDocument.documentElement.getBoundingClientRect();\n * });\n * ```\n *\n * @param {function|Element|TextRectangle} sensitiveArea The new default sensitive area,\n * either static or as function\n * taking an element and returning another\n * element or a\n * [rectangle](https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect).\n *\n * @method setSensitiveArea\n * @memberOf mobile-angular-ui.gestures.touch~$touch.$touchProvider\n */\n this.setSensitiveArea = function(fnOrElementOrRect) {\n SENSITIVE_AREA = fnOrElementOrRect;\n };\n\n //\n // Shorthands for minification\n //\n var abs = Math.abs;\n var atan2 = Math.atan2;\n var sqrt = Math.sqrt;\n\n /* ===============================\n = Helpers =\n ===============================*/\n\n var getCoordinates = function(event) {\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var e = (event.changedTouches && event.changedTouches[0]) ||\n (event.originalEvent && event.originalEvent.changedTouches &&\n event.originalEvent.changedTouches[0]) ||\n touches[0].originalEvent || touches[0];\n\n return {\n x: e.clientX,\n y: e.clientY\n };\n };\n\n var getEvents = function(pointerTypes, eventType) {\n var res = [];\n angular.forEach(pointerTypes, function(pointerType) {\n var eventName = POINTER_EVENTS[pointerType][eventType];\n if (eventName) {\n res.push(eventName);\n }\n });\n return res.join(' ');\n };\n\n var now = function() {\n return new Date();\n };\n\n var timediff = function(t1, t2) {\n t2 = t2 || now();\n return abs(t2 - t1);\n };\n\n var len = function(x, y) {\n return sqrt(x * x + y * y);\n };\n\n /**\n * `TouchInfo` is an object containing the following extended informations about any touch\n * event.\n *\n * @property {string} type Normalized event type. Despite of pointer device is always one of `touchstart`, `touchend`, `touchmove`, `touchcancel`.\n * @property {Date} timestamp The time object corresponding to the moment this touch event happened.\n * @property {integer} duration The difference between this touch event and the corresponding `touchstart`.\n * @property {float} startX X coord of related `touchstart`.\n * @property {float} startY Y coord of related `touchstart`.\n * @property {float} prevX X coord of previous `touchstart` or `touchmove`.\n * @property {float} prevY Y coord of previous `touchstart` or `touchmove`.\n * @property {float} x X coord of this touch event.\n * @property {float} y Y coord of this touch event.\n * @property {float} step Distance between `[prevX, prevY]` and `[x, y]` points.\n * @property {float} stepX Distance between `prevX` and `x`.\n * @property {float} stepY Distance between `prevY` and `y`.\n * @property {float} velocity Instantaneous velocity of a touch event in pixels per second.\n * @property {float} averageVelocity Average velocity of a touch event from its corresponding `touchstart` in pixels per second.\n * @property {float} distance Distance between `[startX, startY]` and `[x, y]` points.\n * @property {float} distanceX Distance between `startX` and `x`.\n * @property {float} distanceY Distance between `startY` and `y`.\n * @property {float} total Total number of pixels covered by movement, taking account of direction changes and turnarounds.\n * @property {float} totalX Total number of pixels covered by horizontal movement, taking account of direction changes and turnarounds.\n * @property {float} totalY Total number of pixels covered by vertical, taking account of direction changes and turnarounds.\n * @property {string} direction The current prevalent direction for this touch, one of `LEFT`, `RIGHT`, `TOP`, `BOTTOM`.\n * @property {float} angle Angle in degree between x axis and the vector `[x, y]`, is `null` when no movement happens.\n *\n * @class TouchInfo\n * @ngdoc type\n * @memberOf mobile-angular-ui.gestures.touch~$touch\n */\n\n var buildTouchInfo = function(type, c, t0, tl) {\n // Compute values for new TouchInfo based on coordinates and previus touches.\n // - c is coords of new touch\n // - t0 is first touch: useful to compute duration and distance (how far pointer\n // got from first touch)\n // - tl is last touch: useful to compute velocity and length (total length of the movement)\n\n t0 = t0 || {};\n tl = tl || {};\n\n // timestamps\n var ts = now();\n var ts0 = t0.timestamp || ts;\n var tsl = tl.timestamp || ts0;\n\n // coords\n var x = c.x;\n var y = c.y;\n var x0 = t0.x || x;\n var y0 = t0.y || y;\n var xl = tl.x || x0;\n var yl = tl.y || y0;\n\n // total movement\n var totalXl = tl.totalX || 0;\n var totalYl = tl.totalY || 0;\n var totalX = totalXl + abs(x - xl);\n var totalY = totalYl + abs(y - yl);\n var total = len(totalX, totalY);\n\n // duration\n var duration = timediff(ts, ts0);\n var durationl = timediff(ts, tsl);\n\n // distance\n var dxl = x - xl;\n var dyl = y - yl;\n var dl = len(dxl, dyl);\n var dx = x - x0;\n var dy = y - y0;\n var d = len(dx, dy);\n\n // velocity (px per second)\n var v = durationl > 0 ? abs(dl / (durationl / 1000)) : 0;\n var tv = duration > 0 ? abs(total / (duration / 1000)) : 0;\n\n // main direction: 'LEFT', 'RIGHT', 'TOP', 'BOTTOM'\n var dir = abs(dx) > abs(dy) ?\n (dx < 0 ? 'LEFT' : 'RIGHT') :\n (dy < 0 ? 'TOP' : 'BOTTOM');\n\n // angle (angle between distance vector and x axis)\n // angle will be:\n // 0 for x > 0 and y = 0\n // 90 for y < 0 and x = 0\n // 180 for x < 0 and y = 0\n // -90 for y > 0 and x = 0\n //\n // -90°\n // |\n // |\n // |\n // 180° --------|-------- 0°\n // |\n // |\n // |\n // 90°\n //\n var angle = dx !== 0 || dy !== 0 ? atan2(dy, dx) * (180 / Math.PI) : null;\n angle = angle === -180 ? 180 : angle;\n\n return {\n type: type,\n timestamp: ts,\n duration: duration,\n startX: x0,\n startY: y0,\n prevX: xl,\n prevY: yl,\n x: c.x,\n y: c.y,\n\n step: dl, // distance from prev\n stepX: dxl,\n stepY: dyl,\n\n velocity: v,\n averageVelocity: tv,\n\n distance: d, // distance from start\n distanceX: dx,\n distanceY: dy,\n\n total: total, // total length of momement,\n // considering turnaround\n totalX: totalX,\n totalY: totalY,\n direction: dir,\n angle: angle\n };\n };\n\n /* ======================================\n = Factory Method =\n ======================================*/\n\n this.$get = [function() {\n\n return {\n /**\n *\n * Bind touch handlers for an element.\n *\n * ``` js\n * var unbind = $touch.bind(elem, {\n * end: function(touch) {\n * console.log('Avg Speed:', touch.averageVelocity);\n * unbind();\n * }\n * });\n * ```\n *\n * @param {Element|$element} element The element to bound to.\n * @param {object} eventHandlers An object with handlers for specific touch events.\n * @param {function} [eventHandlers.start] The callback for `touchstart` event.\n * @param {function} [eventHandlers.end] The callback for `touchend` event.\n * @param {function} [eventHandlers.move] The callback for `touchmove` event.\n * @param {function} [eventHandlers.cancel] The callback for `touchcancel` event.\n * @param {object} [options] Options.\n * @param {integer} [options.movementThreshold] Amount of pixels of movement before start to trigger `touchmove` handlers.\n * @param {function} [options.valid] Validity function. A `function(TouchInfo, event)⟶boolean` deciding if a touch should be handled or ignored.\n * @param {function|Element|TextRectangle} [options.sensitiveArea] A\n * [Bounding Client Rect](https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect) or an element\n * or a function that takes the bound element and returns one of the previous.\n * Sensitive area define bounduaries to release touch when movement is outside.\n * @param {array} [options.pointerTypes] Pointer types to handle. An array of pointer types that is intended to be\n * a subset of keys from default pointer events map (see `$touchProvider.setPointerEvents`).\n *\n * @returns {function} The unbind function.\n *\n * @memberOf mobile-angular-ui.gestures.touch~$touch\n */\n bind: function($element, eventHandlers, options) {\n\n // ensure element to be an angular element\n $element = angular.element($element);\n\n options = options || {};\n // uses default pointer types in case of none passed\n var pointerTypes = options.pointerTypes || POINTER_TYPES;\n var isValid = options.valid === undefined ? VALID : options.valid;\n var movementThreshold = options.movementThreshold === undefined ? MOVEMENT_THRESHOLD : options.movementThreshold;\n var sensitiveArea = options.sensitiveArea === undefined ? SENSITIVE_AREA : options.sensitiveArea;\n\n // first and last touch\n var t0;\n var tl;\n\n // events\n var startEvents = getEvents(pointerTypes, 'start');\n var endEvents = getEvents(pointerTypes, 'end');\n var moveEvents = getEvents(pointerTypes, 'move');\n var cancelEvents = getEvents(pointerTypes, 'cancel');\n\n var startEventHandler = eventHandlers.start;\n var endEventHandler = eventHandlers.end;\n var moveEventHandler = eventHandlers.move;\n var cancelEventHandler = eventHandlers.cancel;\n\n var $movementTarget = angular.element($element[0].ownerDocument);\n var onTouchMove;\n var onTouchEnd;\n var onTouchCancel;\n\n var resetTouch = function() {\n t0 = tl = null;\n $movementTarget.off(moveEvents, onTouchMove);\n $movementTarget.off(endEvents, onTouchEnd);\n if (cancelEvents) {\n $movementTarget.off(cancelEvents, onTouchCancel);\n }\n };\n\n var isActive = function() {\n return Boolean(t0);\n };\n\n //\n // Callbacks\n //\n\n // on touchstart\n var onTouchStart = function(event) {\n // don't handle multi-touch\n if (event.touches && event.touches.length > 1) {\n return;\n }\n tl = t0 = buildTouchInfo('touchstart', getCoordinates(event));\n $movementTarget.on(moveEvents, onTouchMove);\n $movementTarget.on(endEvents, onTouchEnd);\n if (cancelEvents) {\n $movementTarget.on(cancelEvents, onTouchCancel);\n }\n if (startEventHandler) {\n startEventHandler(t0, event);\n }\n };\n\n // on touchCancel\n onTouchCancel = function(event) {\n var t = buildTouchInfo('touchcancel', getCoordinates(event), t0, tl);\n resetTouch();\n if (cancelEventHandler) {\n cancelEventHandler(t, event);\n }\n };\n\n // on touchMove\n onTouchMove = function(event) {\n // don't handle multi-touch\n if (event.touches && event.touches.length > 1) {\n return;\n }\n\n if (!isActive()) {\n return;\n }\n\n var coords = getCoordinates(event);\n\n //\n // wont fire outside sensitive area\n //\n var mva = typeof sensitiveArea === 'function' ? sensitiveArea($element) : sensitiveArea;\n mva = mva.length ? mva[0] : mva;\n\n var mvaRect = mva instanceof Element ? mva.getBoundingClientRect() : mva;\n\n if (coords.x < mvaRect.left || coords.x > mvaRect.right || coords.y < mvaRect.top || coords.y > mvaRect.bottom) {\n return;\n }\n\n var t = buildTouchInfo('touchmove', coords, t0, tl);\n var totalX = t.totalX;\n var totalY = t.totalY;\n\n tl = t;\n\n if (totalX < movementThreshold && totalY < movementThreshold) {\n return;\n }\n\n if (isValid(t, event)) {\n if (event.cancelable === undefined || event.cancelable) {\n event.preventDefault();\n }\n if (moveEventHandler) {\n moveEventHandler(t, event);\n }\n }\n };\n\n // on touchEnd\n onTouchEnd = function(event) {\n // don't handle multi-touch\n if (event.touches && event.touches.length > 1) {\n return;\n }\n\n if (!isActive()) {\n return;\n }\n\n var t = angular.extend({}, tl, {type: 'touchend'});\n if (isValid(t, event)) {\n if (event.cancelable === undefined || event.cancelable) {\n event.preventDefault();\n }\n if (endEventHandler) {\n setTimeout(function() { // weird workaround to avoid\n // delays with dom manipulations\n // inside the handler\n endEventHandler(t, event);\n }, 0);\n }\n }\n resetTouch();\n };\n\n $element.on(startEvents, onTouchStart);\n\n return function unbind() {\n if ($element) { // <- wont throw if accidentally called twice\n $element.off(startEvents, onTouchStart);\n if (cancelEvents) {\n $movementTarget.off(cancelEvents, onTouchCancel);\n }\n $movementTarget.off(moveEvents, onTouchMove);\n $movementTarget.off(endEvents, onTouchEnd);\n\n // Clear all those variables we carried out from `#bind` method scope\n // to local scope and that we don't have to use anymore\n $element = $movementTarget = startEvents = cancelEvents =\n moveEvents = endEvents = onTouchStart = onTouchCancel =\n onTouchMove = onTouchEnd = pointerTypes = isValid =\n movementThreshold = sensitiveArea = null;\n }\n };\n }\n };\n }];\n });\n})();\n\n/* eslint complexity: 0 */\n\n/**\n * @module mobile-angular-ui.gestures.transform\n * @description\n *\n * `mobile-angular-ui.gestures.transform` provides the `$transform` service is designed\n * with the specific aim to provide a cross-browser way to interpolate CSS 3d transform\n * without having to deal with CSS Matrix, and being able to take into account any previous\n * unknown transform already applied to an element.\n *\n * ## Usage\n *\n * Require this module doing either\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures']);\n * ```\n *\n * Or standalone\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures.transform']);\n * ```\n *\n * Say we have an element with applyed css:\n *\n * ``` html\n *
\n * ```\n *\n * ``` css\n * .myelem {\n * transform: translate(12px) rotate(20deg);\n * }\n * ```\n *\n * Then you can use `$transform` like this:\n *\n * ``` js\n * t = $transform.get(e);\n * t.rotationZ += 15;\n * t.translateX += 1;\n * $transform.set(e, t);\n * ```\n *\n * ### `$transform` service API\n *\n * #### `$transform.fromCssMatrix(cssMatrixString) -> transform`\n *\n * Returns a decomposition of the transform matrix `cssMatrixString`.\n * NOTE: 2d matrices are translated to 3d matrices before any other operation.\n *\n * #### `$transform.toCss(decomposedTransform)`\n *\n * Recompose a css string from `decomposedTransform`.\n *\n * Transforms are recomposed as a composition of:\n *\n * ``` css\n * matrix3d(1,0,0,0, 0,1,0,0, 0,0,1,0, perspective[0], perspective[1], perspective[2], perspective[3])\n * translate3d(translation[0], translation[1], translation[2])\n * rotateX(rotation[0]) rotateY(rotation[1]) rotateZ(rotation[2])\n * matrix3d(1,0,0,0, 0,1,0,0, 0,skew[2],1,0, 0,0,0,1)\n * matrix3d(1,0,0,0, 0,1,0,0, skew[1],0,1,0, 0,0,0,1)\n * matrix3d(1,0,0,0, skew[0],1,0,0, 0,0,1,0, 0,0,0,1)\n * scale3d(scale[0], scale[1], scale[2])\n * ```\n *\n * #### `$transform.get(e) -> transform`\n *\n * Returns a decomposition of the transform matrix applied to `e`.\n *\n * #### `$transform.set(element, transform)`\n *\n * If transform is a string just set it for element `element`. Otherwise is considered as a\n * decomposed transform and is recomposed with `$transform.toCss` and then set to element.\n *\n * ### The decomposed transform object\n *\n * Result of transform matrix decomposition is an object with the following properties:\n *\n * ```\n * translateX\n * translateY\n * translateZ\n * perspectiveX\n * perspectiveY\n * perspectiveZ\n * perspectiveW\n * scaleX\n * scaleY\n * scaleZ\n * rotateX\n * rotateY\n * rotateZ\n * skewXY\n * skewXZ\n * skewYZ\n * ```\n */\n(function() {\n 'use strict';\n\n var module = angular.module('mobile-angular-ui.gestures.transform', []);\n\n module.factory('$transform', function() {\n\n /* ==============================================================\n = Cross-Browser Property Prefix Handling =\n ==============================================================*/\n\n // Cross-Browser style properties\n var cssPrefix;\n var transformProperty;\n var styleProperty;\n var prefixes = ['', 'webkit', 'Moz', 'O', 'ms'];\n var d = document.createElement('div');\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n if ((prefix + 'Perspective') in d.style) {\n cssPrefix = (prefix === '' ? '' : '-' + prefix.toLowerCase() + '-');\n styleProperty = prefix + (prefix === '' ? 'transform' : 'Transform');\n transformProperty = cssPrefix + 'transform';\n break;\n }\n }\n\n d = null;\n\n // return current element transform matrix in a cross-browser way\n var getElementTransformProperty = function(e) {\n e = e.length ? e[0] : e;\n var tr = window\n .getComputedStyle(e, null)\n .getPropertyValue(transformProperty);\n return tr;\n };\n\n // set current element transform matrix in a cross-browser way\n var setElementTransformProperty = function(elem, value) {\n elem = elem.length ? elem[0] : elem;\n elem.style[styleProperty] = value;\n };\n\n /* ======================================================\n = Transform Matrix Decomposition =\n ======================================================*/\n\n var SMALL_NUMBER = 1.e-7;\n\n var rad2deg = function(angle) {\n return angle * 180 / Math.PI;\n };\n\n var sqrt = Math.sqrt;\n var asin = Math.asin;\n var atan2 = Math.atan2;\n var cos = Math.cos;\n var abs = Math.abs;\n var floor = Math.floor;\n\n var cloneMatrix = function(m) {\n var res = [[], [], [], []];\n for (var i = 0; i < m.length; i++) {\n for (var j = 0; j < m[i].length; j++) {\n res[i][j] = m[i][j];\n }\n }\n return res;\n };\n\n var determinant2x2 = function(a, b, c, d) {\n return a * d - b * c;\n };\n\n var determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3) {\n return a1 * determinant2x2(b2, b3, c2, c3) - b1 * determinant2x2(a2, a3, c2, c3) + c1 * determinant2x2(a2, a3, b2, b3);\n };\n\n var determinant4x4 = function(m) {\n var a1 = m[0][0];\n var b1 = m[0][1];\n var c1 = m[0][2];\n var d1 = m[0][3];\n var a2 = m[1][0];\n var b2 = m[1][1];\n var c2 = m[1][2];\n var d2 = m[1][3];\n var a3 = m[2][0];\n var b3 = m[2][1];\n var c3 = m[2][2];\n var d3 = m[2][3];\n var a4 = m[3][0];\n var b4 = m[3][1];\n var c4 = m[3][2];\n var d4 = m[3][3];\n return a1 * determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4) -\n b1 * determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4) +\n c1 * determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4) -\n d1 * determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);\n };\n\n var adjoint = function(m) {\n var res = [[], [], [], []];\n var a1 = m[0][0];\n var b1 = m[0][1];\n var c1 = m[0][2];\n var d1 = m[0][3];\n var a2 = m[1][0];\n var b2 = m[1][1];\n var c2 = m[1][2];\n var d2 = m[1][3];\n var a3 = m[2][0];\n var b3 = m[2][1];\n var c3 = m[2][2];\n var d3 = m[2][3];\n var a4 = m[3][0];\n var b4 = m[3][1];\n var c4 = m[3][2];\n var d4 = m[3][3];\n\n res[0][0] = determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);\n res[1][0] = -determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);\n res[2][0] = determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);\n res[3][0] = -determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);\n res[0][1] = -determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);\n res[1][1] = determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);\n res[2][1] = -determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);\n res[3][1] = determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);\n res[0][2] = determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);\n res[1][2] = -determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);\n res[2][2] = determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);\n res[3][2] = -determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);\n res[0][3] = -determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);\n res[1][3] = determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);\n res[2][3] = -determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);\n res[3][3] = determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);\n\n return res;\n };\n\n var inverse = function(m) {\n var res = adjoint(m);\n var det = determinant4x4(m);\n if (abs(det) < SMALL_NUMBER) {\n return false;\n }\n\n for (var i = 0; i < 4; i++) {\n for (var j = 0; j < 4; j++) {\n res[i][j] /= det;\n }\n }\n return res;\n };\n\n var transposeMatrix4 = function(m) {\n var res = [[], [], [], []];\n for (var i = 0; i < 4; i++) {\n for (var j = 0; j < 4; j++) {\n res[i][j] = m[j][i];\n }\n }\n return res;\n };\n\n var v4MulPointByMatrix = function(p, m) {\n var res = [];\n\n res[0] = (p[0] * m[0][0]) + (p[1] * m[1][0]) +\n (p[2] * m[2][0]) + (p[3] * m[3][0]);\n res[1] = (p[0] * m[0][1]) + (p[1] * m[1][1]) +\n (p[2] * m[2][1]) + (p[3] * m[3][1]);\n res[2] = (p[0] * m[0][2]) + (p[1] * m[1][2]) +\n (p[2] * m[2][2]) + (p[3] * m[3][2]);\n res[3] = (p[0] * m[0][3]) + (p[1] * m[1][3]) +\n (p[2] * m[2][3]) + (p[3] * m[3][3]);\n\n return res;\n };\n\n var v3Length = function(a) {\n return sqrt((a[0] * a[0]) + (a[1] * a[1]) + (a[2] * a[2]));\n };\n\n var v3Scale = function(v, desiredLength) {\n var res = [];\n var len = v3Length(v);\n if (len !== 0) {\n var l = desiredLength / len;\n res[0] *= l;\n res[1] *= l;\n res[2] *= l;\n }\n return res;\n };\n\n var v3Dot = function(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n };\n\n var v3Combine = function(a, b, ascl, bscl) {\n var res = [];\n res[0] = (ascl * a[0]) + (bscl * b[0]);\n res[1] = (ascl * a[1]) + (bscl * b[1]);\n res[2] = (ascl * a[2]) + (bscl * b[2]);\n return res;\n };\n\n var v3Cross = function(a, b) {\n var res = [];\n res[0] = (a[1] * b[2]) - (a[2] * b[1]);\n res[1] = (a[2] * b[0]) - (a[0] * b[2]);\n res[2] = (a[0] * b[1]) - (a[1] * b[0]);\n return res;\n };\n\n var decompose = function(mat) {\n var result = {};\n var localMatrix = cloneMatrix(mat);\n var i;\n var j;\n\n // Normalize the matrix.\n if (localMatrix[3][3] === 0) {\n return false;\n }\n\n for (i = 0; i < 4; i++) {\n for (j = 0; j < 4; j++) {\n localMatrix[i][j] /= localMatrix[3][3];\n }\n }\n\n var perspectiveMatrix = cloneMatrix(localMatrix);\n for (i = 0; i < 3; i++) {\n perspectiveMatrix[i][3] = 0;\n }\n perspectiveMatrix[3][3] = 1;\n\n if (determinant4x4(perspectiveMatrix) === 0) {\n return false;\n }\n\n // First, isolate perspective. This is the messiest.\n if (localMatrix[0][3] !== 0 || localMatrix[1][3] !== 0 || localMatrix[2][3] !== 0) {\n // rightHandSide is the right hand side of the equation.\n var rightHandSide = [];\n rightHandSide[0] = localMatrix[0][3];\n rightHandSide[1] = localMatrix[1][3];\n rightHandSide[2] = localMatrix[2][3];\n rightHandSide[3] = localMatrix[3][3];\n\n // Solve the equation by inverting perspectiveMatrix and multiplying\n // rightHandSide by the inverse. (This is the easiest way, not\n // necessarily the best.)\n var inversePerspectiveMatrix = inverse(perspectiveMatrix);\n var transposedInversePerspectiveMatrix = transposeMatrix4(inversePerspectiveMatrix);\n var perspectivePoint = v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix);\n\n result.perspectiveX = perspectivePoint[0];\n result.perspectiveY = perspectivePoint[1];\n result.perspectiveZ = perspectivePoint[2];\n result.perspectiveW = perspectivePoint[3];\n\n // Clear the perspective partition\n localMatrix[0][3] = localMatrix[1][3] = localMatrix[2][3] = 0;\n localMatrix[3][3] = 1;\n } else {\n // No perspective.\n result.perspectiveX = result.perspectiveY = result.perspectiveZ = 0;\n result.perspectiveW = 1;\n }\n\n // Next take care of translation (easy).\n result.translateX = localMatrix[3][0];\n localMatrix[3][0] = 0;\n result.translateY = localMatrix[3][1];\n localMatrix[3][1] = 0;\n result.translateZ = localMatrix[3][2];\n localMatrix[3][2] = 0;\n\n // Now get scale and shear.\n var row = [[], [], []];\n var pdum3;\n\n for (i = 0; i < 3; i++) {\n row[i][0] = localMatrix[i][0];\n row[i][1] = localMatrix[i][1];\n row[i][2] = localMatrix[i][2];\n }\n\n // Compute X scale factor and normalize first row.\n result.scaleX = v3Length(row[0]);\n v3Scale(row[0], 1.0);\n\n // Compute XY shear factor and make 2nd row orthogonal to 1st.\n result.skewXY = v3Dot(row[0], row[1]);\n v3Combine(row[1], row[0], row[1], 1.0, -result.skewXY);\n\n // Now, compute Y scale and normalize 2nd row.\n result.scaleY = v3Length(row[1]);\n v3Scale(row[1], 1.0);\n result.skewXY /= result.scaleY;\n\n // Compute XZ and YZ shears, orthogonalize 3rd row.\n result.skewXZ = v3Dot(row[0], row[2]);\n v3Combine(row[2], row[0], row[2], 1.0, -result.skewXZ);\n result.skewYZ = v3Dot(row[1], row[2]);\n v3Combine(row[2], row[1], row[2], 1.0, -result.skewYZ);\n\n // Next, get Z scale and normalize 3rd row.\n result.scaleZ = v3Length(row[2]);\n v3Scale(row[2], 1.0);\n result.skewXZ /= result.scaleZ;\n result.skewYZ /= result.scaleZ;\n\n // At this point, the matrix (in rows[]) is orthonormal.\n // Check for a coordinate system flip. If the determinant\n // is -1, then negate the matrix and the scaling factors.\n pdum3 = v3Cross(row[1], row[2]);\n\n if (v3Dot(row[0], pdum3) < 0) {\n for (i = 0; i < 3; i++) {\n result.scaleX *= -1;\n row[i][0] *= -1;\n row[i][1] *= -1;\n row[i][2] *= -1;\n }\n }\n\n // Rotation (angles smaller then SMALL_NUMBER are zeroed)\n result.rotateY = rad2deg(asin(-row[0][2])) || 0;\n if (cos(result.rotateY) === 0) {\n result.rotateX = rad2deg(atan2(-row[2][0], row[1][1])) || 0;\n result.rotateZ = 0;\n } else {\n result.rotateX = rad2deg(atan2(row[1][2], row[2][2])) || 0;\n result.rotateZ = rad2deg(atan2(row[0][1], row[0][0])) || 0;\n }\n\n return result;\n };\n\n /* =========================================\n = Factory interface =\n =========================================*/\n\n var fCom = function(n, def) {\n // avoid scientific notation with toFixed\n var val = (n || def || 0);\n return String(val.toFixed(20));\n };\n\n var fPx = function(n, def) {\n return fCom(n, def) + 'px';\n };\n\n var fDeg = function(n, def) {\n return fCom(n, def) + 'deg';\n };\n\n return {\n fromCssMatrix: function(tr) {\n var M = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n\n // Just returns identity in case no transform is setup for the element\n if (tr && tr !== 'none') {\n var elems = tr.split('(')[1].split(')')[0].split(',').map(Number);\n\n // Is a 2d transform: matrix(a, b, c, d, tx, ty) is a shorthand\n // for matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1)\n if (tr.match(/^matrix\\(/)) {\n M[0][0] = elems[0];\n M[1][0] = elems[1];\n M[0][1] = elems[2];\n M[1][1] = elems[3];\n M[3][0] = elems[4];\n M[3][1] = elems[5];\n\n // Is a 3d transform, set elements by rows\n } else {\n for (var i = 0; i < 16; i++) {\n var row = floor(i / 4);\n var col = i % 4;\n M[row][col] = elems[i];\n }\n }\n }\n return decompose(M);\n },\n\n toCss: function(t) {\n //\n // Transforms are recomposed as a composition of:\n //\n // matrix3d(1,0,0,0, 0,1,0,0, 0,0,1,0, perspective[0], perspective[1], perspective[2], perspective[3])\n // translate3d(translation[0], translation[1], translation[2])\n // rotateX(rotation[0]) rotateY(rotation[1]) rotateZ(rotation[2])\n // matrix3d(1,0,0,0, 0,1,0,0, 0,skew[2],1,0, 0,0,0,1)\n // matrix3d(1,0,0,0, 0,1,0,0, skew[1],0,1,0, 0,0,0,1)\n // matrix3d(1,0,0,0, skew[0],1,0,0, 0,0,1,0, 0,0,0,1)\n // scale3d(scale[0], scale[1], scale[2])\n //\n\n var perspective = [\n fCom(t.perspectiveX),\n fCom(t.perspectiveY),\n fCom(t.perspectiveZ),\n fCom(t.perspectiveW, 1)\n ];\n var translate = [\n fPx(t.translateX),\n fPx(t.translateY),\n fPx(t.translateZ)\n ];\n var scale = [\n fCom(t.scaleX),\n fCom(t.scaleY),\n fCom(t.scaleZ)\n ];\n var rotation = [\n fDeg(t.rotateX),\n fDeg(t.rotateY),\n fDeg(t.rotateZ)\n ];\n var skew = [\n fCom(t.skewXY),\n fCom(t.skewXZ),\n fCom(t.skewYZ)\n ];\n\n return [\n 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,' + perspective.join(',') + ')',\n 'translate3d(' + translate.join(',') + ')',\n 'rotateX(' + rotation[0] + ') rotateY(' + rotation[1] + ') rotateZ(' + rotation[2] + ')',\n 'matrix3d(1,0,0,0,0,1,0,0,0,' + skew[2] + ',1,0,0,0,0,1)',\n 'matrix3d(1,0,0,0,0,1,0,0,' + skew[1] + ',0,1,0,0,0,0,1)',\n 'matrix3d(1,0,0,0,' + skew[0] + ',1,0,0,0,0,1,0,0,0,0,1)',\n 'scale3d(' + scale.join(',') + ')'\n ].join(' ');\n },\n\n //\n // Returns a decomposition of the transform matrix applied\n // to `e`;\n //\n // NOTE: 2d matrices are translated to 3d matrices\n // before any other operation.\n //\n get: function(e) {\n return this.fromCssMatrix(getElementTransformProperty(e));\n },\n\n // Recompose a transform from decomposition `t` and apply it to element `e`\n set: function(e, t) {\n var str = (typeof t === 'string') ? t : this.toCss(t);\n setElementTransformProperty(e, str);\n }\n };\n });\n})();\n\n/**\n * @module mobile-angular-ui.gestures\n * @position 100\n * @description\n *\n * It has directives and services to support `touch`, `swipe` and `drag` gestures.\n *\n * It does not need any `.css` to work.\n *\n *
\n *

\n * This module will not work with `ngTouch`\n * cause it is intended, among offering more features, to be a drop-in\n * replacement for it.\n *

\n *

\n * Be aware that `ngTouch` is still not playing well with `fastclick.js` and its usage with `mobile-angular-ui` is currently discouraged anyway.\n *

\n *
\n *\n * ## Usage\n *\n * `.gestures` module is not required by `mobile-angular-ui` module. It has no\n * dependency on other modules and is intended to be used alone with any other\n * angular framework.\n *\n * You have to include `mobile-angular-ui.gestures.min.js` to your project in order to use it. Ie.\n *\n * ``` html\n * \n * ```\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.gestures']);\n * ```\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.gestures', [\n 'mobile-angular-ui.gestures.drag',\n 'mobile-angular-ui.gestures.swipe',\n 'mobile-angular-ui.gestures.transform'\n ]);\n})();\n\n/**\n * @license\n * lodash \n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.15.0';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Used as the `TypeError` message for \"Functions\" methods. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for function metadata. */\n var BIND_FLAG = 1,\n BIND_KEY_FLAG = 2,\n CURRY_BOUND_FLAG = 4,\n CURRY_FLAG = 8,\n CURRY_RIGHT_FLAG = 16,\n PARTIAL_FLAG = 32,\n PARTIAL_RIGHT_FLAG = 64,\n ARY_FLAG = 128,\n REARG_FLAG = 256,\n FLIP_FLAG = 512;\n\n /** Used to compose bitmasks for comparison styles. */\n var UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 150,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', ARY_FLAG],\n ['bind', BIND_FLAG],\n ['bindKey', BIND_KEY_FLAG],\n ['curry', CURRY_FLAG],\n ['curryRight', CURRY_RIGHT_FLAG],\n ['flip', FLIP_FLAG],\n ['partial', PARTIAL_FLAG],\n ['partialRight', PARTIAL_RIGHT_FLAG],\n ['rearg', REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\n reUnescapedHtml = /[&<>\"'`]/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect hexadecimal string values. */\n var reHasHexPrefix = /^0x/i;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n rsUpper + '+' + rsOptUpperContr,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 'ss'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '`': '`'\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\n function addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n }\n\n /**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\n function addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n }\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array ? array.length : 0;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array ? array.length : 0,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array ? array.length : 0;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array ? array.length : 0;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n result++;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\n function isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n result++;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Use `context` to stub `Date#getTime` use in `_.now`.\n * var stubbed = _.runInContext({\n * 'Date': function() {\n * return { 'getTime': stubGetTime };\n * }\n * });\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n function runInContext(context) {\n context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var objectToString = objectProto.toString;\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n iteratorSymbol = Symbol ? Symbol.iterator : undefined,\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /* Used to set `toString` methods. */\n var defineProperty = (function() {\n var func = getNative(Object, 'defineProperty'),\n name = getNative.name;\n\n return (name && name.length > 2) ? func : undefined;\n }());\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\n var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array of at least `200` elements\n * and any iteratees accept only one argument. The heuristic for whether a\n * section qualifies for shortcut fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB). Change the following template settings to use\n * alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || arrLength < LARGE_ARRAY_SIZE ||\n (arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n this.__data__ = new ListCache(entries);\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n return this.__data__['delete'](key);\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function assignInDefaults(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (typeof key == 'number' && value === undefined && !(key in object))) {\n object[key] = value;\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths of elements to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n isNil = object == null,\n length = paths.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = isNil ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n function baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n return objectToString.call(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n if (!isKey(path, object)) {\n path = castPath(path);\n object = parent(object, path);\n path = last(path);\n }\n var func = object == null ? object : object[toKey(path)];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && objectToString.call(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && objectToString.call(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObject(value) && objectToString.call(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n if (!(isArray(source) || isTypedArray(source))) {\n var props = baseKeysIn(source);\n }\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(object[key], srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n });\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = object[key],\n srcValue = source[key],\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n newValue = srcValue;\n if (isArray(srcValue) || isTypedArray(srcValue)) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else {\n isCommon = false;\n newValue = baseClone(srcValue, true);\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n isCommon = false;\n newValue = baseClone(srcValue, true);\n }\n else {\n newValue = objValue;\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, props) {\n object = Object(object);\n return basePickBy(object, props, function(value, key) {\n return key in object;\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick from.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, props, predicate) {\n var index = -1,\n length = props.length,\n result = {};\n\n while (++index < length) {\n var key = props[index],\n value = object[key];\n\n if (predicate(value, key)) {\n result[key] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n }\n else if (!isKey(index, array)) {\n var path = castPath(index),\n object = parent(array, path);\n\n if (object != null) {\n delete object[toKey(last(path))];\n }\n }\n else {\n delete array[toKey(index)];\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop detection.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array ? array.length : low;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array ? array.length : 0,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n object = parent(object, path);\n\n var key = toKey(last(path));\n return !(object != null && hasOwnProperty.call(object, key)) || delete object[key];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var index = -1,\n length = arrays.length;\n\n while (++index < length) {\n var result = result\n ? arrayPush(\n baseDifference(result, arrays[index], iteratee, comparator),\n baseDifference(arrays[index], result, iteratee, comparator)\n )\n : arrays[index];\n }\n return (result && result.length) ? baseUniq(result, iteratee, comparator) : [];\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n }\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\n function cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\n function cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n }\n\n /**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return baseRest(function(funcs) {\n funcs = baseFlatten(funcs, 1);\n\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 &&\n isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & ARY_FLAG,\n isBind = bitmask & BIND_FLAG,\n isBindKey = bitmask & BIND_KEY_FLAG,\n isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),\n isFlip = bitmask & FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return baseRest(function(iteratees) {\n iteratees = (iteratees.length == 1 && isArray(iteratees[0]))\n ? arrayMap(iteratees[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(iteratees, 1), baseUnary(getIteratee()));\n\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n if (!(bitmask & CURRY_BOUND_FLAG)) {\n bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * The bitmask may be composed of the following flags:\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] == null\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {\n bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n /**\n * Creates an array of the own and inherited enumerable symbol properties\n * of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11,\n // for data views in Edge < 14, and promises in Node.js.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length,\n lastIndex = length - 1;\n\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) ||\n ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function mergeDefaults(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = (function() {\n var count = 0,\n lastCalled = 0;\n\n return function(key, value) {\n var stamp = now(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return key;\n }\n } else {\n count = 0;\n }\n return baseSetData(key, value);\n };\n }());\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n var setWrapToString = !defineProperty ? identity : function(wrapper, reference, bitmask) {\n var source = (reference + '');\n return defineProperty(wrapper, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)))\n });\n };\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array ? array.length : 0;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array ? array.length : 0,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length,\n args = Array(length ? length - 1 : 0),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return length\n ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1))\n : [];\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order of result values is determined by the\n * order they occur in the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. Result values are chosen from the first array.\n * The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. Result values\n * are chosen from the first array. The comparator is invoked with two arguments:\n * (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array ? array.length : 0;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array ? array.length : 0;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array ? array.length : 0;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array ? array.length : 0;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs ? pairs.length : 0,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array ? array.length : 0;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array ? array.length : 0;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order of result values is determined by the\n * order they occur in the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. Result values are chosen from the first array.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. Result values are chosen\n * from the first array. The comparator is invoked with two arguments:\n * (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (comparator === last(mapped)) {\n comparator = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array ? nativeJoin.call(array, separator) : '';\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array ? array.length : 0;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array ? array.length : 0;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = (\n index < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1)\n ) + 1;\n }\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, index - 1, true);\n }\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = baseRest(function(array, indexes) {\n indexes = baseFlatten(indexes, 1);\n\n var length = array ? array.length : 0,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array ? nativeReverse.call(array) : array;\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array ? array.length : 0;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array ? array.length : 0;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array ? array.length : 0;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false},\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each\n * element is kept.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length)\n ? baseUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length)\n ? baseUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The comparator is invoked with\n * two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n return (array && array.length)\n ? baseUniq(array, undefined, comparator)\n : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The comparator is invoked with\n * two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths of elements to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = baseRest(function(paths) {\n paths = baseFlatten(paths, 1);\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity]\n * The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _([1, 2]).forEach(function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n result[key] = [value];\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n isProp = isKey(path),\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\n result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n result[key] = value;\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var array = isArrayLike(collection) ? collection : values(collection),\n length = array.length;\n\n return length > 0 ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n var index = -1,\n result = toArray(collection),\n length = result.length,\n lastIndex = length - 1;\n\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = baseClamp(toInteger(n), 0, length);\n }\n while (++index < n) {\n var rand = baseRandom(index, lastIndex),\n value = result[rand];\n\n result[rand] = result[index];\n result[index] = value;\n }\n result.length = n;\n return result;\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n return sampleSize(collection, MAX_ARRAY_LENGTH);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, function(o) { return o.user; });\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n *\n * _.sortBy(users, 'user', function(o) {\n * return Math.floor(o.age / 10);\n * });\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = BIND_FLAG | BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one or more milliseconds.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Assign cache to `_.memoize`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = baseRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = baseRest(function(func, indexes) {\n return createWrap(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1));\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n wrapper = wrapper == null ? identity : wrapper;\n return partial(wrapper, value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, false, true);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n return baseClone(value, false, true, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, true, true);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n return baseClone(value, true, true, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' ||\n typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (nonEnumShadows || isPrototype(value)) {\n return !nativeKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n return (objectToString.call(value) == errorTag) ||\n (typeof value.message == 'string' && typeof value.name == 'string');\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return !!value && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error('This method is not supported with core-js. Try https://github.com/es-shims.');\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && objectToString.call(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) ||\n objectToString.call(value) != objectTag || isHostObject(value)) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && objectToString.call(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (iteratorSymbol && value[iteratorSymbol]) {\n return iteratorToArray(value[iteratorSymbol]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths of elements to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = baseRest(function(object, paths) {\n return baseAt(object, baseFlatten(paths, 1));\n });\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties ? baseAssign(result, properties) : result;\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(args) {\n args.push(undefined, assignInDefaults);\n return apply(assignInWith, undefined, args);\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, mergeDefaults);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n result[iteratee(value, key, object)] = value;\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n result[key] = iteratee(value, key, object);\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with seven arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable string keyed properties of `object` that are\n * not omitted.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [props] The property identifiers to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = baseRest(function(object, props) {\n if (object == null) {\n return {};\n }\n props = arrayMap(baseFlatten(props, 1), toKey);\n return basePick(object, baseDifference(getAllKeysIn(object), props));\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [props] The property identifiers to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = baseRest(function(object, props) {\n return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey));\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n return object == null ? {} : basePickBy(object, getAllKeysIn(object), getIteratee(predicate));\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n object = undefined;\n length = 1;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object) || isTypedArray(object);\n iteratee = getIteratee(iteratee, 4);\n\n if (accumulator == null) {\n if (isArr || isObject(object)) {\n var Ctor = object.constructor;\n if (isArr) {\n accumulator = isArray(object) ? new Ctor : [];\n } else {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n } else {\n accumulator = {};\n }\n }\n (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object ? baseValues(object, keys(object)) : [];\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', \"'\", and \"\\`\" in `string` to\n * their corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * Backticks are escaped because in IE < 9, they can break out of\n * attribute values or HTML comments. See [#59](https://html5sec.org/#59),\n * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and\n * [#133](https://html5sec.org/#133) of the\n * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n // Chrome fails to trim leading whitespace characters.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=3109 for more details.\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n string = toString(string).replace(reTrim, '');\n return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = baseClamp(toInteger(position), 0, string.length);\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '\n * \n * \n * \n * \n * \n * \n * \n * \n */\nangular.module('ui.router', ['ui.router.state']);\n\nangular.module('ui.router.compat', ['ui.router']);\n\n/**\n * @ngdoc object\n * @name ui.router.util.$resolve\n *\n * @requires $q\n * @requires $injector\n *\n * @description\n * Manages resolution of (acyclic) graphs of promises.\n */\n$Resolve.$inject = ['$q', '$injector'];\nfunction $Resolve( $q, $injector) {\n \n var VISIT_IN_PROGRESS = 1,\n VISIT_DONE = 2,\n NOTHING = {},\n NO_DEPENDENCIES = [],\n NO_LOCALS = NOTHING,\n NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });\n \n\n /**\n * @ngdoc function\n * @name ui.router.util.$resolve#study\n * @methodOf ui.router.util.$resolve\n *\n * @description\n * Studies a set of invocables that are likely to be used multiple times.\n *
\n   * $resolve.study(invocables)(locals, parent, self)\n   * 
\n * is equivalent to\n *
\n   * $resolve.resolve(invocables, locals, parent, self)\n   * 
\n * but the former is more efficient (in fact `resolve` just calls `study` \n * internally).\n *\n * @param {object} invocables Invocable objects\n * @return {function} a function to pass in locals, parent and self\n */\n this.study = function (invocables) {\n if (!isObject(invocables)) throw new Error(\"'invocables' must be an object\");\n var invocableKeys = objectKeys(invocables || {});\n \n // Perform a topological sort of invocables to build an ordered plan\n var plan = [], cycle = [], visited = {};\n function visit(value, key) {\n if (visited[key] === VISIT_DONE) return;\n \n cycle.push(key);\n if (visited[key] === VISIT_IN_PROGRESS) {\n cycle.splice(0, indexOf(cycle, key));\n throw new Error(\"Cyclic dependency: \" + cycle.join(\" -> \"));\n }\n visited[key] = VISIT_IN_PROGRESS;\n \n if (isString(value)) {\n plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);\n } else {\n var params = $injector.annotate(value);\n forEach(params, function (param) {\n if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);\n });\n plan.push(key, value, params);\n }\n \n cycle.pop();\n visited[key] = VISIT_DONE;\n }\n forEach(invocables, visit);\n invocables = cycle = visited = null; // plan is all that's required\n \n function isResolve(value) {\n return isObject(value) && value.then && value.$$promises;\n }\n \n return function (locals, parent, self) {\n if (isResolve(locals) && self === undefined) {\n self = parent; parent = locals; locals = null;\n }\n if (!locals) locals = NO_LOCALS;\n else if (!isObject(locals)) {\n throw new Error(\"'locals' must be an object\");\n } \n if (!parent) parent = NO_PARENT;\n else if (!isResolve(parent)) {\n throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\");\n }\n \n // To complete the overall resolution, we have to wait for the parent\n // promise and for the promise for each invokable in our plan.\n var resolution = $q.defer(),\n result = resolution.promise,\n promises = result.$$promises = {},\n values = extend({}, locals),\n wait = 1 + plan.length/3,\n merged = false;\n \n function done() {\n // Merge parent values we haven't got yet and publish our own $$values\n if (!--wait) {\n if (!merged) merge(values, parent.$$values); \n result.$$values = values;\n result.$$promises = result.$$promises || true; // keep for isResolve()\n delete result.$$inheritedValues;\n resolution.resolve(values);\n }\n }\n \n function fail(reason) {\n result.$$failure = reason;\n resolution.reject(reason);\n }\n\n // Short-circuit if parent has already failed\n if (isDefined(parent.$$failure)) {\n fail(parent.$$failure);\n return result;\n }\n \n if (parent.$$inheritedValues) {\n merge(values, omit(parent.$$inheritedValues, invocableKeys));\n }\n\n // Merge parent values if the parent has already resolved, or merge\n // parent promises and wait if the parent resolve is still in progress.\n extend(promises, parent.$$promises);\n if (parent.$$values) {\n merged = merge(values, omit(parent.$$values, invocableKeys));\n result.$$inheritedValues = omit(parent.$$values, invocableKeys);\n done();\n } else {\n if (parent.$$inheritedValues) {\n result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);\n } \n parent.then(done, fail);\n }\n \n // Process each invocable in the plan, but ignore any where a local of the same name exists.\n for (var i=0, ii=plan.length; i} The template html as a string, or a promise \n * for that string.\n */\n this.fromUrl = function (url, params) {\n if (isFunction(url)) url = url(params);\n if (url == null) return null;\n else return $http\n .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }})\n .then(function(response) { return response.data; });\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$templateFactory#fromProvider\n * @methodOf ui.router.util.$templateFactory\n *\n * @description\n * Creates a template by invoking an injectable provider function.\n *\n * @param {Function} provider Function to invoke via `$injector.invoke`\n * @param {Object} params Parameters for the template.\n * @param {Object} locals Locals to pass to `invoke`. Defaults to \n * `{ params: params }`.\n * @return {string|Promise.} The template html as a string, or a promise \n * for that string.\n */\n this.fromProvider = function (provider, params, locals) {\n return $injector.invoke(provider, null, locals || { params: params });\n };\n}\n\nangular.module('ui.router.util').service('$templateFactory', $TemplateFactory);\n\nvar $$UMFP; // reference to $UrlMatcherFactoryProvider\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:UrlMatcher\n *\n * @description\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list\n * of search parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.\n *\n * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace\n * syntax, which optionally allows a regular expression for the parameter to be specified:\n *\n * * `':'` name - colon placeholder\n * * `'*'` name - catch-all placeholder\n * * `'{' name '}'` - curly placeholder\n * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the\n * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters). For colon\n * placeholders or curly placeholders without an explicit regexp, a path parameter matches any\n * number of characters other than '/'. For catch-all placeholders the path parameter matches\n * any number of characters.\n *\n * Examples:\n *\n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n * trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n * parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n * path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n * @param {string} pattern The pattern to compile into a matcher.\n * @param {Object} config A configuration object hash:\n * @param {Object=} parentMatcher Used to concatenate the pattern/config onto\n * an existing UrlMatcher\n *\n * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`.\n * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`.\n *\n * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any\n * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns\n * non-null) will start with this prefix.\n *\n * @property {string} source The pattern that was passed into the constructor\n *\n * @property {string} sourcePath The path portion of the source property\n *\n * @property {string} sourceSearch The search portion of the source property\n *\n * @property {string} regex The constructed regex that will be used to match against the url when\n * it is time to determine which url will match.\n *\n * @returns {Object} New `UrlMatcher` object\n */\nfunction UrlMatcher(pattern, config, parentMatcher) {\n config = extend({ params: {} }, isObject(config) ? config : {});\n\n // Find all placeholders and create a compiled pattern, using either classic or curly syntax:\n // '*' name\n // ':' name\n // '{' name '}'\n // '{' name ':' regexp '}'\n // The regular expression is somewhat complicated due to the need to allow curly braces\n // inside the regular expression. The placeholder regexp breaks down as follows:\n // ([:*])([\\w\\[\\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case)\n // \\{([\\w\\[\\]]+)(?:\\:\\s*( ... ))?\\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case\n // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either\n // [^{}\\\\]+ - anything other than curly braces or backslash\n // \\\\. - a backslash escape\n // \\{(?:[^{}\\\\]+|\\\\.)*\\} - a matched set of curly braces containing other atoms\n var placeholder = /([:*])([\\w\\[\\]]+)|\\{([\\w\\[\\]]+)(?:\\:\\s*((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n searchPlaceholder = /([:]?)([\\w\\[\\].-]+)|\\{([\\w\\[\\].-]+)(?:\\:\\s*((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n compiled = '^', last = 0, m,\n segments = this.segments = [],\n parentParams = parentMatcher ? parentMatcher.params : {},\n params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(),\n paramNames = [];\n\n function addParameter(id, type, config, location) {\n paramNames.push(id);\n if (parentParams[id]) return parentParams[id];\n if (!/^\\w+([-.]+\\w+)*(?:\\[\\])?$/.test(id)) throw new Error(\"Invalid parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n if (params[id]) throw new Error(\"Duplicate parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n params[id] = new $$UMFP.Param(id, type, config, location);\n return params[id];\n }\n\n function quoteRegExp(string, pattern, squash, optional) {\n var surroundPattern = ['',''], result = string.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, \"\\\\$&\");\n if (!pattern) return result;\n switch(squash) {\n case false: surroundPattern = ['(', ')' + (optional ? \"?\" : \"\")]; break;\n case true:\n result = result.replace(/\\/$/, '');\n surroundPattern = ['(?:\\/(', ')|\\/)?'];\n break;\n default: surroundPattern = ['(' + squash + \"|\", ')?']; break;\n }\n return result + surroundPattern[0] + pattern + surroundPattern[1];\n }\n\n this.source = pattern;\n\n // Split into static segments separated by path parameter placeholders.\n // The number of segments is always 1 more than the number of parameters.\n function matchDetails(m, isSearch) {\n var id, regexp, segment, type, cfg, arrayMode;\n id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null\n cfg = config.params[id];\n segment = pattern.substring(last, m.index);\n regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);\n\n if (regexp) {\n type = $$UMFP.type(regexp) || inherit($$UMFP.type(\"string\"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });\n }\n\n return {\n id: id, regexp: regexp, segment: segment, type: type, cfg: cfg\n };\n }\n\n var p, param, segment;\n while ((m = placeholder.exec(pattern))) {\n p = matchDetails(m, false);\n if (p.segment.indexOf('?') >= 0) break; // we're into the search part\n\n param = addParameter(p.id, p.type, p.cfg, \"path\");\n compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional);\n segments.push(p.segment);\n last = placeholder.lastIndex;\n }\n segment = pattern.substring(last);\n\n // Find any search parameter names and remove them from the last segment\n var i = segment.indexOf('?');\n\n if (i >= 0) {\n var search = this.sourceSearch = segment.substring(i);\n segment = segment.substring(0, i);\n this.sourcePath = pattern.substring(0, last + i);\n\n if (search.length > 0) {\n last = 0;\n while ((m = searchPlaceholder.exec(search))) {\n p = matchDetails(m, true);\n param = addParameter(p.id, p.type, p.cfg, \"search\");\n last = placeholder.lastIndex;\n // check if ?&\n }\n }\n } else {\n this.sourcePath = pattern;\n this.sourceSearch = '';\n }\n\n compiled += quoteRegExp(segment) + (config.strict === false ? '\\/?' : '') + '$';\n segments.push(segment);\n\n this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined);\n this.prefix = segments[0];\n this.$$paramNames = paramNames;\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#concat\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns a new matcher for a pattern constructed by appending the path part and adding the\n * search parameters of the specified pattern to this pattern. The current pattern is not\n * modified. This can be understood as creating a pattern for URLs that are relative to (or\n * suffixes of) the current pattern.\n *\n * @example\n * The following two matchers are equivalent:\n *
\n * new UrlMatcher('/user/{id}?q').concat('/details?date');\n * new UrlMatcher('/user/{id}/details?q&date');\n * 
\n *\n * @param {string} pattern The pattern to append.\n * @param {Object} config An object hash of the configuration for the matcher.\n * @returns {UrlMatcher} A matcher for the concatenated pattern.\n */\nUrlMatcher.prototype.concat = function (pattern, config) {\n // Because order of search parameters is irrelevant, we can add our own search\n // parameters to the end of the new pattern. Parse the new pattern by itself\n // and then join the bits together, but it's much easier to do this on a string level.\n var defaultConfig = {\n caseInsensitive: $$UMFP.caseInsensitive(),\n strict: $$UMFP.strictMode(),\n squash: $$UMFP.defaultSquashPolicy()\n };\n return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this);\n};\n\nUrlMatcher.prototype.toString = function () {\n return this.source;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#exec\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Tests the specified path against this matcher, and returns an object containing the captured\n * parameter values, or null if the path does not match. The returned object contains the values\n * of any search parameters that are mentioned in the pattern, but their value may be null if\n * they are not present in `searchParams`. This means that search parameters are always treated\n * as optional.\n *\n * @example\n *
\n * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {\n *   x: '1', q: 'hello'\n * });\n * // returns { id: 'bob', q: 'hello', r: null }\n * 
\n *\n * @param {string} path The URL path to match, e.g. `$location.path()`.\n * @param {Object} searchParams URL search parameters, e.g. `$location.search()`.\n * @returns {Object} The captured parameter values.\n */\nUrlMatcher.prototype.exec = function (path, searchParams) {\n var m = this.regexp.exec(path);\n if (!m) return null;\n searchParams = searchParams || {};\n\n var paramNames = this.parameters(), nTotal = paramNames.length,\n nPath = this.segments.length - 1,\n values = {}, i, j, cfg, paramName;\n\n if (nPath !== m.length - 1) throw new Error(\"Unbalanced capture group in route '\" + this.source + \"'\");\n\n function decodePathArray(string) {\n function reverseString(str) { return str.split(\"\").reverse().join(\"\"); }\n function unquoteDashes(str) { return str.replace(/\\\\-/g, \"-\"); }\n\n var split = reverseString(string).split(/-(?!\\\\)/);\n var allReversed = map(split, reverseString);\n return map(allReversed, unquoteDashes).reverse();\n }\n\n var param, paramVal;\n for (i = 0; i < nPath; i++) {\n paramName = paramNames[i];\n param = this.params[paramName];\n paramVal = m[i+1];\n // if the param value matches a pre-replace pair, replace the value before decoding.\n for (j = 0; j < param.replace.length; j++) {\n if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;\n }\n if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);\n if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);\n values[paramName] = param.value(paramVal);\n }\n for (/**/; i < nTotal; i++) {\n paramName = paramNames[i];\n values[paramName] = this.params[paramName].value(searchParams[paramName]);\n param = this.params[paramName];\n paramVal = searchParams[paramName];\n for (j = 0; j < param.replace.length; j++) {\n if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;\n }\n if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);\n values[paramName] = param.value(paramVal);\n }\n\n return values;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#parameters\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns the names of all path and search parameters of this pattern in an unspecified order.\n *\n * @returns {Array.} An array of parameter names. Must be treated as read-only. If the\n * pattern has no parameters, an empty array is returned.\n */\nUrlMatcher.prototype.parameters = function (param) {\n if (!isDefined(param)) return this.$$paramNames;\n return this.params[param] || null;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#validates\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Checks an object hash of parameters to validate their correctness according to the parameter\n * types of this `UrlMatcher`.\n *\n * @param {Object} params The object hash of parameters to validate.\n * @returns {boolean} Returns `true` if `params` validates, otherwise `false`.\n */\nUrlMatcher.prototype.validates = function (params) {\n return this.params.$$validates(params);\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#format\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Creates a URL that matches this pattern by substituting the specified values\n * for the path and search parameters. Null values for path parameters are\n * treated as empty strings.\n *\n * @example\n *
\n * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });\n * // returns '/user/bob?q=yes'\n * 
\n *\n * @param {Object} values the values to substitute for the parameters in this pattern.\n * @returns {string} the formatted URL (path and optionally search part).\n */\nUrlMatcher.prototype.format = function (values) {\n values = values || {};\n var segments = this.segments, params = this.parameters(), paramset = this.params;\n if (!this.validates(values)) return null;\n\n var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0];\n\n function encodeDashes(str) { // Replace dashes with encoded \"\\-\"\n return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); });\n }\n\n for (i = 0; i < nTotal; i++) {\n var isPathParam = i < nPath;\n var name = params[i], param = paramset[name], value = param.value(values[name]);\n var isDefaultValue = param.isOptional && param.type.equals(param.value(), value);\n var squash = isDefaultValue ? param.squash : false;\n var encoded = param.type.encode(value);\n\n if (isPathParam) {\n var nextSegment = segments[i + 1];\n var isFinalPathParam = i + 1 === nPath;\n\n if (squash === false) {\n if (encoded != null) {\n if (isArray(encoded)) {\n result += map(encoded, encodeDashes).join(\"-\");\n } else {\n result += encodeURIComponent(encoded);\n }\n }\n result += nextSegment;\n } else if (squash === true) {\n var capture = result.match(/\\/$/) ? /\\/?(.*)/ : /(.*)/;\n result += nextSegment.match(capture)[1];\n } else if (isString(squash)) {\n result += squash + nextSegment;\n }\n\n if (isFinalPathParam && param.squash === true && result.slice(-1) === '/') result = result.slice(0, -1);\n } else {\n if (encoded == null || (isDefaultValue && squash !== false)) continue;\n if (!isArray(encoded)) encoded = [ encoded ];\n if (encoded.length === 0) continue;\n encoded = map(encoded, encodeURIComponent).join('&' + name + '=');\n result += (search ? '&' : '?') + (name + '=' + encoded);\n search = true;\n }\n }\n\n return result;\n};\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:Type\n *\n * @description\n * Implements an interface to define custom parameter types that can be decoded from and encoded to\n * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`}\n * objects when matching or formatting URLs, or comparing or validating parameter values.\n *\n * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more\n * information on registering custom types.\n *\n * @param {Object} config A configuration object which contains the custom type definition. The object's\n * properties will override the default methods and/or pattern in `Type`'s public interface.\n * @example\n *
\n * {\n *   decode: function(val) { return parseInt(val, 10); },\n *   encode: function(val) { return val && val.toString(); },\n *   equals: function(a, b) { return this.is(a) && a === b; },\n *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },\n *   pattern: /\\d+/\n * }\n * 
\n *\n * @property {RegExp} pattern The regular expression pattern used to match values of this type when\n * coming from a substring of a URL.\n *\n * @returns {Object} Returns a new `Type` object.\n */\nfunction Type(config) {\n extend(this, config);\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#is\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Detects whether a value is of a particular type. Accepts a native (decoded) value\n * and determines whether it matches the current `Type` object.\n *\n * @param {*} val The value to check.\n * @param {string} key Optional. If the type check is happening in the context of a specific\n * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the\n * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects.\n * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`.\n */\nType.prototype.is = function(val, key) {\n return true;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#encode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the\n * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it\n * only needs to be a representation of `val` that has been coerced to a string.\n *\n * @param {*} val The value to encode.\n * @param {string} key The name of the parameter in which `val` is stored. Can be used for\n * meta-programming of `Type` objects.\n * @returns {string} Returns a string representation of `val` that can be encoded in a URL.\n */\nType.prototype.encode = function(val, key) {\n return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#decode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Converts a parameter value (from URL string or transition param) to a custom/native value.\n *\n * @param {string} val The URL parameter value to decode.\n * @param {string} key The name of the parameter in which `val` is stored. Can be used for\n * meta-programming of `Type` objects.\n * @returns {*} Returns a custom representation of the URL parameter value.\n */\nType.prototype.decode = function(val, key) {\n return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#equals\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Determines whether two decoded values are equivalent.\n *\n * @param {*} a A value to compare against.\n * @param {*} b A value to compare against.\n * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`.\n */\nType.prototype.equals = function(a, b) {\n return a == b;\n};\n\nType.prototype.$subPattern = function() {\n var sub = this.pattern.toString();\n return sub.substr(1, sub.length - 2);\n};\n\nType.prototype.pattern = /.*/;\n\nType.prototype.toString = function() { return \"{Type:\" + this.name + \"}\"; };\n\n/** Given an encoded string, or a decoded object, returns a decoded object */\nType.prototype.$normalize = function(val) {\n return this.is(val) ? val : this.decode(val);\n};\n\n/*\n * Wraps an existing custom Type as an array of Type, depending on 'mode'.\n * e.g.:\n * - urlmatcher pattern \"/path?{queryParam[]:int}\"\n * - url: \"/path?queryParam=1&queryParam=2\n * - $stateParams.queryParam will be [1, 2]\n * if `mode` is \"auto\", then\n * - url: \"/path?queryParam=1 will create $stateParams.queryParam: 1\n * - url: \"/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2]\n */\nType.prototype.$asArray = function(mode, isSearch) {\n if (!mode) return this;\n if (mode === \"auto\" && !isSearch) throw new Error(\"'auto' array mode is for query parameters only\");\n\n function ArrayType(type, mode) {\n function bindTo(type, callbackName) {\n return function() {\n return type[callbackName].apply(type, arguments);\n };\n }\n\n // Wrap non-array value as array\n function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); }\n // Unwrap array value for \"auto\" mode. Return undefined for empty array.\n function arrayUnwrap(val) {\n switch(val.length) {\n case 0: return undefined;\n case 1: return mode === \"auto\" ? val[0] : val;\n default: return val;\n }\n }\n function falsey(val) { return !val; }\n\n // Wraps type (.is/.encode/.decode) functions to operate on each value of an array\n function arrayHandler(callback, allTruthyMode) {\n return function handleArray(val) {\n if (isArray(val) && val.length === 0) return val;\n val = arrayWrap(val);\n var result = map(val, callback);\n if (allTruthyMode === true)\n return filter(result, falsey).length === 0;\n return arrayUnwrap(result);\n };\n }\n\n // Wraps type (.equals) functions to operate on each value of an array\n function arrayEqualsHandler(callback) {\n return function handleArray(val1, val2) {\n var left = arrayWrap(val1), right = arrayWrap(val2);\n if (left.length !== right.length) return false;\n for (var i = 0; i < left.length; i++) {\n if (!callback(left[i], right[i])) return false;\n }\n return true;\n };\n }\n\n this.encode = arrayHandler(bindTo(type, 'encode'));\n this.decode = arrayHandler(bindTo(type, 'decode'));\n this.is = arrayHandler(bindTo(type, 'is'), true);\n this.equals = arrayEqualsHandler(bindTo(type, 'equals'));\n this.pattern = type.pattern;\n this.$normalize = arrayHandler(bindTo(type, '$normalize'));\n this.name = type.name;\n this.$arrayMode = mode;\n }\n\n return new ArrayType(this, mode);\n};\n\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$urlMatcherFactory\n *\n * @description\n * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory\n * is also available to providers under the name `$urlMatcherFactoryProvider`.\n */\nfunction $UrlMatcherFactory() {\n $$UMFP = this;\n\n var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;\n\n // Use tildes to pre-encode slashes.\n // If the slashes are simply URLEncoded, the browser can choose to pre-decode them,\n // and bidirectional encoding/decoding fails.\n // Tilde was chosen because it's not a RFC 3986 section 2.2 Reserved Character\n function valToString(val) { return val != null ? val.toString().replace(/~/g, \"~~\").replace(/\\//g, \"~2F\") : val; }\n function valFromString(val) { return val != null ? val.toString().replace(/~2F/g, \"/\").replace(/~~/g, \"~\") : val; }\n\n var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {\n \"string\": {\n encode: valToString,\n decode: valFromString,\n // TODO: in 1.0, make string .is() return false if value is undefined/null by default.\n // In 0.2.x, string params are optional by default for backwards compat\n is: function(val) { return val == null || !isDefined(val) || typeof val === \"string\"; },\n pattern: /[^/]*/\n },\n \"int\": {\n encode: valToString,\n decode: function(val) { return parseInt(val, 10); },\n is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },\n pattern: /\\d+/\n },\n \"bool\": {\n encode: function(val) { return val ? 1 : 0; },\n decode: function(val) { return parseInt(val, 10) !== 0; },\n is: function(val) { return val === true || val === false; },\n pattern: /0|1/\n },\n \"date\": {\n encode: function (val) {\n if (!this.is(val))\n return undefined;\n return [ val.getFullYear(),\n ('0' + (val.getMonth() + 1)).slice(-2),\n ('0' + val.getDate()).slice(-2)\n ].join(\"-\");\n },\n decode: function (val) {\n if (this.is(val)) return val;\n var match = this.capture.exec(val);\n return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;\n },\n is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); },\n equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); },\n pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,\n capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/\n },\n \"json\": {\n encode: angular.toJson,\n decode: angular.fromJson,\n is: angular.isObject,\n equals: angular.equals,\n pattern: /[^/]*/\n },\n \"any\": { // does not encode/decode\n encode: angular.identity,\n decode: angular.identity,\n equals: angular.equals,\n pattern: /.*/\n }\n };\n\n function getDefaultConfig() {\n return {\n strict: isStrictMode,\n caseInsensitive: isCaseInsensitive\n };\n }\n\n function isInjectable(value) {\n return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1])));\n }\n\n /**\n * [Internal] Get the default value of a parameter, which may be an injectable function.\n */\n $UrlMatcherFactory.$$getDefaultValue = function(config) {\n if (!isInjectable(config.value)) return config.value;\n if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n return injector.invoke(config.value);\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$urlMatcherFactory#caseInsensitive\n * @methodOf ui.router.util.$urlMatcherFactory\n *\n * @description\n * Defines whether URL matching should be case sensitive (the default behavior), or not.\n *\n * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`;\n * @returns {boolean} the current value of caseInsensitive\n */\n this.caseInsensitive = function(value) {\n if (isDefined(value))\n isCaseInsensitive = value;\n return isCaseInsensitive;\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$urlMatcherFactory#strictMode\n * @methodOf ui.router.util.$urlMatcherFactory\n *\n * @description\n * Defines whether URLs should match trailing slashes, or not (the default behavior).\n *\n * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`.\n * @returns {boolean} the current value of strictMode\n */\n this.strictMode = function(value) {\n if (isDefined(value))\n isStrictMode = value;\n return isStrictMode;\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy\n * @methodOf ui.router.util.$urlMatcherFactory\n *\n * @description\n * Sets the default behavior when generating or matching URLs with default parameter values.\n *\n * @param {string} value A string that defines the default parameter URL squashing behavior.\n * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL\n * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the\n * parameter is surrounded by slashes, squash (remove) one slash from the URL\n * any other string, e.g. \"~\": When generating an href with a default parameter value, squash (remove)\n * the parameter value from the URL and replace it with this string.\n */\n this.defaultSquashPolicy = function(value) {\n if (!isDefined(value)) return defaultSquashPolicy;\n if (value !== true && value !== false && !isString(value))\n throw new Error(\"Invalid squash policy: \" + value + \". Valid policies: false, true, arbitrary-string\");\n defaultSquashPolicy = value;\n return value;\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$urlMatcherFactory#compile\n * @methodOf ui.router.util.$urlMatcherFactory\n *\n * @description\n * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern.\n *\n * @param {string} pattern The URL pattern.\n * @param {Object} config The config object hash.\n * @returns {UrlMatcher} The UrlMatcher.\n */\n this.compile = function (pattern, config) {\n return new UrlMatcher(pattern, extend(getDefaultConfig(), config));\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$urlMatcherFactory#isMatcher\n * @methodOf ui.router.util.$urlMatcherFactory\n *\n * @description\n * Returns true if the specified object is a `UrlMatcher`, or false otherwise.\n *\n * @param {Object} object The object to perform the type check against.\n * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by\n * implementing all the same methods.\n */\n this.isMatcher = function (o) {\n if (!isObject(o)) return false;\n var result = true;\n\n forEach(UrlMatcher.prototype, function(val, name) {\n if (isFunction(val)) {\n result = result && (isDefined(o[name]) && isFunction(o[name]));\n }\n });\n return result;\n };\n\n /**\n * @ngdoc function\n * @name ui.router.util.$urlMatcherFactory#type\n * @methodOf ui.router.util.$urlMatcherFactory\n *\n * @description\n * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to\n * generate URLs with typed parameters.\n *\n * @param {string} name The type name.\n * @param {Object|Function} definition The type definition. See\n * {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n * @param {Object|Function} definitionFn (optional) A function that is injected before the app\n * runtime starts. The result of this function is merged into the existing `definition`.\n * See {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n *\n * @returns {Object} Returns `$urlMatcherFactoryProvider`.\n *\n * @example\n * This is a simple example of a custom type that encodes and decodes items from an\n * array, using the array index as the URL-encoded value:\n *\n *
\n   * var list = ['John', 'Paul', 'George', 'Ringo'];\n   *\n   * $urlMatcherFactoryProvider.type('listItem', {\n   *   encode: function(item) {\n   *     // Represent the list item in the URL using its corresponding index\n   *     return list.indexOf(item);\n   *   },\n   *   decode: function(item) {\n   *     // Look up the list item by index\n   *     return list[parseInt(item, 10)];\n   *   },\n   *   is: function(item) {\n   *     // Ensure the item is valid by checking to see that it appears\n   *     // in the list\n   *     return list.indexOf(item) > -1;\n   *   }\n   * });\n   *\n   * $stateProvider.state('list', {\n   *   url: \"/list/{item:listItem}\",\n   *   controller: function($scope, $stateParams) {\n   *     console.log($stateParams.item);\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * // Changes URL to '/list/3', logs \"Ringo\" to the console\n   * $state.go('list', { item: \"Ringo\" });\n   * 
\n *\n * This is a more complex example of a type that relies on dependency injection to\n * interact with services, and uses the parameter name from the URL to infer how to\n * handle encoding and decoding parameter values:\n *\n *
\n   * // Defines a custom type that gets a value from a service,\n   * // where each service gets different types of values from\n   * // a backend API:\n   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {\n   *\n   *   // Matches up services to URL parameter names\n   *   var services = {\n   *     user: Users,\n   *     post: Posts\n   *   };\n   *\n   *   return {\n   *     encode: function(object) {\n   *       // Represent the object in the URL using its unique ID\n   *       return object.id;\n   *     },\n   *     decode: function(value, key) {\n   *       // Look up the object by ID, using the parameter\n   *       // name (key) to call the correct service\n   *       return services[key].findById(value);\n   *     },\n   *     is: function(object, key) {\n   *       // Check that object is a valid dbObject\n   *       return angular.isObject(object) && object.id && services[key];\n   *     }\n   *     equals: function(a, b) {\n   *       // Check the equality of decoded objects by comparing\n   *       // their unique IDs\n   *       return a.id === b.id;\n   *     }\n   *   };\n   * });\n   *\n   * // In a config() block, you can then attach URLs with\n   * // type-annotated parameters:\n   * $stateProvider.state('users', {\n   *   url: \"/users\",\n   *   // ...\n   * }).state('users.item', {\n   *   url: \"/{user:dbObject}\",\n   *   controller: function($scope, $stateParams) {\n   *     // $stateParams.user will now be an object returned from\n   *     // the Users service\n   *   },\n   *   // ...\n   * });\n   * 
\n */\n this.type = function (name, definition, definitionFn) {\n if (!isDefined(definition)) return $types[name];\n if ($types.hasOwnProperty(name)) throw new Error(\"A type named '\" + name + \"' has already been defined.\");\n\n $types[name] = new Type(extend({ name: name }, definition));\n if (definitionFn) {\n typeQueue.push({ name: name, def: definitionFn });\n if (!enqueue) flushTypeQueue();\n }\n return this;\n };\n\n // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s\n function flushTypeQueue() {\n while(typeQueue.length) {\n var type = typeQueue.shift();\n if (type.pattern) throw new Error(\"You cannot override a type's .pattern at runtime.\");\n angular.extend($types[type.name], injector.invoke(type.def));\n }\n }\n\n // Register default types. Store them in the prototype of $types.\n forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); });\n $types = inherit($types, {});\n\n /* No need to document $get, since it returns this */\n this.$get = ['$injector', function ($injector) {\n injector = $injector;\n enqueue = false;\n flushTypeQueue();\n\n forEach(defaultTypes, function(type, name) {\n if (!$types[name]) $types[name] = new Type(type);\n });\n return this;\n }];\n\n this.Param = function Param(id, type, config, location) {\n var self = this;\n config = unwrapShorthand(config);\n type = getType(config, type, location);\n var arrayMode = getArrayMode();\n type = arrayMode ? type.$asArray(arrayMode, location === \"search\") : type;\n if (type.name === \"string\" && !arrayMode && location === \"path\" && config.value === undefined)\n config.value = \"\"; // for 0.2.x; in 0.3.0+ do not automatically default to \"\"\n var isOptional = config.value !== undefined;\n var squash = getSquashPolicy(config, isOptional);\n var replace = getReplace(config, arrayMode, isOptional, squash);\n\n function unwrapShorthand(config) {\n var keys = isObject(config) ? objectKeys(config) : [];\n var isShorthand = indexOf(keys, \"value\") === -1 && indexOf(keys, \"type\") === -1 &&\n indexOf(keys, \"squash\") === -1 && indexOf(keys, \"array\") === -1;\n if (isShorthand) config = { value: config };\n config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; };\n return config;\n }\n\n function getType(config, urlType, location) {\n if (config.type && urlType) throw new Error(\"Param '\"+id+\"' has two type configurations.\");\n if (urlType) return urlType;\n if (!config.type) return (location === \"config\" ? $types.any : $types.string);\n\n if (angular.isString(config.type))\n return $types[config.type];\n if (config.type instanceof Type)\n return config.type;\n return new Type(config.type);\n }\n\n // array config: param name (param[]) overrides default settings. explicit config overrides param name.\n function getArrayMode() {\n var arrayDefaults = { array: (location === \"search\" ? \"auto\" : false) };\n var arrayParamNomenclature = id.match(/\\[\\]$/) ? { array: true } : {};\n return extend(arrayDefaults, arrayParamNomenclature, config).array;\n }\n\n /**\n * returns false, true, or the squash value to indicate the \"default parameter url squash policy\".\n */\n function getSquashPolicy(config, isOptional) {\n var squash = config.squash;\n if (!isOptional || squash === false) return false;\n if (!isDefined(squash) || squash == null) return defaultSquashPolicy;\n if (squash === true || isString(squash)) return squash;\n throw new Error(\"Invalid squash policy: '\" + squash + \"'. Valid policies: false, true, or arbitrary string\");\n }\n\n function getReplace(config, arrayMode, isOptional, squash) {\n var replace, configuredKeys, defaultPolicy = [\n { from: \"\", to: (isOptional || arrayMode ? undefined : \"\") },\n { from: null, to: (isOptional || arrayMode ? undefined : \"\") }\n ];\n replace = isArray(config.replace) ? config.replace : [];\n if (isString(squash))\n replace.push({ from: squash, to: undefined });\n configuredKeys = map(replace, function(item) { return item.from; } );\n return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace);\n }\n\n /**\n * [Internal] Get the default value of a parameter, which may be an injectable function.\n */\n function $$getDefaultValue() {\n if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n var defaultValue = injector.invoke(config.$$fn);\n if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue))\n throw new Error(\"Default value (\" + defaultValue + \") for parameter '\" + self.id + \"' is not an instance of Type (\" + self.type.name + \")\");\n return defaultValue;\n }\n\n /**\n * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the\n * default value, which may be the result of an injectable function.\n */\n function $value(value) {\n function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; }\n function $replace(value) {\n var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; });\n return replacement.length ? replacement[0] : value;\n }\n value = $replace(value);\n return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value);\n }\n\n function toString() { return \"{Param:\" + id + \" \" + type + \" squash: '\" + squash + \"' optional: \" + isOptional + \"}\"; }\n\n extend(this, {\n id: id,\n type: type,\n location: location,\n array: arrayMode,\n squash: squash,\n replace: replace,\n isOptional: isOptional,\n value: $value,\n dynamic: undefined,\n config: config,\n toString: toString\n });\n };\n\n function ParamSet(params) {\n extend(this, params || {});\n }\n\n ParamSet.prototype = {\n $$new: function() {\n return inherit(this, extend(new ParamSet(), { $$parent: this}));\n },\n $$keys: function () {\n var keys = [], chain = [], parent = this,\n ignore = objectKeys(ParamSet.prototype);\n while (parent) { chain.push(parent); parent = parent.$$parent; }\n chain.reverse();\n forEach(chain, function(paramset) {\n forEach(objectKeys(paramset), function(key) {\n if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key);\n });\n });\n return keys;\n },\n $$values: function(paramValues) {\n var values = {}, self = this;\n forEach(self.$$keys(), function(key) {\n values[key] = self[key].value(paramValues && paramValues[key]);\n });\n return values;\n },\n $$equals: function(paramValues1, paramValues2) {\n var equal = true, self = this;\n forEach(self.$$keys(), function(key) {\n var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key];\n if (!self[key].type.equals(left, right)) equal = false;\n });\n return equal;\n },\n $$validates: function $$validate(paramValues) {\n var keys = this.$$keys(), i, param, rawVal, normalized, encoded;\n for (i = 0; i < keys.length; i++) {\n param = this[keys[i]];\n rawVal = paramValues[keys[i]];\n if ((rawVal === undefined || rawVal === null) && param.isOptional)\n break; // There was no parameter value, but the param is optional\n normalized = param.type.$normalize(rawVal);\n if (!param.type.is(normalized))\n return false; // The value was not of the correct Type, and could not be decoded to the correct Type\n encoded = param.type.encode(normalized);\n if (angular.isString(encoded) && !param.type.pattern.exec(encoded))\n return false; // The value was of the correct type, but when encoded, did not match the Type's regexp\n }\n return true;\n },\n $$parent: undefined\n };\n\n this.ParamSet = ParamSet;\n}\n\n// Register as a provider so it's available to other providers\nangular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);\nangular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]);\n\n/**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider\n *\n * @requires ui.router.util.$urlMatcherFactoryProvider\n * @requires $locationProvider\n *\n * @description\n * `$urlRouterProvider` has the responsibility of watching `$location`. \n * When `$location` changes it runs through a list of rules one by one until a \n * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify \n * a url in a state configuration. All urls are compiled into a UrlMatcher object.\n *\n * There are several methods on `$urlRouterProvider` that make it useful to use directly\n * in your module config.\n */\n$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];\nfunction $UrlRouterProvider( $locationProvider, $urlMatcherFactory) {\n var rules = [], otherwise = null, interceptDeferred = false, listener;\n\n // Returns a string that is a prefix of all strings matching the RegExp\n function regExpPrefix(re) {\n var prefix = /^\\^((?:\\\\[^a-zA-Z0-9]|[^\\\\\\[\\]\\^$*+?.()|{}]+)*)/.exec(re.source);\n return (prefix != null) ? prefix[1].replace(/\\\\(.)/g, \"$1\") : '';\n }\n\n // Interpolates matched values into a String.replace()-style pattern\n function interpolate(pattern, match) {\n return pattern.replace(/\\$(\\$|\\d{1,2})/, function (m, what) {\n return match[what === '$' ? 0 : Number(what)];\n });\n }\n\n /**\n * @ngdoc function\n * @name ui.router.router.$urlRouterProvider#rule\n * @methodOf ui.router.router.$urlRouterProvider\n *\n * @description\n * Defines rules that are used by `$urlRouterProvider` to find matches for\n * specific URLs.\n *\n * @example\n *
\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // Here's an example of how you might allow case insensitive urls\n   *   $urlRouterProvider.rule(function ($injector, $location) {\n   *     var path = $location.path(),\n   *         normalized = path.toLowerCase();\n   *\n   *     if (path !== normalized) {\n   *       return normalized;\n   *     }\n   *   });\n   * });\n   * 
\n *\n * @param {function} rule Handler function that takes `$injector` and `$location`\n * services as arguments. You can use them to return a valid path as a string.\n *\n * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n */\n this.rule = function (rule) {\n if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n rules.push(rule);\n return this;\n };\n\n /**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider#otherwise\n * @methodOf ui.router.router.$urlRouterProvider\n *\n * @description\n * Defines a path that is used when an invalid route is requested.\n *\n * @example\n *
\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // if the path doesn't match any of the urls you configured\n   *   // otherwise will take care of routing the user to the\n   *   // specified url\n   *   $urlRouterProvider.otherwise('/index');\n   *\n   *   // Example of using function rule as param\n   *   $urlRouterProvider.otherwise(function ($injector, $location) {\n   *     return '/a/valid/url';\n   *   });\n   * });\n   * 
\n *\n * @param {string|function} rule The url path you want to redirect to or a function \n * rule that returns the url path. The function version is passed two params: \n * `$injector` and `$location` services, and must return a url string.\n *\n * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n */\n this.otherwise = function (rule) {\n if (isString(rule)) {\n var redirect = rule;\n rule = function () { return redirect; };\n }\n else if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n otherwise = rule;\n return this;\n };\n\n\n function handleIfMatch($injector, handler, match) {\n if (!match) return false;\n var result = $injector.invoke(handler, handler, { $match: match });\n return isDefined(result) ? result : true;\n }\n\n /**\n * @ngdoc function\n * @name ui.router.router.$urlRouterProvider#when\n * @methodOf ui.router.router.$urlRouterProvider\n *\n * @description\n * Registers a handler for a given url matching. \n * \n * If the handler is a string, it is\n * treated as a redirect, and is interpolated according to the syntax of match\n * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).\n *\n * If the handler is a function, it is injectable. It gets invoked if `$location`\n * matches. You have the option of inject the match object as `$match`.\n *\n * The handler can return\n *\n * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`\n * will continue trying to find another one that matches.\n * - **string** which is treated as a redirect and passed to `$location.url()`\n * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.\n *\n * @example\n *
\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {\n   *     if ($state.$current.navigable !== state ||\n   *         !equalForKeys($match, $stateParams) {\n   *      $state.transitionTo(state, $match, false);\n   *     }\n   *   });\n   * });\n   * 
\n *\n * @param {string|object} what The incoming path that you want to redirect.\n * @param {string|function} handler The path you want to redirect your user to.\n */\n this.when = function (what, handler) {\n var redirect, handlerIsString = isString(handler);\n if (isString(what)) what = $urlMatcherFactory.compile(what);\n\n if (!handlerIsString && !isFunction(handler) && !isArray(handler))\n throw new Error(\"invalid 'handler' in when()\");\n\n var strategies = {\n matcher: function (what, handler) {\n if (handlerIsString) {\n redirect = $urlMatcherFactory.compile(handler);\n handler = ['$match', function ($match) { return redirect.format($match); }];\n }\n return extend(function ($injector, $location) {\n return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));\n }, {\n prefix: isString(what.prefix) ? what.prefix : ''\n });\n },\n regex: function (what, handler) {\n if (what.global || what.sticky) throw new Error(\"when() RegExp must not be global or sticky\");\n\n if (handlerIsString) {\n redirect = handler;\n handler = ['$match', function ($match) { return interpolate(redirect, $match); }];\n }\n return extend(function ($injector, $location) {\n return handleIfMatch($injector, handler, what.exec($location.path()));\n }, {\n prefix: regExpPrefix(what)\n });\n }\n };\n\n var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };\n\n for (var n in check) {\n if (check[n]) return this.rule(strategies[n](what, handler));\n }\n\n throw new Error(\"invalid 'what' in when()\");\n };\n\n /**\n * @ngdoc function\n * @name ui.router.router.$urlRouterProvider#deferIntercept\n * @methodOf ui.router.router.$urlRouterProvider\n *\n * @description\n * Disables (or enables) deferring location change interception.\n *\n * If you wish to customize the behavior of syncing the URL (for example, if you wish to\n * defer a transition but maintain the current URL), call this method at configuration time.\n * Then, at run time, call `$urlRouter.listen()` after you have configured your own\n * `$locationChangeSuccess` event handler.\n *\n * @example\n *
\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *\n   *   // Prevent $urlRouter from automatically intercepting URL changes;\n   *   // this allows you to configure custom behavior in between\n   *   // location changes and route synchronization:\n   *   $urlRouterProvider.deferIntercept();\n   *\n   * }).run(function ($rootScope, $urlRouter, UserService) {\n   *\n   *   $rootScope.$on('$locationChangeSuccess', function(e) {\n   *     // UserService is an example service for managing user state\n   *     if (UserService.isLoggedIn()) return;\n   *\n   *     // Prevent $urlRouter's default handler from firing\n   *     e.preventDefault();\n   *\n   *     UserService.handleLogin().then(function() {\n   *       // Once the user has logged in, sync the current URL\n   *       // to the router:\n   *       $urlRouter.sync();\n   *     });\n   *   });\n   *\n   *   // Configures $urlRouter's listener *after* your custom listener\n   *   $urlRouter.listen();\n   * });\n   * 
\n *\n * @param {boolean} defer Indicates whether to defer location change interception. Passing\n no parameter is equivalent to `true`.\n */\n this.deferIntercept = function (defer) {\n if (defer === undefined) defer = true;\n interceptDeferred = defer;\n };\n\n /**\n * @ngdoc object\n * @name ui.router.router.$urlRouter\n *\n * @requires $location\n * @requires $rootScope\n * @requires $injector\n * @requires $browser\n *\n * @description\n *\n */\n this.$get = $get;\n $get.$inject = ['$location', '$rootScope', '$injector', '$browser', '$sniffer'];\n function $get( $location, $rootScope, $injector, $browser, $sniffer) {\n\n var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;\n\n function appendBasePath(url, isHtml5, absolute) {\n if (baseHref === '/') return url;\n if (isHtml5) return baseHref.slice(0, -1) + url;\n if (absolute) return baseHref.slice(1) + url;\n return url;\n }\n\n // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree\n function update(evt) {\n if (evt && evt.defaultPrevented) return;\n var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl;\n lastPushedUrl = undefined;\n // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573\n //if (ignoreUpdate) return true;\n\n function check(rule) {\n var handled = rule($injector, $location);\n\n if (!handled) return false;\n if (isString(handled)) $location.replace().url(handled);\n return true;\n }\n var n = rules.length, i;\n\n for (i = 0; i < n; i++) {\n if (check(rules[i])) return;\n }\n // always check otherwise last to allow dynamic updates to the set of rules\n if (otherwise) check(otherwise);\n }\n\n function listen() {\n listener = listener || $rootScope.$on('$locationChangeSuccess', update);\n return listener;\n }\n\n if (!interceptDeferred) listen();\n\n return {\n /**\n * @ngdoc function\n * @name ui.router.router.$urlRouter#sync\n * @methodOf ui.router.router.$urlRouter\n *\n * @description\n * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.\n * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,\n * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed\n * with the transition by calling `$urlRouter.sync()`.\n *\n * @example\n *
\n       * angular.module('app', ['ui.router'])\n       *   .run(function($rootScope, $urlRouter) {\n       *     $rootScope.$on('$locationChangeSuccess', function(evt) {\n       *       // Halt state change from even starting\n       *       evt.preventDefault();\n       *       // Perform custom logic\n       *       var meetsRequirement = ...\n       *       // Continue with the update and state transition if logic allows\n       *       if (meetsRequirement) $urlRouter.sync();\n       *     });\n       * });\n       * 
\n */\n sync: function() {\n update();\n },\n\n listen: function() {\n return listen();\n },\n\n update: function(read) {\n if (read) {\n location = $location.url();\n return;\n }\n if ($location.url() === location) return;\n\n $location.url(location);\n $location.replace();\n },\n\n push: function(urlMatcher, params, options) {\n var url = urlMatcher.format(params || {});\n\n // Handle the special hash param, if needed\n if (url !== null && params && params['#']) {\n url += '#' + params['#'];\n }\n\n $location.url(url);\n lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined;\n if (options && options.replace) $location.replace();\n },\n\n /**\n * @ngdoc function\n * @name ui.router.router.$urlRouter#href\n * @methodOf ui.router.router.$urlRouter\n *\n * @description\n * A URL generation method that returns the compiled URL for a given\n * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters.\n *\n * @example\n *
\n       * $bob = $urlRouter.href(new UrlMatcher(\"/about/:person\"), {\n       *   person: \"bob\"\n       * });\n       * // $bob == \"/about/bob\";\n       * 
\n *\n * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate.\n * @param {object=} params An object of parameter values to fill the matcher's required parameters.\n * @param {object=} options Options object. The options are:\n *\n * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n *\n * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`\n */\n href: function(urlMatcher, params, options) {\n if (!urlMatcher.validates(params)) return null;\n\n var isHtml5 = $locationProvider.html5Mode();\n if (angular.isObject(isHtml5)) {\n isHtml5 = isHtml5.enabled;\n }\n\n isHtml5 = isHtml5 && $sniffer.history;\n \n var url = urlMatcher.format(params);\n options = options || {};\n\n if (!isHtml5 && url !== null) {\n url = \"#\" + $locationProvider.hashPrefix() + url;\n }\n\n // Handle special hash param, if needed\n if (url !== null && params && params['#']) {\n url += '#' + params['#'];\n }\n\n url = appendBasePath(url, isHtml5, options.absolute);\n\n if (!options.absolute || !url) {\n return url;\n }\n\n var slash = (!isHtml5 && url ? '/' : ''), port = $location.port();\n port = (port === 80 || port === 443 ? '' : ':' + port);\n\n return [$location.protocol(), '://', $location.host(), port, slash, url].join('');\n }\n };\n }\n}\n\nangular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$stateProvider\n *\n * @requires ui.router.router.$urlRouterProvider\n * @requires ui.router.util.$urlMatcherFactoryProvider\n *\n * @description\n * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely\n * on state.\n *\n * A state corresponds to a \"place\" in the application in terms of the overall UI and\n * navigation. A state describes (via the controller / template / view properties) what\n * the UI looks like and does at that place.\n *\n * States often have things in common, and the primary way of factoring out these\n * commonalities in this model is via the state hierarchy, i.e. parent/child states aka\n * nested states.\n *\n * The `$stateProvider` provides interfaces to declare these states for your app.\n */\n$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider'];\nfunction $StateProvider( $urlRouterProvider, $urlMatcherFactory) {\n\n var root, states = {}, $state, queue = {}, abstractKey = 'abstract';\n\n // Builds state properties from definition passed to registerState()\n var stateBuilder = {\n\n // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.\n // state.children = [];\n // if (parent) parent.children.push(state);\n parent: function(state) {\n if (isDefined(state.parent) && state.parent) return findState(state.parent);\n // regex matches any valid composite state name\n // would match \"contact.list\" but not \"contacts\"\n var compositeName = /^(.+)\\.[^.]+$/.exec(state.name);\n return compositeName ? findState(compositeName[1]) : root;\n },\n\n // inherit 'data' from parent and override by own values (if any)\n data: function(state) {\n if (state.parent && state.parent.data) {\n state.data = state.self.data = inherit(state.parent.data, state.data);\n }\n return state.data;\n },\n\n // Build a URLMatcher if necessary, either via a relative or absolute URL\n url: function(state) {\n var url = state.url, config = { params: state.params || {} };\n\n if (isString(url)) {\n if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config);\n return (state.parent.navigable || root).url.concat(url, config);\n }\n\n if (!url || $urlMatcherFactory.isMatcher(url)) return url;\n throw new Error(\"Invalid url '\" + url + \"' in state '\" + state + \"'\");\n },\n\n // Keep track of the closest ancestor state that has a URL (i.e. is navigable)\n navigable: function(state) {\n return state.url ? state : (state.parent ? state.parent.navigable : null);\n },\n\n // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params\n ownParams: function(state) {\n var params = state.url && state.url.params || new $$UMFP.ParamSet();\n forEach(state.params || {}, function(config, id) {\n if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, \"config\");\n });\n return params;\n },\n\n // Derive parameters for this state and ensure they're a super-set of parent's parameters\n params: function(state) {\n var ownParams = pick(state.ownParams, state.ownParams.$$keys());\n return state.parent && state.parent.params ? extend(state.parent.params.$$new(), ownParams) : new $$UMFP.ParamSet();\n },\n\n // If there is no explicit multi-view configuration, make one up so we don't have\n // to handle both cases in the view directive later. Note that having an explicit\n // 'views' property will mean the default unnamed view properties are ignored. This\n // is also a good time to resolve view names to absolute names, so everything is a\n // straight lookup at link time.\n views: function(state) {\n var views = {};\n\n forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n view.resolveAs = view.resolveAs || state.resolveAs || '$resolve';\n views[name] = view;\n });\n return views;\n },\n\n // Keep a full path from the root down to this state as this is needed for state activation.\n path: function(state) {\n return state.parent ? state.parent.path.concat(state) : []; // exclude root from path\n },\n\n // Speed up $state.contains() as it's used a lot\n includes: function(state) {\n var includes = state.parent ? extend({}, state.parent.includes) : {};\n includes[state.name] = true;\n return includes;\n },\n\n $delegates: {}\n };\n\n function isRelative(stateName) {\n return stateName.indexOf(\".\") === 0 || stateName.indexOf(\"^\") === 0;\n }\n\n function findState(stateOrName, base) {\n if (!stateOrName) return undefined;\n\n var isStr = isString(stateOrName),\n name = isStr ? stateOrName : stateOrName.name,\n path = isRelative(name);\n\n if (path) {\n if (!base) throw new Error(\"No reference point given for path '\" + name + \"'\");\n base = findState(base);\n \n var rel = name.split(\".\"), i = 0, pathLength = rel.length, current = base;\n\n for (; i < pathLength; i++) {\n if (rel[i] === \"\" && i === 0) {\n current = base;\n continue;\n }\n if (rel[i] === \"^\") {\n if (!current.parent) throw new Error(\"Path '\" + name + \"' not valid for state '\" + base.name + \"'\");\n current = current.parent;\n continue;\n }\n break;\n }\n rel = rel.slice(i).join(\".\");\n name = current.name + (current.name && rel ? \".\" : \"\") + rel;\n }\n var state = states[name];\n\n if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n return state;\n }\n return undefined;\n }\n\n function queueState(parentName, state) {\n if (!queue[parentName]) {\n queue[parentName] = [];\n }\n queue[parentName].push(state);\n }\n\n function flushQueuedChildren(parentName) {\n var queued = queue[parentName] || [];\n while(queued.length) {\n registerState(queued.shift());\n }\n }\n\n function registerState(state) {\n // Wrap a new object around the state so we can store our private details easily.\n state = inherit(state, {\n self: state,\n resolve: state.resolve || {},\n toString: function() { return this.name; }\n });\n\n var name = state.name;\n if (!isString(name) || name.indexOf('@') >= 0) throw new Error(\"State must have a valid name\");\n if (states.hasOwnProperty(name)) throw new Error(\"State '\" + name + \"' is already defined\");\n\n // Get parent name\n var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))\n : (isString(state.parent)) ? state.parent\n : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name\n : '';\n\n // If parent is not registered yet, add state to queue and register later\n if (parentName && !states[parentName]) {\n return queueState(parentName, state.self);\n }\n\n for (var key in stateBuilder) {\n if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);\n }\n states[name] = state;\n\n // Register the state in the global state list and with $urlRouter if necessary.\n if (!state[abstractKey] && state.url) {\n $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {\n if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {\n $state.transitionTo(state, $match, { inherit: true, location: false });\n }\n }]);\n }\n\n // Register any queued children\n flushQueuedChildren(name);\n\n return state;\n }\n\n // Checks text to see if it looks like a glob.\n function isGlob (text) {\n return text.indexOf('*') > -1;\n }\n\n // Returns true if glob matches current $state name.\n function doesStateMatchGlob (glob) {\n var globSegments = glob.split('.'),\n segments = $state.$current.name.split('.');\n\n //match single stars\n for (var i = 0, l = globSegments.length; i < l; i++) {\n if (globSegments[i] === '*') {\n segments[i] = '*';\n }\n }\n\n //match greedy starts\n if (globSegments[0] === '**') {\n segments = segments.slice(indexOf(segments, globSegments[1]));\n segments.unshift('**');\n }\n //match greedy ends\n if (globSegments[globSegments.length - 1] === '**') {\n segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);\n segments.push('**');\n }\n\n if (globSegments.length != segments.length) {\n return false;\n }\n\n return segments.join('') === globSegments.join('');\n }\n\n\n // Implicit root state that is always active\n root = registerState({\n name: '',\n url: '^',\n views: null,\n 'abstract': true\n });\n root.navigable = null;\n\n\n /**\n * @ngdoc function\n * @name ui.router.state.$stateProvider#decorator\n * @methodOf ui.router.state.$stateProvider\n *\n * @description\n * Allows you to extend (carefully) or override (at your own peril) the \n * `stateBuilder` object used internally by `$stateProvider`. This can be used \n * to add custom functionality to ui-router, for example inferring templateUrl \n * based on the state name.\n *\n * When passing only a name, it returns the current (original or decorated) builder\n * function that matches `name`.\n *\n * The builder functions that can be decorated are listed below. Though not all\n * necessarily have a good use case for decoration, that is up to you to decide.\n *\n * In addition, users can attach custom decorators, which will generate new \n * properties within the state's internal definition. There is currently no clear \n * use-case for this beyond accessing internal states (i.e. $state.$current), \n * however, expect this to become increasingly relevant as we introduce additional \n * meta-programming features.\n *\n * **Warning**: Decorators should not be interdependent because the order of \n * execution of the builder functions in non-deterministic. Builder functions \n * should only be dependent on the state definition object and super function.\n *\n *\n * Existing builder functions and current return values:\n *\n * - **parent** `{object}` - returns the parent state object.\n * - **data** `{object}` - returns state data, including any inherited data that is not\n * overridden by own values (if any).\n * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher}\n * or `null`.\n * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is \n * navigable).\n * - **params** `{object}` - returns an array of state params that are ensured to \n * be a super-set of parent's params.\n * - **views** `{object}` - returns a views object where each key is an absolute view \n * name (i.e. \"viewName@stateName\") and each value is the config object \n * (template, controller) for the view. Even when you don't use the views object \n * explicitly on a state config, one is still created for you internally.\n * So by decorating this builder function you have access to decorating template \n * and controller properties.\n * - **ownParams** `{object}` - returns an array of params that belong to the state, \n * not including any params defined by ancestor states.\n * - **path** `{string}` - returns the full path from the root down to this state. \n * Needed for state activation.\n * - **includes** `{object}` - returns an object that includes every state that \n * would pass a `$state.includes()` test.\n *\n * @example\n *
\n   * // Override the internal 'views' builder with a function that takes the state\n   * // definition, and a reference to the internal function being overridden:\n   * $stateProvider.decorator('views', function (state, parent) {\n   *   var result = {},\n   *       views = parent(state);\n   *\n   *   angular.forEach(views, function (config, name) {\n   *     var autoName = (state.name + '.' + name).replace('.', '/');\n   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';\n   *     result[name] = config;\n   *   });\n   *   return result;\n   * });\n   *\n   * $stateProvider.state('home', {\n   *   views: {\n   *     'contact.list': { controller: 'ListController' },\n   *     'contact.item': { controller: 'ItemController' }\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * $state.go('home');\n   * // Auto-populates list and item views with /partials/home/contact/list.html,\n   * // and /partials/home/contact/item.html, respectively.\n   * 
\n *\n * @param {string} name The name of the builder function to decorate. \n * @param {object} func A function that is responsible for decorating the original \n * builder function. The function receives two parameters:\n *\n * - `{object}` - state - The state config object.\n * - `{object}` - super - The original builder function.\n *\n * @return {object} $stateProvider - $stateProvider instance\n */\n this.decorator = decorator;\n function decorator(name, func) {\n /*jshint validthis: true */\n if (isString(name) && !isDefined(func)) {\n return stateBuilder[name];\n }\n if (!isFunction(func) || !isString(name)) {\n return this;\n }\n if (stateBuilder[name] && !stateBuilder.$delegates[name]) {\n stateBuilder.$delegates[name] = stateBuilder[name];\n }\n stateBuilder[name] = func;\n return this;\n }\n\n /**\n * @ngdoc function\n * @name ui.router.state.$stateProvider#state\n * @methodOf ui.router.state.$stateProvider\n *\n * @description\n * Registers a state configuration under a given state name. The stateConfig object\n * has the following acceptable properties.\n *\n * @param {string} name A unique state name, e.g. \"home\", \"about\", \"contacts\".\n * To create a parent/child state use a dot, e.g. \"about.sales\", \"home.newest\".\n * @param {object} stateConfig State configuration object.\n * @param {string|function=} stateConfig.template\n * \n * html template as a string or a function that returns\n * an html template as a string which should be used by the uiView directives. This property \n * takes precedence over templateUrl.\n * \n * If `template` is a function, it will be called with the following parameters:\n *\n * - {array.<object>} - state parameters extracted from the current $location.path() by\n * applying the current state\n *\n *
template:\n   *   \"

inline template definition

\" +\n * \"
\"
\n *
template: function(params) {\n   *       return \"

generated template

\"; }
\n * \n *\n * @param {string|function=} stateConfig.templateUrl\n * \n *\n * path or function that returns a path to an html\n * template that should be used by uiView.\n * \n * If `templateUrl` is a function, it will be called with the following parameters:\n *\n * - {array.<object>} - state parameters extracted from the current $location.path() by \n * applying the current state\n *\n *
templateUrl: \"home.html\"
\n *
templateUrl: function(params) {\n   *     return myTemplates[params.pageId]; }
\n *\n * @param {function=} stateConfig.templateProvider\n * \n * Provider function that returns HTML content string.\n *
 templateProvider:\n   *       function(MyTemplateService, params) {\n   *         return MyTemplateService.getTemplate(params.pageId);\n   *       }
\n *\n * @param {string|function=} stateConfig.controller\n * \n *\n * Controller fn that should be associated with newly\n * related scope or the name of a registered controller if passed as a string.\n * Optionally, the ControllerAs may be declared here.\n *
controller: \"MyRegisteredController\"
\n *
controller:\n   *     \"MyRegisteredController as fooCtrl\"}
\n *
controller: function($scope, MyService) {\n   *     $scope.data = MyService.getData(); }
\n *\n * @param {function=} stateConfig.controllerProvider\n * \n *\n * Injectable provider function that returns the actual controller or string.\n *
controllerProvider:\n   *   function(MyResolveData) {\n   *     if (MyResolveData.foo)\n   *       return \"FooCtrl\"\n   *     else if (MyResolveData.bar)\n   *       return \"BarCtrl\";\n   *     else return function($scope) {\n   *       $scope.baz = \"Qux\";\n   *     }\n   *   }
\n *\n * @param {string=} stateConfig.controllerAs\n * \n * \n * A controller alias name. If present the controller will be\n * published to scope under the controllerAs name.\n *
controllerAs: \"myCtrl\"
\n *\n * @param {string|object=} stateConfig.parent\n * \n * Optionally specifies the parent state of this state.\n *\n *
parent: 'parentState'
\n *
parent: parentState // JS variable
\n *\n * @param {object=} stateConfig.resolve\n * \n *\n * An optional map<string, function> of dependencies which\n * should be injected into the controller. If any of these dependencies are promises, \n * the router will wait for them all to be resolved before the controller is instantiated.\n * If all the promises are resolved successfully, the $stateChangeSuccess event is fired\n * and the values of the resolved promises are injected into any controllers that reference them.\n * If any of the promises are rejected the $stateChangeError event is fired.\n *\n * The map object is:\n * \n * - key - {string}: name of dependency to be injected into controller\n * - factory - {string|function}: If string then it is alias for service. Otherwise if function, \n * it is injected and return value it treated as dependency. If result is a promise, it is \n * resolved before its value is injected into controller.\n *\n *
resolve: {\n   *     myResolve1:\n   *       function($http, $stateParams) {\n   *         return $http.get(\"/api/foos/\"+stateParams.fooID);\n   *       }\n   *     }
\n *\n * @param {string=} stateConfig.url\n * \n *\n * A url fragment with optional parameters. When a state is navigated or\n * transitioned to, the `$stateParams` service will be populated with any \n * parameters that were passed.\n *\n * (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for\n * more details on acceptable patterns )\n *\n * examples:\n *
url: \"/home\"\n   * url: \"/users/:userid\"\n   * url: \"/books/{bookid:[a-zA-Z_-]}\"\n   * url: \"/books/{categoryid:int}\"\n   * url: \"/books/{publishername:string}/{categoryid:int}\"\n   * url: \"/messages?before&after\"\n   * url: \"/messages?{before:date}&{after:date}\"\n   * url: \"/messages/:mailboxid?{before:date}&{after:date}\"\n   * 
\n *\n * @param {object=} stateConfig.views\n * \n * an optional map<string, object> which defined multiple views, or targets views\n * manually/explicitly.\n *\n * Examples:\n *\n * Targets three named `ui-view`s in the parent state's template\n *
views: {\n   *     header: {\n   *       controller: \"headerCtrl\",\n   *       templateUrl: \"header.html\"\n   *     }, body: {\n   *       controller: \"bodyCtrl\",\n   *       templateUrl: \"body.html\"\n   *     }, footer: {\n   *       controller: \"footCtrl\",\n   *       templateUrl: \"footer.html\"\n   *     }\n   *   }
\n *\n * Targets named `ui-view=\"header\"` from grandparent state 'top''s template, and named `ui-view=\"body\" from parent state's template.\n *
views: {\n   *     'header@top': {\n   *       controller: \"msgHeaderCtrl\",\n   *       templateUrl: \"msgHeader.html\"\n   *     }, 'body': {\n   *       controller: \"messagesCtrl\",\n   *       templateUrl: \"messages.html\"\n   *     }\n   *   }
\n *\n * @param {boolean=} [stateConfig.abstract=false]\n * \n * An abstract state will never be directly activated,\n * but can provide inherited properties to its common children states.\n *
abstract: true
\n *\n * @param {function=} stateConfig.onEnter\n * \n *\n * Callback function for when a state is entered. Good way\n * to trigger an action or dispatch an event, such as opening a dialog.\n * If minifying your scripts, make sure to explicitly annotate this function,\n * because it won't be automatically annotated by your build tools.\n *\n *
onEnter: function(MyService, $stateParams) {\n   *     MyService.foo($stateParams.myParam);\n   * }
\n *\n * @param {function=} stateConfig.onExit\n * \n *\n * Callback function for when a state is exited. Good way to\n * trigger an action or dispatch an event, such as opening a dialog.\n * If minifying your scripts, make sure to explicitly annotate this function,\n * because it won't be automatically annotated by your build tools.\n *\n *
onExit: function(MyService, $stateParams) {\n   *     MyService.cleanup($stateParams.myParam);\n   * }
\n *\n * @param {boolean=} [stateConfig.reloadOnSearch=true]\n * \n *\n * If `false`, will not retrigger the same state\n * just because a search/query parameter has changed (via $location.search() or $location.hash()). \n * Useful for when you'd like to modify $location.search() without triggering a reload.\n *
reloadOnSearch: false
\n *\n * @param {object=} stateConfig.data\n * \n *\n * Arbitrary data object, useful for custom configuration. The parent state's `data` is\n * prototypally inherited. In other words, adding a data property to a state adds it to\n * the entire subtree via prototypal inheritance.\n *\n *
data: {\n   *     requiredRole: 'foo'\n   * } 
\n *\n * @param {object=} stateConfig.params\n * \n *\n * A map which optionally configures parameters declared in the `url`, or\n * defines additional non-url parameters. For each parameter being\n * configured, add a configuration object keyed to the name of the parameter.\n *\n * Each parameter configuration object may contain the following properties:\n *\n * - ** value ** - {object|function=}: specifies the default value for this\n * parameter. This implicitly sets this parameter as optional.\n *\n * When UI-Router routes to a state and no value is\n * specified for this parameter in the URL or transition, the\n * default value will be used instead. If `value` is a function,\n * it will be injected and invoked, and the return value used.\n *\n * *Note*: `undefined` is treated as \"no default value\" while `null`\n * is treated as \"the default value is `null`\".\n *\n * *Shorthand*: If you only need to configure the default value of the\n * parameter, you may use a shorthand syntax. In the **`params`**\n * map, instead mapping the param name to a full parameter configuration\n * object, simply set map it to the default parameter value, e.g.:\n *\n *
// define a parameter's default value\n   * params: {\n   *     param1: { value: \"defaultValue\" }\n   * }\n   * // shorthand default values\n   * params: {\n   *     param1: \"defaultValue\",\n   *     param2: \"param2Default\"\n   * }
\n *\n * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be\n * treated as an array of values. If you specified a Type, the value will be\n * treated as an array of the specified Type. Note: query parameter values\n * default to a special `\"auto\"` mode.\n *\n * For query parameters in `\"auto\"` mode, if multiple values for a single parameter\n * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values\n * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if\n * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single\n * value (e.g.: `{ foo: '1' }`).\n *\n *
params: {\n   *     param1: { array: true }\n   * }
\n *\n * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when\n * the current parameter value is the same as the default value. If `squash` is not set, it uses the\n * configured default squash policy.\n * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`})\n *\n * There are three squash settings:\n *\n * - false: The parameter's default value is not squashed. It is encoded and included in the URL\n * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed\n * by slashes in the state's `url` declaration, then one of those slashes are omitted.\n * This can allow for cleaner looking URLs.\n * - `\"\"`: The parameter's default value is replaced with an arbitrary placeholder of your choice.\n *\n *
params: {\n   *     param1: {\n   *       value: \"defaultId\",\n   *       squash: true\n   * } }\n   * // squash \"defaultValue\" to \"~\"\n   * params: {\n   *     param1: {\n   *       value: \"defaultValue\",\n   *       squash: \"~\"\n   * } }\n   * 
\n *\n *\n * @example\n *
\n   * // Some state name examples\n   *\n   * // stateName can be a single top-level name (must be unique).\n   * $stateProvider.state(\"home\", {});\n   *\n   * // Or it can be a nested state name. This state is a child of the\n   * // above \"home\" state.\n   * $stateProvider.state(\"home.newest\", {});\n   *\n   * // Nest states as deeply as needed.\n   * $stateProvider.state(\"home.newest.abc.xyz.inception\", {});\n   *\n   * // state() returns $stateProvider, so you can chain state declarations.\n   * $stateProvider\n   *   .state(\"home\", {})\n   *   .state(\"about\", {})\n   *   .state(\"contacts\", {});\n   * 
\n *\n */\n this.state = state;\n function state(name, definition) {\n /*jshint validthis: true */\n if (isObject(name)) definition = name;\n else definition.name = name;\n registerState(definition);\n return this;\n }\n\n /**\n * @ngdoc object\n * @name ui.router.state.$state\n *\n * @requires $rootScope\n * @requires $q\n * @requires ui.router.state.$view\n * @requires $injector\n * @requires ui.router.util.$resolve\n * @requires ui.router.state.$stateParams\n * @requires ui.router.router.$urlRouter\n *\n * @property {object} params A param object, e.g. {sectionId: section.id)}, that \n * you'd like to test against the current active state.\n * @property {object} current A reference to the state's config object. However \n * you passed it in. Useful for accessing custom data.\n * @property {object} transition Currently pending transition. A promise that'll \n * resolve or reject.\n *\n * @description\n * `$state` service is responsible for representing states as well as transitioning\n * between them. It also provides interfaces to ask for current state or even states\n * you're coming from.\n */\n this.$get = $get;\n $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory'];\n function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) {\n\n var TransitionSuperseded = $q.reject(new Error('transition superseded'));\n var TransitionPrevented = $q.reject(new Error('transition prevented'));\n var TransitionAborted = $q.reject(new Error('transition aborted'));\n var TransitionFailed = $q.reject(new Error('transition failed'));\n\n // Handles the case where a state which is the target of a transition is not found, and the user\n // can optionally retry or defer the transition\n function handleRedirect(redirect, state, params, options) {\n /**\n * @ngdoc event\n * @name ui.router.state.$state#$stateNotFound\n * @eventOf ui.router.state.$state\n * @eventType broadcast on root scope\n * @description\n * Fired when a requested state **cannot be found** using the provided state name during transition.\n * The event is broadcast allowing any handlers a single chance to deal with the error (usually by\n * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,\n * you can see its three properties in the example. You can use `event.preventDefault()` to abort the\n * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.\n *\n * @param {Object} event Event object.\n * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.\n * @param {State} fromState Current state object.\n * @param {Object} fromParams Current state params.\n *\n * @example\n *\n *
\n       * // somewhere, assume lazy.state has not been defined\n       * $state.go(\"lazy.state\", {a:1, b:2}, {inherit:false});\n       *\n       * // somewhere else\n       * $scope.$on('$stateNotFound',\n       * function(event, unfoundState, fromState, fromParams){\n       *     console.log(unfoundState.to); // \"lazy.state\"\n       *     console.log(unfoundState.toParams); // {a:1, b:2}\n       *     console.log(unfoundState.options); // {inherit:false} + default options\n       * })\n       * 
\n */\n var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params);\n\n if (evt.defaultPrevented) {\n $urlRouter.update();\n return TransitionAborted;\n }\n\n if (!evt.retry) {\n return null;\n }\n\n // Allow the handler to return a promise to defer state lookup retry\n if (options.$retry) {\n $urlRouter.update();\n return TransitionFailed;\n }\n var retryTransition = $state.transition = $q.when(evt.retry);\n\n retryTransition.then(function() {\n if (retryTransition !== $state.transition) return TransitionSuperseded;\n redirect.options.$retry = true;\n return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);\n }, function() {\n return TransitionAborted;\n });\n $urlRouter.update();\n\n return retryTransition;\n }\n\n root.locals = { resolve: null, globals: { $stateParams: {} } };\n\n $state = {\n params: {},\n current: root.self,\n $current: root,\n transition: null\n };\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#reload\n * @methodOf ui.router.state.$state\n *\n * @description\n * A method that force reloads the current state. All resolves are re-resolved,\n * controllers reinstantiated, and events re-fired.\n *\n * @example\n *
\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     $state.reload();\n     *   }\n     * });\n     * 
\n *\n * `reload()` is just an alias for:\n *
\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: true\n     * });\n     * 
\n *\n * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved.\n * @example\n *
\n     * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' \n     * //and current state is 'contacts.detail.item'\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     //will reload 'contact.detail' and 'contact.detail.item' states\n     *     $state.reload('contact.detail');\n     *   }\n     * });\n     * 
\n *\n * `reload()` is just an alias for:\n *
\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: true\n     * });\n     * 
\n\n * @returns {promise} A promise representing the state of the new transition. See\n * {@link ui.router.state.$state#methods_go $state.go}.\n */\n $state.reload = function reload(state) {\n return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true});\n };\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#go\n * @methodOf ui.router.state.$state\n *\n * @description\n * Convenience method for transitioning to a new state. `$state.go` calls \n * `$state.transitionTo` internally but automatically sets options to \n * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. \n * This allows you to easily use an absolute or relative to path and specify \n * only the parameters you'd like to update (while letting unspecified parameters \n * inherit from the currently active ancestor states).\n *\n * @example\n *
\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.go('contact.detail');\n     *   };\n     * });\n     * 
\n * \n *\n * @param {string} to Absolute state name or relative state path. Some examples:\n *\n * - `$state.go('contact.detail')` - will go to the `contact.detail` state\n * - `$state.go('^')` - will go to a parent state\n * - `$state.go('^.sibling')` - will go to a sibling state\n * - `$state.go('.child.grandchild')` - will go to grandchild state\n *\n * @param {object=} params A map of the parameters that will be sent to the state, \n * will populate $stateParams. Any parameters that are not specified will be inherited from currently \n * defined parameters. Only parameters specified in the state definition can be overridden, new \n * parameters will be ignored. This allows, for example, going to a sibling state that shares parameters\n * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.\n * transitioning to a sibling will get you the parameters for all parents, transitioning to a child\n * will get you all current parameters, etc.\n * @param {object=} options Options object. The options are:\n *\n * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n * will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n * defines which state to be relative from.\n * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n * - **`reload`** (v0.2.5) - {boolean=false|string|object}, If `true` will force transition even if no state or params\n * have changed. It will reload the resolves and views of the current state and parent states.\n * If `reload` is a string (or state object), the state object is fetched (by name, or object reference); and \\\n * the transition reloads the resolves and views for that matched state, and all its children states.\n *\n * @returns {promise} A promise representing the state of the new transition.\n *\n * Possible success values:\n *\n * - $state.current\n *\n *
Possible rejection values:\n *\n * - 'transition superseded' - when a newer transition has been started after this one\n * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener\n * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or\n * when a `$stateNotFound` `event.retry` promise errors.\n * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.\n * - *resolve error* - when an error has occurred with a `resolve`\n *\n */\n $state.go = function go(to, params, options) {\n return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));\n };\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#transitionTo\n * @methodOf ui.router.state.$state\n *\n * @description\n * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}\n * uses `transitionTo` internally. `$state.go` is recommended in most situations.\n *\n * @example\n *
\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.transitionTo('contact.detail');\n     *   };\n     * });\n     * 
\n *\n * @param {string} to State name.\n * @param {object=} toParams A map of the parameters that will be sent to the state,\n * will populate $stateParams.\n * @param {object=} options Options object. The options are:\n *\n * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n * will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), \n * defines which state to be relative from.\n * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params \n * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n * use this when you want to force a reload when *everything* is the same, including search params.\n * if String, then will reload the state with the name given in reload, and any children.\n * if Object, then a stateObj is expected, will reload the state found in stateObj, and any children.\n *\n * @returns {promise} A promise representing the state of the new transition. See\n * {@link ui.router.state.$state#methods_go $state.go}.\n */\n $state.transitionTo = function transitionTo(to, toParams, options) {\n toParams = toParams || {};\n options = extend({\n location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false\n }, options || {});\n\n var from = $state.$current, fromParams = $state.params, fromPath = from.path;\n var evt, toState = findState(to, options.relative);\n\n // Store the hash param for later (since it will be stripped out by various methods)\n var hash = toParams['#'];\n\n if (!isDefined(toState)) {\n var redirect = { to: to, toParams: toParams, options: options };\n var redirectResult = handleRedirect(redirect, from.self, fromParams, options);\n\n if (redirectResult) {\n return redirectResult;\n }\n\n // Always retry once if the $stateNotFound was not prevented\n // (handles either redirect changed or state lazy-definition)\n to = redirect.to;\n toParams = redirect.toParams;\n options = redirect.options;\n toState = findState(to, options.relative);\n\n if (!isDefined(toState)) {\n if (!options.relative) throw new Error(\"No such state '\" + to + \"'\");\n throw new Error(\"Could not resolve '\" + to + \"' from state '\" + options.relative + \"'\");\n }\n }\n if (toState[abstractKey]) throw new Error(\"Cannot transition to abstract state '\" + to + \"'\");\n if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);\n if (!toState.params.$$validates(toParams)) return TransitionFailed;\n\n toParams = toState.params.$$values(toParams);\n to = toState;\n\n var toPath = to.path;\n\n // Starting from the root of the path, keep all levels that haven't changed\n var keep = 0, state = toPath[keep], locals = root.locals, toLocals = [];\n\n if (!options.reload) {\n while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) {\n locals = toLocals[keep] = state.locals;\n keep++;\n state = toPath[keep];\n }\n } else if (isString(options.reload) || isObject(options.reload)) {\n if (isObject(options.reload) && !options.reload.name) {\n throw new Error('Invalid reload state object');\n }\n \n var reloadState = options.reload === true ? fromPath[0] : findState(options.reload);\n if (options.reload && !reloadState) {\n throw new Error(\"No such reload state '\" + (isString(options.reload) ? options.reload : options.reload.name) + \"'\");\n }\n\n while (state && state === fromPath[keep] && state !== reloadState) {\n locals = toLocals[keep] = state.locals;\n keep++;\n state = toPath[keep];\n }\n }\n\n // If we're going to the same state and all locals are kept, we've got nothing to do.\n // But clear 'transition', as we still want to cancel any other pending transitions.\n // TODO: We may not want to bump 'transition' if we're called from a location change\n // that we've initiated ourselves, because we might accidentally abort a legitimate\n // transition initiated from code?\n if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) {\n if (hash) toParams['#'] = hash;\n $state.params = toParams;\n copy($state.params, $stateParams);\n copy(filterByKeys(to.params.$$keys(), $stateParams), to.locals.globals.$stateParams);\n if (options.location && to.navigable && to.navigable.url) {\n $urlRouter.push(to.navigable.url, toParams, {\n $$avoidResync: true, replace: options.location === 'replace'\n });\n $urlRouter.update(true);\n }\n $state.transition = null;\n return $q.when($state.current);\n }\n\n // Filter parameters before we pass them to event handlers etc.\n toParams = filterByKeys(to.params.$$keys(), toParams || {});\n \n // Re-add the saved hash before we start returning things or broadcasting $stateChangeStart\n if (hash) toParams['#'] = hash;\n \n // Broadcast start event and cancel the transition if requested\n if (options.notify) {\n /**\n * @ngdoc event\n * @name ui.router.state.$state#$stateChangeStart\n * @eventOf ui.router.state.$state\n * @eventType broadcast on root scope\n * @description\n * Fired when the state transition **begins**. You can use `event.preventDefault()`\n * to prevent the transition from happening and then the transition promise will be\n * rejected with a `'transition prevented'` value.\n *\n * @param {Object} event Event object.\n * @param {State} toState The state being transitioned to.\n * @param {Object} toParams The params supplied to the `toState`.\n * @param {State} fromState The current state, pre-transition.\n * @param {Object} fromParams The params supplied to the `fromState`.\n *\n * @example\n *\n *
\n         * $rootScope.$on('$stateChangeStart',\n         * function(event, toState, toParams, fromState, fromParams){\n         *     event.preventDefault();\n         *     // transitionTo() promise will be rejected with\n         *     // a 'transition prevented' error\n         * })\n         * 
\n */\n if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams, options).defaultPrevented) {\n $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);\n //Don't update and resync url if there's been a new transition started. see issue #2238, #600\n if ($state.transition == null) $urlRouter.update();\n return TransitionPrevented;\n }\n }\n\n // Resolve locals for the remaining states, but don't update any global state just\n // yet -- if anything fails to resolve the current state needs to remain untouched.\n // We also set up an inheritance chain for the locals here. This allows the view directive\n // to quickly look up the correct definition for each view in the current state. Even\n // though we create the locals object itself outside resolveState(), it is initially\n // empty and gets filled asynchronously. We need to keep track of the promise for the\n // (fully resolved) current locals, and pass this down the chain.\n var resolved = $q.when(locals);\n\n for (var l = keep; l < toPath.length; l++, state = toPath[l]) {\n locals = toLocals[l] = inherit(locals);\n resolved = resolveState(state, toParams, state === to, resolved, locals, options);\n }\n\n // Once everything is resolved, we are ready to perform the actual transition\n // and return a promise for the new state. We also keep track of what the\n // current promise is, so that we can detect overlapping transitions and\n // keep only the outcome of the last transition.\n var transition = $state.transition = resolved.then(function () {\n var l, entering, exiting;\n\n if ($state.transition !== transition) return TransitionSuperseded;\n\n // Exit 'from' states not kept\n for (l = fromPath.length - 1; l >= keep; l--) {\n exiting = fromPath[l];\n if (exiting.self.onExit) {\n $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);\n }\n exiting.locals = null;\n }\n\n // Enter 'to' states not kept\n for (l = keep; l < toPath.length; l++) {\n entering = toPath[l];\n entering.locals = toLocals[l];\n if (entering.self.onEnter) {\n $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);\n }\n }\n\n // Run it again, to catch any transitions in callbacks\n if ($state.transition !== transition) return TransitionSuperseded;\n\n // Update globals in $state\n $state.$current = to;\n $state.current = to.self;\n $state.params = toParams;\n copy($state.params, $stateParams);\n $state.transition = null;\n\n if (options.location && to.navigable) {\n $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, {\n $$avoidResync: true, replace: options.location === 'replace'\n });\n }\n\n if (options.notify) {\n /**\n * @ngdoc event\n * @name ui.router.state.$state#$stateChangeSuccess\n * @eventOf ui.router.state.$state\n * @eventType broadcast on root scope\n * @description\n * Fired once the state transition is **complete**.\n *\n * @param {Object} event Event object.\n * @param {State} toState The state being transitioned to.\n * @param {Object} toParams The params supplied to the `toState`.\n * @param {State} fromState The current state, pre-transition.\n * @param {Object} fromParams The params supplied to the `fromState`.\n */\n $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);\n }\n $urlRouter.update(true);\n\n return $state.current;\n }).then(null, function (error) {\n if ($state.transition !== transition) return TransitionSuperseded;\n\n $state.transition = null;\n /**\n * @ngdoc event\n * @name ui.router.state.$state#$stateChangeError\n * @eventOf ui.router.state.$state\n * @eventType broadcast on root scope\n * @description\n * Fired when an **error occurs** during transition. It's important to note that if you\n * have any errors in your resolve functions (javascript errors, non-existent services, etc)\n * they will not throw traditionally. You must listen for this $stateChangeError event to\n * catch **ALL** errors.\n *\n * @param {Object} event Event object.\n * @param {State} toState The state being transitioned to.\n * @param {Object} toParams The params supplied to the `toState`.\n * @param {State} fromState The current state, pre-transition.\n * @param {Object} fromParams The params supplied to the `fromState`.\n * @param {Error} error The resolve error object.\n */\n evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);\n\n if (!evt.defaultPrevented) {\n $urlRouter.update();\n }\n\n return $q.reject(error);\n });\n\n return transition;\n };\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#is\n * @methodOf ui.router.state.$state\n *\n * @description\n * Similar to {@link ui.router.state.$state#methods_includes $state.includes},\n * but only checks for the full state name. If params is supplied then it will be\n * tested for strict equality against the current active params object, so all params\n * must match with none missing and no extras.\n *\n * @example\n *
\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // absolute name\n     * $state.is('contact.details.item'); // returns true\n     * $state.is(contactDetailItemStateObject); // returns true\n     *\n     * // relative name (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * 
Item
\n *
\n *\n * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check.\n * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like\n * to test against the current active state.\n * @param {object=} options An options object. The options are:\n *\n * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will\n * test relative to `options.relative` state (or name).\n *\n * @returns {boolean} Returns true if it is the state.\n */\n $state.is = function is(stateOrName, params, options) {\n options = extend({ relative: $state.$current }, options || {});\n var state = findState(stateOrName, options.relative);\n\n if (!isDefined(state)) { return undefined; }\n if ($state.$current !== state) { return false; }\n return params ? equalForKeys(state.params.$$values(params), $stateParams) : true;\n };\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#includes\n * @methodOf ui.router.state.$state\n *\n * @description\n * A method to determine if the current active state is equal to or is the child of the\n * state stateName. If any params are passed then they will be tested for a match as well.\n * Not all the parameters need to be passed, just the ones you'd like to test for equality.\n *\n * @example\n * Partial and relative names\n *
\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // Using partial names\n     * $state.includes(\"contacts\"); // returns true\n     * $state.includes(\"contacts.details\"); // returns true\n     * $state.includes(\"contacts.details.item\"); // returns true\n     * $state.includes(\"contacts.list\"); // returns false\n     * $state.includes(\"about\"); // returns false\n     *\n     * // Using relative names (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * 
Item
\n *
\n *\n * Basic globbing patterns\n *
\n     * $state.$current.name = 'contacts.details.item.url';\n     *\n     * $state.includes(\"*.details.*.*\"); // returns true\n     * $state.includes(\"*.details.**\"); // returns true\n     * $state.includes(\"**.item.**\"); // returns true\n     * $state.includes(\"*.details.item.url\"); // returns true\n     * $state.includes(\"*.details.*.url\"); // returns true\n     * $state.includes(\"*.details.*\"); // returns false\n     * $state.includes(\"item.**\"); // returns false\n     * 
\n *\n * @param {string} stateOrName A partial name, relative name, or glob pattern\n * to be searched for within the current state name.\n * @param {object=} params A param object, e.g. `{sectionId: section.id}`,\n * that you'd like to test against the current active state.\n * @param {object=} options An options object. The options are:\n *\n * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set,\n * .includes will test relative to `options.relative` state (or name).\n *\n * @returns {boolean} Returns true if it does include the state\n */\n $state.includes = function includes(stateOrName, params, options) {\n options = extend({ relative: $state.$current }, options || {});\n if (isString(stateOrName) && isGlob(stateOrName)) {\n if (!doesStateMatchGlob(stateOrName)) {\n return false;\n }\n stateOrName = $state.$current.name;\n }\n\n var state = findState(stateOrName, options.relative);\n if (!isDefined(state)) { return undefined; }\n if (!isDefined($state.$current.includes[state.name])) { return false; }\n return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true;\n };\n\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#href\n * @methodOf ui.router.state.$state\n *\n * @description\n * A url generation method that returns the compiled url for the given state populated with the given params.\n *\n * @example\n *
\n     * expect($state.href(\"about.person\", { person: \"bob\" })).toEqual(\"/about/bob\");\n     * 
\n *\n * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.\n * @param {object=} params An object of parameter values to fill the state's required parameters.\n * @param {object=} options Options object. The options are:\n *\n * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the\n * first parameter, then the constructed href url will be built from the first navigable ancestor (aka\n * ancestor with a valid url).\n * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n * defines which state to be relative from.\n * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n * \n * @returns {string} compiled state url\n */\n $state.href = function href(stateOrName, params, options) {\n options = extend({\n lossy: true,\n inherit: true,\n absolute: false,\n relative: $state.$current\n }, options || {});\n\n var state = findState(stateOrName, options.relative);\n\n if (!isDefined(state)) return null;\n if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state);\n \n var nav = (state && options.lossy) ? state.navigable : state;\n\n if (!nav || nav.url === undefined || nav.url === null) {\n return null;\n }\n return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), {\n absolute: options.absolute\n });\n };\n\n /**\n * @ngdoc function\n * @name ui.router.state.$state#get\n * @methodOf ui.router.state.$state\n *\n * @description\n * Returns the state configuration object for any specific state or all states.\n *\n * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for\n * the requested state. If not provided, returns an array of ALL state configs.\n * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context.\n * @returns {Object|Array} State configuration object or array of all objects.\n */\n $state.get = function (stateOrName, context) {\n if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; });\n var state = findState(stateOrName, context || $state.$current);\n return (state && state.self) ? state.self : null;\n };\n\n function resolveState(state, params, paramsAreFiltered, inherited, dst, options) {\n // Make a restricted $stateParams with only the parameters that apply to this state if\n // necessary. In addition to being available to the controller and onEnter/onExit callbacks,\n // we also need $stateParams to be available for any $injector calls we make during the\n // dependency resolution process.\n var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params);\n var locals = { $stateParams: $stateParams };\n\n // Resolve 'global' dependencies for the state, i.e. those not specific to a view.\n // We're also including $stateParams in this; that way the parameters are restricted\n // to the set that should be visible to the state, and are independent of when we update\n // the global $state and $stateParams values.\n dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);\n var promises = [dst.resolve.then(function (globals) {\n dst.globals = globals;\n })];\n if (inherited) promises.push(inherited);\n\n function resolveViews() {\n var viewsPromises = [];\n\n // Resolve template and dependencies for all views.\n forEach(state.views, function (view, name) {\n var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});\n injectables.$template = [ function () {\n return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || '';\n }];\n\n viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) {\n // References to the controller (only instantiated at link time)\n if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {\n var injectLocals = angular.extend({}, injectables, dst.globals);\n result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);\n } else {\n result.$$controller = view.controller;\n }\n // Provide access to the state itself for internal use\n result.$$state = state;\n result.$$controllerAs = view.controllerAs;\n result.$$resolveAs = view.resolveAs;\n dst[name] = result;\n }));\n });\n\n return $q.all(viewsPromises).then(function(){\n return dst.globals;\n });\n }\n\n // Wait for all the promises and then return the activation object\n return $q.all(promises).then(resolveViews).then(function (values) {\n return dst;\n });\n }\n\n return $state;\n }\n\n function shouldSkipReload(to, toParams, from, fromParams, locals, options) {\n // Return true if there are no differences in non-search (path/object) params, false if there are differences\n function nonSearchParamsEqual(fromAndToState, fromParams, toParams) {\n // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params.\n function notSearchParam(key) {\n return fromAndToState.params[key].location != \"search\";\n }\n var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam);\n var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys));\n var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams);\n return nonQueryParamSet.$$equals(fromParams, toParams);\n }\n\n // If reload was not explicitly requested\n // and we're transitioning to the same state we're already in\n // and the locals didn't change\n // or they changed in a way that doesn't merit reloading\n // (reloadOnParams:false, or reloadOnSearch.false and only search params changed)\n // Then return true.\n if (!options.reload && to === from &&\n (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) {\n return true;\n }\n }\n}\n\nangular.module('ui.router.state')\n .factory('$stateParams', function () { return {}; })\n .constant(\"$state.runtime\", { autoinject: true })\n .provider('$state', $StateProvider)\n // Inject $state to initialize when entering runtime. #2574\n .run(['$injector', function ($injector) {\n // Allow tests (stateSpec.js) to turn this off by defining this constant\n if ($injector.get(\"$state.runtime\").autoinject) {\n $injector.get('$state');\n }\n }]);\n\n\n$ViewProvider.$inject = [];\nfunction $ViewProvider() {\n\n this.$get = $get;\n /**\n * @ngdoc object\n * @name ui.router.state.$view\n *\n * @requires ui.router.util.$templateFactory\n * @requires $rootScope\n *\n * @description\n *\n */\n $get.$inject = ['$rootScope', '$templateFactory'];\n function $get( $rootScope, $templateFactory) {\n return {\n // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })\n /**\n * @ngdoc function\n * @name ui.router.state.$view#load\n * @methodOf ui.router.state.$view\n *\n * @description\n *\n * @param {string} name name\n * @param {object} options option object.\n */\n load: function load(name, options) {\n var result, defaults = {\n template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}\n };\n options = extend(defaults, options);\n\n if (options.view) {\n result = $templateFactory.fromConfig(options.view, options.params, options.locals);\n }\n return result;\n }\n };\n }\n}\n\nangular.module('ui.router.state').provider('$view', $ViewProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.\n */\nfunction $ViewScrollProvider() {\n\n var useAnchorScroll = false;\n\n /**\n * @ngdoc function\n * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll\n * @methodOf ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for\n * scrolling based on the url anchor.\n */\n this.useAnchorScroll = function () {\n useAnchorScroll = true;\n };\n\n /**\n * @ngdoc object\n * @name ui.router.state.$uiViewScroll\n *\n * @requires $anchorScroll\n * @requires $timeout\n *\n * @description\n * When called with a jqLite element, it scrolls the element into view (after a\n * `$timeout` so the DOM has time to refresh).\n *\n * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,\n * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.\n */\n this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {\n if (useAnchorScroll) {\n return $anchorScroll;\n }\n\n return function ($element) {\n return $timeout(function () {\n $element[0].scrollIntoView();\n }, 0, false);\n };\n }];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-view\n *\n * @requires ui.router.state.$state\n * @requires $compile\n * @requires $controller\n * @requires $injector\n * @requires ui.router.state.$uiViewScroll\n * @requires $document\n *\n * @restrict ECA\n *\n * @description\n * The ui-view directive tells $state where to place your templates.\n *\n * @param {string=} name A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states.\n *\n * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window\n * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll\n * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you\n * scroll ui-view elements into view when they are populated during a state activation.\n *\n * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*\n *\n * @param {string=} onload Expression to evaluate whenever the view updates.\n *\n * @example\n * A view can be unnamed or named.\n *
\n * \n * 
\n *\n * \n *
\n *
\n *\n * You can only have one unnamed view within any template (or root html). If you are only using a\n * single view and it is unnamed then you can populate it like so:\n *
\n * 
\n * $stateProvider.state(\"home\", {\n * template: \"

HELLO!

\"\n * })\n *
\n *\n * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#methods_state `views`}\n * config property, by name, in this case an empty name:\n *
\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"

HELLO!

\"\n * }\n * } \n * })\n *
\n *\n * But typically you'll only use the views property if you name your view or have more than one view\n * in the same template. There's not really a compelling reason to name a view if its the only one,\n * but you could if you wanted, like so:\n *
\n * 
\n *
\n *
\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"main\": {\n *       template: \"

HELLO!

\"\n * }\n * } \n * })\n *
\n *\n * Really though, you'll use views to set up multiple views:\n *
\n * 
\n *
\n *
\n *
\n *\n *
\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"

HELLO!

\"\n * },\n * \"chart\": {\n * template: \"\"\n * },\n * \"data\": {\n * template: \"\"\n * }\n * } \n * })\n *
\n *\n * Examples for `autoscroll`:\n *\n *
\n * \n * \n *\n * \n * \n * \n * \n * 
\n *\n * Resolve data:\n *\n * The resolved data from the state's `resolve` block is placed on the scope as `$resolve` (this\n * can be customized using [[ViewDeclaration.resolveAs]]). This can be then accessed from the template.\n *\n * Note that when `controllerAs` is being used, `$resolve` is set on the controller instance *after* the\n * controller is instantiated. The `$onInit()` hook can be used to perform initialization code which\n * depends on `$resolve` data.\n *\n * Example usage of $resolve in a view template\n *
\n * $stateProvider.state('home', {\n *   template: '',\n *   resolve: {\n *     user: function(UserService) { return UserService.fetchUser(); }\n *   }\n * });\n * 
\n */\n$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate', '$q'];\nfunction $ViewDirective( $state, $injector, $uiViewScroll, $interpolate, $q) {\n\n function getService() {\n return ($injector.has) ? function(service) {\n return $injector.has(service) ? $injector.get(service) : null;\n } : function(service) {\n try {\n return $injector.get(service);\n } catch (e) {\n return null;\n }\n };\n }\n\n var service = getService(),\n $animator = service('$animator'),\n $animate = service('$animate');\n\n // Returns a set of DOM manipulation functions based on which Angular version\n // it should use\n function getRenderer(attrs, scope) {\n var statics = function() {\n return {\n enter: function (element, target, cb) { target.after(element); cb(); },\n leave: function (element, cb) { element.remove(); cb(); }\n };\n };\n\n if ($animate) {\n return {\n enter: function(element, target, cb) {\n if (angular.version.minor > 2) {\n $animate.enter(element, null, target).then(cb);\n } else {\n $animate.enter(element, null, target, cb);\n }\n },\n leave: function(element, cb) {\n if (angular.version.minor > 2) {\n $animate.leave(element).then(cb);\n } else {\n $animate.leave(element, cb);\n }\n }\n };\n }\n\n if ($animator) {\n var animate = $animator && $animator(scope, attrs);\n\n return {\n enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },\n leave: function(element, cb) { animate.leave(element); cb(); }\n };\n }\n\n return statics();\n }\n\n var directive = {\n restrict: 'ECA',\n terminal: true,\n priority: 400,\n transclude: 'element',\n compile: function (tElement, tAttrs, $transclude) {\n return function (scope, $element, attrs) {\n var previousEl, currentEl, currentScope, latestLocals,\n onloadExp = attrs.onload || '',\n autoScrollExp = attrs.autoscroll,\n renderer = getRenderer(attrs, scope),\n inherited = $element.inheritedData('$uiView');\n\n scope.$on('$stateChangeSuccess', function() {\n updateView(false);\n });\n\n updateView(true);\n\n function cleanupLastView() {\n if (previousEl) {\n previousEl.remove();\n previousEl = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n\n if (currentEl) {\n var $uiViewData = currentEl.data('$uiViewAnim');\n renderer.leave(currentEl, function() {\n $uiViewData.$$animLeave.resolve();\n previousEl = null;\n });\n\n previousEl = currentEl;\n currentEl = null;\n }\n }\n\n function updateView(firstTime) {\n var newScope,\n name = getUiViewName(scope, attrs, $element, $interpolate),\n previousLocals = name && $state.$current && $state.$current.locals[name];\n\n if (!firstTime && previousLocals === latestLocals) return; // nothing to do\n newScope = scope.$new();\n latestLocals = $state.$current.locals[name];\n\n /**\n * @ngdoc event\n * @name ui.router.state.directive:ui-view#$viewContentLoading\n * @eventOf ui.router.state.directive:ui-view\n * @eventType emits on ui-view directive scope\n * @description\n *\n * Fired once the view **begins loading**, *before* the DOM is rendered.\n *\n * @param {Object} event Event object.\n * @param {string} viewName Name of the view.\n */\n newScope.$emit('$viewContentLoading', name);\n\n var clone = $transclude(newScope, function(clone) {\n var animEnter = $q.defer(), animLeave = $q.defer();\n var viewAnimData = {\n $animEnter: animEnter.promise,\n $animLeave: animLeave.promise,\n $$animLeave: animLeave\n };\n\n clone.data('$uiViewAnim', viewAnimData);\n renderer.enter(clone, $element, function onUiViewEnter() {\n animEnter.resolve();\n if(currentScope) {\n currentScope.$emit('$viewContentAnimationEnded');\n }\n\n if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {\n $uiViewScroll(clone);\n }\n });\n cleanupLastView();\n });\n\n currentEl = clone;\n currentScope = newScope;\n /**\n * @ngdoc event\n * @name ui.router.state.directive:ui-view#$viewContentLoaded\n * @eventOf ui.router.state.directive:ui-view\n * @eventType emits on ui-view directive scope\n * @description\n * Fired once the view is **loaded**, *after* the DOM is rendered.\n *\n * @param {Object} event Event object.\n * @param {string} viewName Name of the view.\n */\n currentScope.$emit('$viewContentLoaded', name);\n currentScope.$eval(onloadExp);\n }\n };\n }\n };\n\n return directive;\n}\n\n$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate'];\nfunction $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) {\n return {\n restrict: 'ECA',\n priority: -400,\n compile: function (tElement) {\n var initial = tElement.html();\n return function (scope, $element, attrs) {\n var current = $state.$current,\n name = getUiViewName(scope, attrs, $element, $interpolate),\n locals = current && current.locals[name];\n\n if (! locals) {\n return;\n }\n\n $element.data('$uiView', { name: name, state: locals.$$state });\n $element.html(locals.$template ? locals.$template : initial);\n\n var resolveData = angular.extend({}, locals);\n scope[locals.$$resolveAs] = resolveData;\n\n var link = $compile($element.contents());\n\n if (locals.$$controller) {\n locals.$scope = scope;\n locals.$element = $element;\n var controller = $controller(locals.$$controller, locals);\n if (locals.$$controllerAs) {\n scope[locals.$$controllerAs] = controller;\n scope[locals.$$controllerAs][locals.$$resolveAs] = resolveData;\n }\n if (isFunction(controller.$onInit)) controller.$onInit();\n $element.data('$ngControllerController', controller);\n $element.children().data('$ngControllerController', controller);\n }\n\n link(scope);\n };\n }\n };\n}\n\n/**\n * Shared ui-view code for both directives:\n * Given scope, element, and its attributes, return the view's name\n */\nfunction getUiViewName(scope, attrs, element, $interpolate) {\n var name = $interpolate(attrs.uiView || attrs.name || '')(scope);\n var uiViewCreatedBy = element.inheritedData('$uiView');\n return name.indexOf('@') >= 0 ? name : (name + '@' + (uiViewCreatedBy ? uiViewCreatedBy.state.name : ''));\n}\n\nangular.module('ui.router.state').directive('uiView', $ViewDirective);\nangular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);\n\nfunction parseStateRef(ref, current) {\n var preparsed = ref.match(/^\\s*({[^}]*})\\s*$/), parsed;\n if (preparsed) ref = current + '(' + preparsed[1] + ')';\n parsed = ref.replace(/\\n/g, \" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/);\n if (!parsed || parsed.length !== 4) throw new Error(\"Invalid state ref '\" + ref + \"'\");\n return { state: parsed[1], paramExpr: parsed[3] || null };\n}\n\nfunction stateContext(el) {\n var stateData = el.parent().inheritedData('$uiView');\n\n if (stateData && stateData.state && stateData.state.name) {\n return stateData.state;\n }\n}\n\nfunction getTypeInfo(el) {\n // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n var isSvg = Object.prototype.toString.call(el.prop('href')) === '[object SVGAnimatedString]';\n var isForm = el[0].nodeName === \"FORM\";\n\n return {\n attr: isForm ? \"action\" : (isSvg ? 'xlink:href' : 'href'),\n isAnchor: el.prop(\"tagName\").toUpperCase() === \"A\",\n clickable: !isForm\n };\n}\n\nfunction clickHook(el, $state, $timeout, type, current) {\n return function(e) {\n var button = e.which || e.button, target = current();\n\n if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || el.attr('target'))) {\n // HACK: This is to allow ng-clicks to be processed before the transition is initiated:\n var transition = $timeout(function() {\n $state.go(target.state, target.params, target.options);\n });\n e.preventDefault();\n\n // if the state has no URL, ignore one preventDefault from the directive.\n var ignorePreventDefaultCount = type.isAnchor && !target.href ? 1: 0;\n\n e.preventDefault = function() {\n if (ignorePreventDefaultCount-- <= 0) $timeout.cancel(transition);\n };\n }\n };\n}\n\nfunction defaultOpts(el, $state) {\n return { relative: stateContext(el) || $state.$current, inherit: true };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref\n *\n * @requires ui.router.state.$state\n * @requires $timeout\n *\n * @restrict A\n *\n * @description\n * A directive that binds a link (`` tag) to a state. If the state has an associated\n * URL, the directive will automatically generate & update the `href` attribute via\n * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking\n * the link will trigger a state transition with optional parameters.\n *\n * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be\n * handled natively by the browser.\n *\n * You can also use relative state paths within ui-sref, just like the relative\n * paths passed to `$state.go()`. You just need to be aware that the path is relative\n * to the state that the link lives in, in other words the state that loaded the\n * template containing the link.\n *\n * You can specify options to pass to {@link ui.router.state.$state#methods_go $state.go()}\n * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,\n * and `reload`.\n *\n * @example\n * Here's an example of how you'd use ui-sref and how it would compile. If you have the\n * following template:\n *
\n * Home | About | Next page\n *\n * \n * 
\n *\n * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):\n *
\n * Home | About | Next page\n *\n * 
    \n *
  • \n * Joe\n *
  • \n *
  • \n * Alice\n *
  • \n *
  • \n * Bob\n *
  • \n *
\n *\n * Home\n *
\n *\n * @param {string} ui-sref 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#methods_go $state.go()}\n */\n$StateRefDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDirective($state, $timeout) {\n return {\n restrict: 'A',\n require: ['?^uiSrefActive', '?^uiSrefActiveEq'],\n link: function(scope, element, attrs, uiSrefActive) {\n var ref = parseStateRef(attrs.uiSref, $state.current.name);\n var def = { state: ref.state, href: null, params: null };\n var type = getTypeInfo(element);\n var active = uiSrefActive[1] || uiSrefActive[0];\n var unlinkInfoFn = null;\n var hookFn;\n\n def.options = extend(defaultOpts(element, $state), attrs.uiSrefOpts ? scope.$eval(attrs.uiSrefOpts) : {});\n\n var update = function(val) {\n if (val) def.params = angular.copy(val);\n def.href = $state.href(ref.state, def.params, def.options);\n\n if (unlinkInfoFn) unlinkInfoFn();\n if (active) unlinkInfoFn = active.$$addStateInfo(ref.state, def.params);\n if (def.href !== null) attrs.$set(type.attr, def.href);\n };\n\n if (ref.paramExpr) {\n scope.$watch(ref.paramExpr, function(val) { if (val !== def.params) update(val); }, true);\n def.params = angular.copy(scope.$eval(ref.paramExpr));\n }\n update();\n\n if (!type.clickable) return;\n hookFn = clickHook(element, $state, $timeout, type, function() { return def; });\n element.bind(\"click\", hookFn);\n scope.$on('$destroy', function() {\n element.unbind(\"click\", hookFn);\n });\n }\n };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-state\n *\n * @requires ui.router.state.uiSref\n *\n * @restrict A\n *\n * @description\n * Much like ui-sref, but will accept named $scope properties to evaluate for a state definition,\n * params and override options.\n *\n * @param {string} ui-state 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-state-params params to pass to {@link ui.router.state.$state#methods_href $state.href()}\n * @param {Object} ui-state-opts options to pass to {@link ui.router.state.$state#methods_go $state.go()}\n */\n$StateRefDynamicDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDynamicDirective($state, $timeout) {\n return {\n restrict: 'A',\n require: ['?^uiSrefActive', '?^uiSrefActiveEq'],\n link: function(scope, element, attrs, uiSrefActive) {\n var type = getTypeInfo(element);\n var active = uiSrefActive[1] || uiSrefActive[0];\n var group = [attrs.uiState, attrs.uiStateParams || null, attrs.uiStateOpts || null];\n var watch = '[' + group.map(function(val) { return val || 'null'; }).join(', ') + ']';\n var def = { state: null, params: null, options: null, href: null };\n var unlinkInfoFn = null;\n var hookFn;\n\n function runStateRefLink (group) {\n def.state = group[0]; def.params = group[1]; def.options = group[2];\n def.href = $state.href(def.state, def.params, def.options);\n\n if (unlinkInfoFn) unlinkInfoFn();\n if (active) unlinkInfoFn = active.$$addStateInfo(def.state, def.params);\n if (def.href) attrs.$set(type.attr, def.href);\n }\n\n scope.$watch(watch, runStateRefLink, true);\n runStateRefLink(scope.$eval(watch));\n\n if (!type.clickable) return;\n hookFn = clickHook(element, $state, $timeout, type, function() { return def; });\n element.bind(\"click\", hookFn);\n scope.$on('$destroy', function() {\n element.unbind(\"click\", hookFn);\n });\n }\n };\n}\n\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * A directive working alongside ui-sref to add classes to an element when the\n * related ui-sref directive's state is active, and removing them when it is inactive.\n * The primary use-case is to simplify the special appearance of navigation menus\n * relying on `ui-sref`, by having the \"active\" state's menu button appear different,\n * distinguishing it from the inactive menu items.\n *\n * ui-sref-active can live on the same element as ui-sref or on a parent element. The first\n * ui-sref-active found at the same level or above the ui-sref will be used.\n *\n * Will activate when the ui-sref's target state or any child state is active. If you\n * need to activate only when the ui-sref target state is active and *not* any of\n * it's children, then you will use\n * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq}\n *\n * @example\n * Given the following template:\n *
\n * \n * 
\n *\n *\n * When the app state is \"app.user\" (or any children states), and contains the state parameter \"user\" with value \"bilbobaggins\",\n * the resulting HTML will appear as (note the 'active' class):\n *
\n * \n * 
\n *\n * The class name is interpolated **once** during the directives link time (any further changes to the\n * interpolated value are ignored).\n *\n * Multiple classes may be specified in a space-separated format:\n *
\n * 
    \n *
  • \n * link\n *
  • \n *
\n *
\n *\n * It is also possible to pass ui-sref-active an expression that evaluates\n * to an object hash, whose keys represent active class names and whose\n * values represent the respective state names/globs.\n * ui-sref-active will match if the current active state **includes** any of\n * the specified state names/globs, even the abstract ones.\n *\n * @Example\n * Given the following template, with \"admin\" being an abstract state:\n *
\n * 
\n * Roles\n *
\n *
\n *\n * When the current state is \"admin.roles\" the \"active\" class will be applied\n * to both the
and elements. It is important to note that the state\n * names/globs passed to ui-sref-active shadow the state provided by ui-sref.\n */\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active-eq\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate\n * when the exact target state used in the `ui-sref` is active; no child states.\n *\n */\n$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];\nfunction $StateRefActiveDirective($state, $stateParams, $interpolate) {\n return {\n restrict: \"A\",\n controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {\n var states = [], activeClasses = {}, activeEqClass, uiSrefActive;\n\n // There probably isn't much point in $observing this\n // uiSrefActive and uiSrefActiveEq share the same directive object with some\n // slight difference in logic routing\n activeEqClass = $interpolate($attrs.uiSrefActiveEq || '', false)($scope);\n\n try {\n uiSrefActive = $scope.$eval($attrs.uiSrefActive);\n } catch (e) {\n // Do nothing. uiSrefActive is not a valid expression.\n // Fall back to using $interpolate below\n }\n uiSrefActive = uiSrefActive || $interpolate($attrs.uiSrefActive || '', false)($scope);\n if (isObject(uiSrefActive)) {\n forEach(uiSrefActive, function(stateOrName, activeClass) {\n if (isString(stateOrName)) {\n var ref = parseStateRef(stateOrName, $state.current.name);\n addState(ref.state, $scope.$eval(ref.paramExpr), activeClass);\n }\n });\n }\n\n // Allow uiSref to communicate with uiSrefActive[Equals]\n this.$$addStateInfo = function (newState, newParams) {\n // we already got an explicit state provided by ui-sref-active, so we\n // shadow the one that comes from ui-sref\n if (isObject(uiSrefActive) && states.length > 0) {\n return;\n }\n var deregister = addState(newState, newParams, uiSrefActive);\n update();\n return deregister;\n };\n\n $scope.$on('$stateChangeSuccess', update);\n\n function addState(stateName, stateParams, activeClass) {\n var state = $state.get(stateName, stateContext($element));\n var stateHash = createStateHash(stateName, stateParams);\n\n var stateInfo = {\n state: state || { name: stateName },\n params: stateParams,\n hash: stateHash\n };\n\n states.push(stateInfo);\n activeClasses[stateHash] = activeClass;\n\n return function removeState() {\n var idx = states.indexOf(stateInfo);\n if (idx !== -1) states.splice(idx, 1);\n };\n }\n\n /**\n * @param {string} state\n * @param {Object|string} [params]\n * @return {string}\n */\n function createStateHash(state, params) {\n if (!isString(state)) {\n throw new Error('state should be a string');\n }\n if (isObject(params)) {\n return state + toJson(params);\n }\n params = $scope.$eval(params);\n if (isObject(params)) {\n return state + toJson(params);\n }\n return state;\n }\n\n // Update route state\n function update() {\n for (var i = 0; i < states.length; i++) {\n if (anyMatch(states[i].state, states[i].params)) {\n addClass($element, activeClasses[states[i].hash]);\n } else {\n removeClass($element, activeClasses[states[i].hash]);\n }\n\n if (exactMatch(states[i].state, states[i].params)) {\n addClass($element, activeEqClass);\n } else {\n removeClass($element, activeEqClass);\n }\n }\n }\n\n function addClass(el, className) { $timeout(function () { el.addClass(className); }); }\n function removeClass(el, className) { el.removeClass(className); }\n function anyMatch(state, params) { return $state.includes(state.name, params); }\n function exactMatch(state, params) { return $state.is(state.name, params); }\n\n update();\n }]\n };\n}\n\nangular.module('ui.router.state')\n .directive('uiSref', $StateRefDirective)\n .directive('uiSrefActive', $StateRefActiveDirective)\n .directive('uiSrefActiveEq', $StateRefActiveDirective)\n .directive('uiState', $StateRefDynamicDirective);\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:isState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_is $state.is(\"stateName\")}.\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state) {\n var isFilter = function (state, params) {\n return $state.is(state, params);\n };\n isFilter.$stateful = true;\n return isFilter;\n}\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:includedByState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state) {\n var includesFilter = function (state, params, options) {\n return $state.includes(state, params, options);\n };\n includesFilter.$stateful = true;\n return includesFilter;\n}\n\nangular.module('ui.router.state')\n .filter('isState', $IsStateFilter)\n .filter('includedByState', $IncludedByStateFilter);\n})(window, window.angular);\n/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.23.0\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"moment\"), (function webpackLoadOptionalExternalModule() { try { return require(\"interact.js\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"moment\", \"interact\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"angularBootstrapCalendarModuleName\"] = factory(require(\"angular\"), require(\"moment\"), (function webpackLoadOptionalExternalModule() { try { return require(\"interact.js\"); } catch(e) {} }()));\n\telse\n\t\troot[\"angularBootstrapCalendarModuleName\"] = factory(root[\"angular\"], root[\"moment\"], root[\"interact\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_12__, __WEBPACK_EXTERNAL_MODULE_28__, __WEBPACK_EXTERNAL_MODULE_52__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\t__webpack_require__(8);\n\n\tvar angular = __webpack_require__(12);\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\n\tvar templates = {};\n\n\tif (true) {\n\n\t var templatesContext = __webpack_require__(13);\n\n\t templatesContext.keys().forEach(function(templateName) {\n\t var templateNameWithoutPrefix = templateName.replace('./', '');\n\t var cacheTemplateName = 'mwl/' + templateNameWithoutPrefix;\n\t var configTemplateName = templateNameWithoutPrefix.replace('.html', '');\n\t templates[configTemplateName] = {\n\t cacheTemplateName: cacheTemplateName,\n\t template: templatesContext(templateName)\n\t };\n\t });\n\n\t}\n\n\tmodule.exports = angular\n\t .module('mwl.calendar', [])\n\t .config([\"calendarConfig\", function(calendarConfig) {\n\t angular.forEach(templates, function(template, templateName) {\n\t if (!calendarConfig.templates[templateName]) {\n\t calendarConfig.templates[templateName] = template.cacheTemplateName;\n\t }\n\t });\n\t }])\n\t .run([\"$templateCache\", \"$interpolate\", function($templateCache, $interpolate) {\n\n\t angular.forEach(templates, function(template) {\n\t if (!$templateCache.get(template.cacheTemplateName)) {\n\t var templateContents = template.template\n\t .replace('{{', $interpolate.startSymbol())\n\t .replace('}}', $interpolate.endSymbol());\n\t $templateCache.put(template.cacheTemplateName, templateContents);\n\t }\n\t });\n\n\t }]).name;\n\n\trequireAll(__webpack_require__(23));\n\trequireAll(__webpack_require__(41));\n\trequireAll(__webpack_require__(46));\n\n\n/***/ },\n/* 1 */,\n/* 2 */,\n/* 3 */,\n/* 4 */,\n/* 5 */,\n/* 6 */,\n/* 7 */,\n/* 8 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 9 */,\n/* 10 */,\n/* 11 */,\n/* 12 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_12__;\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendar.html\": 14,\n\t\t\"./calendarDayView.html\": 15,\n\t\t\"./calendarHourList.html\": 16,\n\t\t\"./calendarMonthCell.html\": 17,\n\t\t\"./calendarMonthCellEvents.html\": 18,\n\t\t\"./calendarMonthView.html\": 19,\n\t\t\"./calendarSlideBox.html\": 20,\n\t\t\"./calendarWeekView.html\": 21,\n\t\t\"./calendarYearView.html\": 22\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 13;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"\\n\\n
The value passed to the view attribute of the calendar is not set
\\n\\n
The value passed to view-date attribute of the calendar is not set
\\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n
\\n\";\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"\\n\\n\\n
\\n
\\n\\n \\n \\n\\n \\n\\n \\n , \\n \\n \\n \\n \\n \\n\\n \\n \\n\\n
\\n\\n
\\n\\n\\n\";\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n\\n
\\n\\n \\n
\\n \\n
\\n
\\n\\n \\n
\\n \\n  \\n
\\n \\n
\\n \\n\\n \\n\\n\\n\";\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"\\n\\n 0\\\"\\n ng-bind=\\\"day.badgeTotal\\\">\\n \\n\\n \\n \\n\\n
0 && !vm.slideBoxDisabled\\\">\\n \\n \\n
\\n\\n \\n\\n
\\n \\n
\\n\\n\\n\";\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
0\\\">\\n \\n \\n
\\n\";\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n\\n
\\n\\n
\\n
\\n\\n \\n
\\n 0}\\\">\\n \\n
\\n
\\n\\n 0 && !vm.slideBoxDisabled\\\"\\n events=\\\"vm.view[vm.openDayIndex].events\\\"\\n on-event-click=\\\"vm.onEventClick\\\"\\n cell=\\\"vm.view[vm.openDayIndex]\\\"\\n custom-template-urls=\\\"vm.customTemplateUrls\\\"\\n template-scope=\\\"vm.templateScope\\\">\\n \\n\\n \\n\\n\\n\";\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n
    \\n\\n \\n \\n  \\n \\n \\n \\n\\n \\n \\n\\n \\n\\n
\\n
\\n
\\n\";\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n\\n \\n\\n \\n
\\n \\n \\n \\n \\n\\n
\\n\\n
\\n\\n
\\n\\n \\n \\n\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n\\n \\n\\n \\n\\n\";\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n
\\n 0, 'cal-day-today': month.isToday}\\\"\\n mwl-droppable\\n on-drop=\\\"vm.handleEventDrop(dropData.event, month.date)\\\">\\n\\n \\n \\n\\n 0\\\"\\n ng-bind=\\\"month.badgeTotal\\\">\\n \\n\\n 0 && !vm.slideBoxDisabled\\\">\\n \\n \\n
\\n\\n
\\n
\\n\\n 0 && !vm.slideBoxDisabled\\\"\\n events=\\\"vm.view[vm.openMonthIndex].events\\\"\\n on-event-click=\\\"vm.onEventClick\\\"\\n cell=\\\"vm.view[vm.openMonthIndex]\\\"\\n custom-template-urls=\\\"vm.customTemplateUrls\\\"\\n template-scope=\\\"vm.templateScope\\\">\\n \\n\\n \\n\\n\\n\";\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 24,\n\t\t\"./mwlCalendarDay.js\": 25,\n\t\t\"./mwlCalendarHourList.js\": 26,\n\t\t\"./mwlCalendarMonth.js\": 29,\n\t\t\"./mwlCalendarSlideBox.js\": 30,\n\t\t\"./mwlCalendarWeek.js\": 31,\n\t\t\"./mwlCalendarYear.js\": 32,\n\t\t\"./mwlCollapseFallback.js\": 33,\n\t\t\"./mwlDateModifier.js\": 34,\n\t\t\"./mwlDragSelect.js\": 35,\n\t\t\"./mwlDraggable.js\": 36,\n\t\t\"./mwlDroppable.js\": 37,\n\t\t\"./mwlDynamicDirectiveTemplate.js\": 38,\n\t\t\"./mwlElementDimensions.js\": 39,\n\t\t\"./mwlResizable.js\": 40\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 23;\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\tvar LOG_PREFIX = 'Bootstrap calendar:';\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', [\"$scope\", \"$log\", \"$timeout\", \"$attrs\", \"$locale\", \"moment\", \"calendarTitle\", \"calendarHelper\", function($scope, $log, $timeout, $attrs, $locale, moment, calendarTitle, calendarHelper) {\n\n\t var vm = this;\n\n\t vm.events = vm.events || [];\n\n\t vm.changeView = function(view, newDay) {\n\t vm.view = view;\n\t vm.viewDate = newDay;\n\t };\n\n\t vm.dateClicked = function(date) {\n\n\t var rawDate = moment(date).toDate();\n\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\n\t if (vm.onViewChangeClick({calendarDate: rawDate, calendarNextView: nextView[vm.view]}) !== false) {\n\t vm.changeView(nextView[vm.view], rawDate);\n\t }\n\n\t };\n\n\t var previousDate = moment(vm.viewDate);\n\t var previousView = vm.view;\n\n\t function eventIsValid(event) {\n\t if (!event.startsAt) {\n\t $log.warn(LOG_PREFIX, 'Event is missing the startsAt field', event);\n\t } else if (!angular.isDate(event.startsAt)) {\n\t $log.warn(LOG_PREFIX, 'Event startsAt should be a javascript date object. Do `new Date(event.startsAt)` to fix it.', event);\n\t }\n\n\t if (event.endsAt) {\n\t if (!angular.isDate(event.endsAt)) {\n\t $log.warn(LOG_PREFIX, 'Event endsAt should be a javascript date object. Do `new Date(event.endsAt)` to fix it.', event);\n\t }\n\t if (moment(event.startsAt).isAfter(moment(event.endsAt))) {\n\t $log.warn(LOG_PREFIX, 'Event cannot start after it finishes', event);\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function refreshCalendar() {\n\n\t if (calendarTitle[vm.view] && angular.isDefined($attrs.viewTitle)) {\n\t vm.viewTitle = calendarTitle[vm.view](vm.viewDate);\n\t }\n\n\t vm.events = vm.events.filter(eventIsValid).map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, configurable: true, value: index});\n\t return event;\n\t });\n\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then don't update the view as nothing needs to change\n\t var currentDate = moment(vm.viewDate);\n\t var shouldUpdate = true;\n\t if (\n\t previousDate.clone().startOf(vm.view).isSame(currentDate.clone().startOf(vm.view)) &&\n\t !previousDate.isSame(currentDate) &&\n\t vm.view === previousView\n\t ) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = vm.view;\n\n\t if (shouldUpdate) {\n\t // a $timeout is required as $broadcast is synchronous so if a new events array is set the calendar won't update\n\t $timeout(function() {\n\t $scope.$broadcast('calendar.refreshView');\n\t });\n\t }\n\t }\n\n\t calendarHelper.loadTemplates().then(function() {\n\t vm.templatesLoaded = true;\n\n\t var eventsWatched = false;\n\n\t //Refresh the calendar when any of these variables change.\n\t $scope.$watchGroup([\n\t 'vm.viewDate',\n\t 'vm.view',\n\t 'vm.cellIsOpen',\n\t function() {\n\t return moment.locale() + $locale.id; //Auto update the calendar when the locale changes\n\t }\n\t ], function() {\n\t if (!eventsWatched) {\n\t eventsWatched = true;\n\t //need to deep watch events hence why it isn't included in the watch group\n\t $scope.$watch('vm.events', refreshCalendar, true); //this will call refreshCalendar when the watcher starts (i.e. now)\n\t } else {\n\t refreshCalendar();\n\t }\n\t });\n\n\t }).catch(function(err) {\n\t $log.error('Could not load all calendar templates', err);\n\t });\n\n\t }])\n\t .directive('mwlCalendar', function() {\n\n\t return {\n\t template: '
',\n\t restrict: 'E',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=?',\n\t viewDate: '=',\n\t cellIsOpen: '=?',\n\t slideBoxDisabled: '=?',\n\t customTemplateUrls: '=?',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onTimespanClick: '&',\n\t onDateRangeSelect: '&?',\n\t onViewChangeClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@',\n\t dayViewEventChunkSize: '@',\n\t templateScope: '=?'\n\t },\n\t controller: 'MwlCalendarCtrl as vm',\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', [\"$scope\", \"moment\", \"calendarHelper\", \"calendarEventTitle\", function($scope, moment, calendarHelper, calendarEventTitle) {\n\n\t var vm = this;\n\n\t vm.calendarEventTitle = calendarEventTitle;\n\n\t function refreshView() {\n\t vm.dayViewSplit = vm.dayViewSplit || 30;\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t vm.dayViewStart,\n\t vm.dayViewEnd,\n\t vm.dayViewSplit\n\t );\n\n\t var view = calendarHelper.getDayView(\n\t vm.events,\n\t vm.viewDate,\n\t vm.dayViewStart,\n\t vm.dayViewEnd,\n\t vm.dayViewSplit\n\t );\n\n\t vm.allDayEvents = view.allDayEvents;\n\t vm.nonAllDayEvents = view.events;\n\t vm.viewWidth = view.width + 62;\n\n\t }\n\n\t $scope.$on('calendar.refreshView', refreshView);\n\n\t $scope.$watchGroup([\n\t 'vm.dayViewStart',\n\t 'vm.dayViewEnd',\n\t 'vm.dayViewSplit'\n\t ], refreshView);\n\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * vm.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: event.endsAt ? newEnd.toDate() : null\n\t });\n\t };\n\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * vm.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * vm.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * vm.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\n\t }])\n\t .directive('mwlCalendarDay', function() {\n\n\t return {\n\t template: '
',\n\t restrict: 'E',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t viewDate: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onTimespanClick: '=',\n\t onDateRangeSelect: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '=',\n\t dayViewEventChunkSize: '=',\n\t customTemplateUrls: '=?',\n\t cellModifier: '=',\n\t templateScope: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm',\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\tvar calendarUtils = __webpack_require__(27);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', [\"$scope\", \"$attrs\", \"moment\", \"calendarHelper\", function($scope, $attrs, moment, calendarHelper) {\n\t var vm = this;\n\n\t function updateDays() {\n\n\t vm.dayViewSplit = parseInt(vm.dayViewSplit);\n\t var dayStart = (vm.dayViewStart || '00:00').split(':');\n\t var dayEnd = (vm.dayViewEnd || '23:59').split(':');\n\t vm.hourGrid = calendarUtils.getDayViewHourGrid({\n\t viewDate: $attrs.dayWidth ? moment(vm.viewDate).startOf('week').toDate() : moment(vm.viewDate).toDate(),\n\t hourSegments: 60 / vm.dayViewSplit,\n\t dayStart: {\n\t hour: dayStart[0],\n\t minute: dayStart[1]\n\t },\n\t dayEnd: {\n\t hour: dayEnd[0],\n\t minute: dayEnd[1]\n\t }\n\t });\n\n\t vm.hourGrid.forEach(function(hour) {\n\t hour.segments.forEach(function(segment) {\n\t vm.cellModifier({calendarCell: segment});\n\t });\n\t });\n\n\t }\n\n\t var originalLocale = moment.locale();\n\n\t $scope.$on('calendar.refreshView', function() {\n\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\n\t });\n\n\t $scope.$watchGroup([\n\t 'vm.dayViewStart',\n\t 'vm.dayViewEnd',\n\t 'vm.dayViewSplit',\n\t 'vm.viewDate'\n\t ], function() {\n\t updateDays();\n\t });\n\n\t vm.eventDropped = function(event, date) {\n\t var newStart = moment(date);\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: date,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd ? newEnd.toDate() : null\n\t });\n\t };\n\n\t vm.getClickedDate = function(baseDate, minutes, days) {\n\t return moment(baseDate).clone().startOf('hour').add(minutes, 'minutes').add(days || 0, 'days').toDate();\n\t };\n\n\t vm.onDragSelectStart = function(date, dayIndex) {\n\t if (!vm.dateRangeSelect) {\n\t vm.dateRangeSelect = {\n\t active: true,\n\t startDate: date,\n\t endDate: date,\n\t dayIndex: dayIndex\n\t };\n\t }\n\t };\n\n\t vm.onDragSelectMove = function(date) {\n\t if (vm.dateRangeSelect) {\n\t vm.dateRangeSelect.endDate = date;\n\t }\n\t };\n\n\t vm.onDragSelectEnd = function(date) {\n\t vm.dateRangeSelect.endDate = date;\n\t if (vm.dateRangeSelect.endDate > vm.dateRangeSelect.startDate) {\n\t vm.onDateRangeSelect({calendarRangeStartDate: vm.dateRangeSelect.startDate, calendarRangeEndDate: vm.dateRangeSelect.endDate});\n\t }\n\t delete vm.dateRangeSelect;\n\t };\n\n\t }])\n\t .directive('mwlCalendarHourList', function() {\n\n\t return {\n\t restrict: 'E',\n\t template: '
',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t viewDate: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '=',\n\t dayWidth: '=?',\n\t onTimespanClick: '=',\n\t onDateRangeSelect: '=',\n\t onEventTimesChanged: '=',\n\t customTemplateUrls: '=?',\n\t cellModifier: '=',\n\t templateScope: '='\n\t },\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar moment = __webpack_require__(28);\n\tvar WEEKEND_DAY_NUMBERS = [0, 6];\n\tvar DAYS_IN_WEEK = 7;\n\tvar HOURS_IN_DAY = 24;\n\tvar MINUTES_IN_HOUR = 60;\n\tvar getDaySpan = function (event, offset, startOfWeek) {\n\t var span = 1;\n\t if (event.end) {\n\t var begin = moment(event.start).isBefore(startOfWeek) ? startOfWeek : moment(event.start);\n\t span = moment(event.end)\n\t .endOf('day')\n\t .add(1, 'minute')\n\t .diff(begin.startOf('day'), 'days');\n\t if (span > DAYS_IN_WEEK) {\n\t span = DAYS_IN_WEEK;\n\t }\n\t }\n\t var totalLength = offset + span;\n\t if (totalLength > DAYS_IN_WEEK) {\n\t span -= (totalLength - DAYS_IN_WEEK);\n\t }\n\t return span;\n\t};\n\texports.getDayOffset = function (event, startOfWeek) {\n\t var offset = 0;\n\t if (moment(event.start).startOf('day').isAfter(moment(startOfWeek))) {\n\t offset = moment(event.start).startOf('day').diff(startOfWeek, 'days');\n\t }\n\t return offset;\n\t};\n\tvar isEventIsPeriod = function (_a) {\n\t var event = _a.event, periodStart = _a.periodStart, periodEnd = _a.periodEnd;\n\t var eventStart = moment(event.start);\n\t var eventEnd = moment(event.end || event.start);\n\t if (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) {\n\t return true;\n\t }\n\t if (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) {\n\t return true;\n\t }\n\t if (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) {\n\t return true;\n\t }\n\t if (eventStart.isSame(periodStart) || eventStart.isSame(periodEnd)) {\n\t return true;\n\t }\n\t if (eventEnd.isSame(periodStart) || eventEnd.isSame(periodEnd)) {\n\t return true;\n\t }\n\t return false;\n\t};\n\tvar getEventsInPeriod = function (_a) {\n\t var events = _a.events, periodStart = _a.periodStart, periodEnd = _a.periodEnd;\n\t return events.filter(function (event) { return isEventIsPeriod({ event: event, periodStart: periodStart, periodEnd: periodEnd }); });\n\t};\n\tvar getWeekDay = function (_a) {\n\t var date = _a.date;\n\t var today = moment().startOf('day');\n\t return {\n\t date: date,\n\t isPast: date.isBefore(today),\n\t isToday: date.isSame(today),\n\t isFuture: date.isAfter(today),\n\t isWeekend: WEEKEND_DAY_NUMBERS.indexOf(date.day()) > -1\n\t };\n\t};\n\texports.getWeekViewHeader = function (_a) {\n\t var viewDate = _a.viewDate;\n\t var start = moment(viewDate).startOf('week');\n\t var days = [];\n\t for (var i = 0; i < DAYS_IN_WEEK; i++) {\n\t var date = start.clone().add(i, 'days');\n\t days.push(getWeekDay({ date: date }));\n\t }\n\t return days;\n\t};\n\texports.getWeekView = function (_a) {\n\t var events = _a.events, viewDate = _a.viewDate;\n\t var startOfWeek = moment(viewDate).startOf('week');\n\t var endOfWeek = moment(viewDate).endOf('week');\n\t var eventsMapped = getEventsInPeriod({ events: events, periodStart: startOfWeek, periodEnd: endOfWeek }).map(function (event) {\n\t var offset = exports.getDayOffset(event, startOfWeek);\n\t var span = getDaySpan(event, offset, startOfWeek);\n\t return {\n\t event: event,\n\t offset: offset,\n\t span: span,\n\t startsBeforeWeek: moment(event.start).isBefore(startOfWeek),\n\t endsAfterWeek: moment(event.end || event.start).isAfter(endOfWeek)\n\t };\n\t }).sort(function (itemA, itemB) {\n\t var startSecondsDiff = moment(itemA.event.start).diff(moment(itemB.event.start));\n\t if (startSecondsDiff === 0) {\n\t var endA = moment(itemA.event.end || itemA.event.start);\n\t var endB = moment(itemB.event.end || itemB.event.start);\n\t return moment(endB).diff(endA);\n\t }\n\t return startSecondsDiff;\n\t });\n\t var eventRows = [];\n\t var allocatedEvents = [];\n\t eventsMapped.forEach(function (event, index) {\n\t if (allocatedEvents.indexOf(event) === -1) {\n\t allocatedEvents.push(event);\n\t var rowSpan_1 = event.span + event.offset;\n\t var otherRowEvents = eventsMapped.slice(index + 1).filter(function (nextEvent) {\n\t if (allocatedEvents.indexOf(nextEvent) === -1 &&\n\t nextEvent.offset >= rowSpan_1 &&\n\t rowSpan_1 + nextEvent.span <= DAYS_IN_WEEK) {\n\t nextEvent.offset -= rowSpan_1;\n\t rowSpan_1 += nextEvent.span + nextEvent.offset;\n\t allocatedEvents.push(nextEvent);\n\t return true;\n\t }\n\t });\n\t eventRows.push({\n\t row: [\n\t event\n\t ].concat(otherRowEvents)\n\t });\n\t }\n\t });\n\t return eventRows;\n\t};\n\texports.getMonthView = function (_a) {\n\t var events = _a.events, viewDate = _a.viewDate;\n\t var start = moment(viewDate).startOf('month').startOf('week');\n\t var end = moment(viewDate).endOf('month').endOf('week');\n\t var eventsInMonth = getEventsInPeriod({\n\t events: events,\n\t periodStart: start,\n\t periodEnd: end\n\t });\n\t var days = [];\n\t for (var i = 0; i < end.diff(start, 'days') + 1; i++) {\n\t var date = start.clone().add(i, 'days');\n\t var day = getWeekDay({ date: date });\n\t var events_1 = getEventsInPeriod({\n\t events: eventsInMonth,\n\t periodStart: moment(date).startOf('day'),\n\t periodEnd: moment(date).endOf('day')\n\t });\n\t day.inMonth = date.clone().startOf('month').isSame(moment(viewDate).startOf('month'));\n\t day.events = events_1;\n\t day.badgeTotal = events_1.length;\n\t days.push(day);\n\t }\n\t var rows = Math.floor(days.length / 7);\n\t var rowOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t rowOffsets.push(i * 7);\n\t }\n\t return {\n\t rowOffsets: rowOffsets,\n\t days: days\n\t };\n\t};\n\texports.getDayView = function (_a) {\n\t var events = _a.events, viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd, eventWidth = _a.eventWidth, segmentHeight = _a.segmentHeight;\n\t var startOfView = moment(viewDate)\n\t .startOf('day')\n\t .hour(dayStart.hour)\n\t .minute(dayStart.minute);\n\t var endOfView = moment(viewDate)\n\t .endOf('day')\n\t .startOf('minute')\n\t .hour(dayEnd.hour)\n\t .minute(dayEnd.minute);\n\t var previousDayEvents = [];\n\t var dayViewEvents = getEventsInPeriod({\n\t events: events.filter(function (event) { return !event.allDay; }),\n\t periodStart: startOfView,\n\t periodEnd: endOfView\n\t }).sort(function (eventA, eventB) {\n\t return eventA.start.valueOf() - eventB.start.valueOf();\n\t }).map(function (event) {\n\t var eventStart = event.start;\n\t var eventEnd = event.end || eventStart;\n\t var startsBeforeDay = eventStart < startOfView.toDate();\n\t var endsAfterDay = eventEnd > endOfView.toDate();\n\t var hourHeightModifier = (hourSegments * segmentHeight) / MINUTES_IN_HOUR;\n\t var top = 0;\n\t if (eventStart > startOfView.toDate()) {\n\t top += moment(eventStart).diff(startOfView, 'minutes');\n\t }\n\t top *= hourHeightModifier;\n\t var startDate = startsBeforeDay ? startOfView : moment(eventStart);\n\t var endDate = endsAfterDay ? endOfView : moment(eventEnd);\n\t var height = endDate.diff(startDate, 'minutes');\n\t if (!event.end) {\n\t height = segmentHeight;\n\t }\n\t else {\n\t height *= hourHeightModifier;\n\t }\n\t var bottom = top + height;\n\t var overlappingPreviousEvents = previousDayEvents.filter(function (previousEvent) {\n\t var previousEventTop = previousEvent.top;\n\t var previousEventBottom = previousEvent.top + previousEvent.height;\n\t if (top < previousEventTop && previousEventTop < bottom) {\n\t return true;\n\t }\n\t else if (top < previousEventBottom && previousEventBottom < bottom) {\n\t return true;\n\t }\n\t else if (previousEventTop <= top && bottom <= previousEventBottom) {\n\t return true;\n\t }\n\t return false;\n\t });\n\t var dayEvent = {\n\t event: event,\n\t height: height,\n\t width: eventWidth,\n\t top: top,\n\t left: overlappingPreviousEvents.length * eventWidth,\n\t startsBeforeDay: startsBeforeDay,\n\t endsAfterDay: endsAfterDay\n\t };\n\t if (height > 0) {\n\t previousDayEvents.push(dayEvent);\n\t }\n\t return dayEvent;\n\t }).filter(function (dayEvent) { return dayEvent.height > 0; });\n\t var width = Math.max.apply(Math, dayViewEvents.map(function (event) { return event.left + event.width; }));\n\t var allDayEvents = getEventsInPeriod({\n\t events: events.filter(function (event) { return event.allDay; }),\n\t periodStart: startOfView,\n\t periodEnd: endOfView\n\t });\n\t return {\n\t events: dayViewEvents,\n\t width: width,\n\t allDayEvents: allDayEvents\n\t };\n\t};\n\texports.getDayViewHourGrid = function (_a) {\n\t var viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd;\n\t var hours = [];\n\t var startOfView = moment(viewDate).startOf('day').hour(dayStart.hour).minute(dayStart.minute);\n\t var endOfView = moment(viewDate).endOf('day').startOf('minute').hour(dayEnd.hour).minute(dayEnd.minute);\n\t var segmentDuration = MINUTES_IN_HOUR / hourSegments;\n\t var startOfDay = moment(viewDate).startOf('day');\n\t for (var i = 0; i < HOURS_IN_DAY; i++) {\n\t var segments = [];\n\t for (var j = 0; j < hourSegments; j++) {\n\t var date = startOfDay.clone().add(i, 'hours').add(j * segmentDuration, 'minutes');\n\t if (date >= startOfView && date < endOfView) {\n\t segments.push({\n\t date: date,\n\t isStart: j === 0\n\t });\n\t }\n\t }\n\t if (segments.length > 0) {\n\t hours.push({ segments: segments });\n\t }\n\t }\n\t return hours;\n\t};\n\t//# sourceMappingURL=calendarUtils.js.map\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_28__;\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', [\"$scope\", \"moment\", \"calendarHelper\", \"calendarConfig\", \"calendarEventTitle\", function($scope, moment, calendarHelper, calendarConfig, calendarEventTitle) {\n\n\t var vm = this;\n\t vm.calendarConfig = calendarConfig;\n\t vm.calendarEventTitle = calendarEventTitle;\n\t vm.openRowIndex = null;\n\n\t $scope.$on('calendar.refreshView', function() {\n\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\n\t var monthView = calendarHelper.getMonthView(vm.events, vm.viewDate, vm.cellModifier);\n\t vm.view = monthView.days;\n\t vm.monthOffsets = monthView.rowOffsets;\n\n\t //Auto open the calendar to the current day if set\n\t if (vm.cellIsOpen && vm.openRowIndex === null) {\n\t vm.openDayIndex = null;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment(vm.viewDate).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\n\t });\n\n\t vm.dayClicked = function(day, dayClickedFirstRun, $event) {\n\n\t if (!dayClickedFirstRun) {\n\t vm.onTimespanClick({\n\t calendarDate: day.date.toDate(),\n\t calendarCell: day,\n\t $event: $event\n\t });\n\t if ($event && $event.defaultPrevented) {\n\t return;\n\t }\n\t }\n\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t vm.cellIsOpen = false;\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t vm.cellIsOpen = true;\n\t }\n\n\t };\n\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t delete day.backgroundColor;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.backgroundColor = event.color ? event.color.secondary : '';\n\t }\n\t }\n\t });\n\n\t };\n\n\t vm.handleEventDrop = function(event, newDayDate, draggedFromDate) {\n\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month())\n\t .year(moment(newDayDate).year());\n\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd ? newEnd.toDate() : null,\n\t calendarDraggedFromDate: draggedFromDate\n\t });\n\t };\n\n\t vm.getWeekNumberLabel = function(day) {\n\t var weekNumber = day.date.clone().add(1, 'day').isoWeek();\n\t if (typeof calendarConfig.i18nStrings.weekNumber === 'function') {\n\t return calendarConfig.i18nStrings.weekNumber({weekNumber: weekNumber});\n\t } else {\n\t return calendarConfig.i18nStrings.weekNumber.replace('{week}', weekNumber);\n\t }\n\t };\n\n\t vm.onDragSelectStart = function(day) {\n\t if (!vm.dateRangeSelect) {\n\t vm.dateRangeSelect = {\n\t startDate: day.date,\n\t endDate: day.date\n\t };\n\t }\n\t };\n\n\t vm.onDragSelectMove = function(day) {\n\t if (vm.dateRangeSelect) {\n\t vm.dateRangeSelect.endDate = day.date;\n\t }\n\t };\n\n\t vm.onDragSelectEnd = function(day) {\n\t vm.dateRangeSelect.endDate = day.date;\n\t if (vm.dateRangeSelect.endDate > vm.dateRangeSelect.startDate) {\n\t vm.onDateRangeSelect({\n\t calendarRangeStartDate: vm.dateRangeSelect.startDate.clone().startOf('day').toDate(),\n\t calendarRangeEndDate: vm.dateRangeSelect.endDate.clone().endOf('day').toDate()\n\t });\n\t }\n\t delete vm.dateRangeSelect;\n\t };\n\n\t }])\n\t .directive('mwlCalendarMonth', function() {\n\n\t return {\n\t template: '
',\n\t restrict: 'E',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t viewDate: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onDateRangeSelect: '=',\n\t cellIsOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '=',\n\t slideBoxDisabled: '=',\n\t customTemplateUrls: '=?',\n\t templateScope: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t },\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', [\"$scope\", \"$timeout\", \"calendarConfig\", \"calendarEventTitle\", function($scope, $timeout, calendarConfig, calendarEventTitle) {\n\n\t var vm = this;\n\t vm.calendarConfig = calendarConfig;\n\t vm.calendarEventTitle = calendarEventTitle;\n\n\t vm.isCollapsed = true;\n\t $scope.$watch('vm.isOpen', function(isOpen) {\n\t //events must be populated first to set the element height before animation will work\n\t $timeout(function() {\n\t vm.isCollapsed = !isOpen;\n\t });\n\t });\n\n\t }])\n\t .directive('mwlCalendarSlideBox', function() {\n\n\t return {\n\t restrict: 'E',\n\t template: '
',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t cell: '=',\n\t customTemplateUrls: '=?',\n\t templateScope: '='\n\t },\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', [\"$scope\", \"moment\", \"calendarHelper\", \"calendarConfig\", \"calendarEventTitle\", function($scope, moment, calendarHelper, calendarConfig, calendarEventTitle) {\n\n\t var vm = this;\n\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.calendarEventTitle = calendarEventTitle;\n\n\t $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewSplit = vm.dayViewSplit || 30;\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t vm.dayViewStart,\n\t vm.dayViewEnd,\n\t vm.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t vm.events,\n\t vm.viewDate,\n\t vm.dayViewStart,\n\t vm.dayViewEnd,\n\t vm.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView(vm.events, vm.viewDate);\n\t }\n\t });\n\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * vm.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\n\t delete event.tempStartsAt;\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: event.endsAt ? newEnd.toDate() : null\n\t });\n\t };\n\n\t vm.eventDropped = function(event, date) {\n\t var daysDiff = moment(date).diff(moment(event.startsAt), 'days');\n\t vm.weekDragged(event, daysDiff);\n\t };\n\n\t vm.weekResized = function(event, edge, daysDiff) {\n\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\n\t };\n\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * vm.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\n\t }])\n\t .directive('mwlCalendarWeek', function() {\n\n\t return {\n\t template: '
',\n\t restrict: 'E',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t viewDate: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '=',\n\t dayViewEventChunkSize: '=',\n\t onTimespanClick: '=',\n\t onDateRangeSelect: '=',\n\t customTemplateUrls: '=?',\n\t cellModifier: '=',\n\t templateScope: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t },\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\n\t var vm = this;\n\t vm.openMonthIndex = null;\n\n\t $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView(vm.events, vm.viewDate, vm.cellModifier);\n\n\t //Auto open the calendar to the current day if set\n\t if (vm.cellIsOpen && vm.openMonthIndex === null) {\n\t vm.openMonthIndex = null;\n\t vm.view.forEach(function(month) {\n\t if (moment(vm.viewDate).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\n\t });\n\n\t vm.monthClicked = function(month, monthClickedFirstRun, $event) {\n\n\t if (!monthClickedFirstRun) {\n\t vm.onTimespanClick({\n\t calendarDate: month.date.toDate(),\n\t calendarCell: month,\n\t $event: $event\n\t });\n\t if ($event && $event.defaultPrevented) {\n\t return;\n\t }\n\t }\n\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t vm.cellIsOpen = false;\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t vm.cellIsOpen = true;\n\t }\n\n\t };\n\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt)\n\t .month(moment(newMonthDate).month())\n\t .year(moment(newMonthDate).year());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n\t vm.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd ? newEnd.toDate() : null\n\t });\n\t };\n\n\t }])\n\t .directive('mwlCalendarYear', function() {\n\n\t return {\n\t template: '
',\n\t restrict: 'E',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t viewDate: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t cellIsOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '=',\n\t slideBoxDisabled: '=',\n\t customTemplateUrls: '=?',\n\t templateScope: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t },\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', [\"$scope\", \"$attrs\", \"$element\", function($scope, $attrs, $element) {\n\n\t $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\n\t }])\n\t .directive('mwlCollapseFallback', [\"$injector\", function($injector) {\n\n\t if ($injector.has('uibCollapseDirective')) {\n\t return {};\n\t }\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\n\t }]);\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', [\"$element\", \"$attrs\", \"$scope\", \"moment\", function($element, $attrs, $scope, moment) {\n\n\t var vm = this;\n\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t vm.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t vm.date = moment(vm.date).add(1, vm.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t vm.date = moment(vm.date).subtract(1, vm.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\n\t $element.bind('click', onClick);\n\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\n\t }])\n\t .directive('mwlDateModifier', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl as vm',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t },\n\t bindToController: true\n\t };\n\n\t });\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDragSelectCtrl', [\"$scope\", \"$element\", \"$parse\", \"$attrs\", function($scope, $element, $parse, $attrs) {\n\n\t function handleMouseEvent(callbackName) {\n\t return function(event) {\n\t if (callbackName) {\n\t $parse(callbackName)($scope);\n\t $scope.$apply();\n\t }\n\t event.preventDefault();\n\t };\n\t }\n\n\t var onMouseDown = handleMouseEvent($attrs.onDragSelectStart);\n\t var onMouseMove = handleMouseEvent($attrs.onDragSelectMove);\n\t var onMouseUp = handleMouseEvent($attrs.onDragSelectEnd);\n\n\t function enableMouseListeners() {\n\t $element.on('mousedown', onMouseDown);\n\t $element.on('mousemove', onMouseMove);\n\t $element.on('mouseup', onMouseUp);\n\t }\n\n\t function disableMouseListeners() {\n\t $element.off('mousedown', onMouseDown);\n\t $element.off('mousemove', onMouseMove);\n\t $element.off('mouseup', onMouseUp);\n\t }\n\n\t $scope.$watch($attrs.mwlDragSelect, function(isEnabled) {\n\t if (isEnabled) {\n\t enableMouseListeners();\n\t } else {\n\t disableMouseListeners();\n\t }\n\t });\n\n\t $scope.$on('$destroy', function() {\n\t disableMouseListeners();\n\t });\n\n\t }])\n\t .directive('mwlDragSelect', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDragSelectCtrl'\n\t };\n\n\t });\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', [\"$element\", \"$scope\", \"$window\", \"$parse\", \"$attrs\", \"$timeout\", \"interact\", function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\n\t if (!interact) {\n\t return;\n\t }\n\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue)\n\t .css('transform', transformValue);\n\t }\n\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t },\n\t onmove: function(event) {\n\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\n\t case 'y':\n\t x = 0;\n\t break;\n\n\t default:\n\t }\n\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 50)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, {x: x, y: y});\n\t $scope.$apply();\n\t }\n\n\t },\n\t onend: function(event) {\n\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, {x: x, y: y});\n\t $scope.$apply();\n\t }\n\n\t $timeout(function() {\n\t translateElement(elm, '')\n\t .css('z-index', 'auto')\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t });\n\n\t }\n\t });\n\n\t $scope.$watch($attrs.mwlDraggable, function(enabled) {\n\t interact($element[0]).draggable({\n\t enabled: enabled\n\t });\n\t });\n\n\t $scope.$on('$destroy', function() {\n\t interact($element[0]).unset();\n\t });\n\n\t }])\n\t .directive('mwlDraggable', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\n\t });\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\n\t if (!interact) {\n\t return;\n\t }\n\n\t var DROP_ACTIVE_CLASS = $attrs.dropActiveClass || 'drop-active';\n\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass(DROP_ACTIVE_CLASS);\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass(DROP_ACTIVE_CLASS);\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass(DROP_ACTIVE_CLASS);\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\n\t $scope.$on('$destroy', function() {\n\t interact($element[0]).unset();\n\t });\n\n\t }])\n\t .directive('mwlDroppable', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\n\t });\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDynamicDirectiveTemplateCtrl', [\"$compile\", \"$scope\", \"$attrs\", \"$element\", \"$templateCache\", \"$log\", \"calendarConfig\", function($compile, $scope, $attrs, $element, $templateCache, $log, calendarConfig) {\n\n\t $scope.$watch($attrs.overrides, function(overrides) {\n\n\t var templateName = calendarConfig.templates[$attrs.name];\n\t if (\n\t overrides &&\n\t angular.isObject(overrides) &&\n\t overrides[$attrs.name]\n\t ) {\n\t if ($templateCache.get(overrides[$attrs.name])) {\n\t templateName = overrides[$attrs.name];\n\t } else {\n\t $log.warn('Bootstrap Calendar', 'The custom template for ' + overrides[$attrs.name] +\n\t ' was not found in the template cache. Please ensure it is pre-loaded via a script tag ' +\n\t ' or ' +\n\t 'via a tool such as https://www.npmjs.com/package/gulp-angular-templatecache');\n\t }\n\t }\n\t var template = $templateCache.get(templateName);\n\t $element.html(template);\n\t $compile($element.contents())($scope);\n\n\t });\n\n\t }])\n\t .directive('mwlDynamicDirectiveTemplate', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDynamicDirectiveTemplateCtrl'\n\t };\n\n\t });\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"$window\", function($element, $scope, $parse, $attrs, $window) {\n\n\t function setDimensions() {\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t $scope.$applyAsync();\n\t }\n\n\t var win = angular.element($window);\n\n\t win.bind('resize', setDimensions);\n\n\t setDimensions();\n\n\t $scope.$on('$destroy', function() {\n\t win.unbind('resize', setDimensions);\n\t });\n\n\t }])\n\t .directive('mwlElementDimensions', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\n\t });\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"$timeout\", \"interact\", function($element, $scope, $parse, $attrs, $timeout, interact) {\n\n\t if (!interact) {\n\t return;\n\t }\n\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\n\t function getUnitsResized(edge, elm) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t return unitsResized;\n\t }\n\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\n\t },\n\t onmove: function(event) {\n\n\t if (event.rect.width > 0 && event.rect.height > 0) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\n\t elm.data('x', x);\n\t elm.data('y', y);\n\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm));\n\t $scope.$apply();\n\t }\n\n\t }\n\n\t },\n\t onend: function(event) {\n\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm);\n\n\t $timeout(function() {\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: '',\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t });\n\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\n\t }\n\t });\n\n\t $scope.$watch($attrs.mwlResizable, function(enabled) {\n\t interact($element[0]).resizable({\n\t enabled: enabled\n\t });\n\t });\n\n\t $scope.$on('$destroy', function() {\n\t interact($element[0]).unset();\n\t });\n\n\t }])\n\t .directive('mwlResizable', function() {\n\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\n\t });\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 42,\n\t\t\"./calendarLimitTo.js\": 43,\n\t\t\"./calendarTruncateEventTitle.js\": 44,\n\t\t\"./calendarTrustAsHtml.js\": 45\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 41;\n\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', [\"calendarHelper\", \"calendarConfig\", function(calendarHelper, calendarConfig) {\n\n\t function calendarDate(date, format, getFromConfig) {\n\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\n\t return calendarHelper.formatDate(date, format);\n\n\t }\n\n\t // This is stateful because the locale can change as well\n\t // as calendarConfig.dateFormats which would change the value outside of this filter\n\t calendarDate.$stateful = true;\n\n\t return calendarDate;\n\n\t }]);\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', [\"limitToFilter\", function(limitToFilter) {\n\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\n\t }]);\n\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\n\t });\n\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTrustAsHtml', [\"$sce\", function($sce) {\n\n\t return function(text) {\n\t return $sce.trustAsHtml(text);\n\t };\n\n\t }]);\n\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 47,\n\t\t\"./calendarEventTitle.js\": 48,\n\t\t\"./calendarHelper.js\": 49,\n\t\t\"./calendarTitle.js\": 50,\n\t\t\"./interact.js\": 51,\n\t\t\"./moment.js\": 53\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 46;\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .constant('calendarConfig', {\n\t allDateFormats: {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t },\n\t get dateFormats() {\n\t return this.allDateFormats[this.dateFormatter].date;\n\t },\n\t get titleFormats() {\n\t return this.allDateFormats[this.dateFormatter].title;\n\t },\n\t dateFormatter: 'angular',\n\t showTimesOnWeekView: false,\n\t displayAllMonthEvents: false,\n\t i18nStrings: {\n\t weekNumber: 'Week {week}'\n\t },\n\t templates: {},\n\t colorTypes: {\n\t info: {\n\t primary: '#1e90ff',\n\t secondary: '#d1e8ff'\n\t },\n\t important: {\n\t primary: '#ad2121',\n\t secondary: '#fae3e3'\n\t },\n\t warning: {\n\t primary: '#e3bc08',\n\t secondary: '#fdf1ba'\n\t },\n\t inverse: {\n\t primary: '#1b1b1b',\n\t secondary: '#c1c1c1'\n\t },\n\t special: {\n\t primary: '#800080',\n\t secondary: '#ffe6ff'\n\t },\n\t success: {\n\t primary: '#006400',\n\t secondary: '#caffca'\n\t }\n\t }\n\t });\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarEventTitle', [\"calendarDateFilter\", \"calendarTruncateEventTitleFilter\", function(calendarDateFilter, calendarTruncateEventTitleFilter) {\n\n\t function yearView(event) {\n\t return event.title + ' (' + calendarDateFilter(event.startsAt, 'datetime', true) + ')';\n\t }\n\n\t function monthView(event) {\n\t return event.title + ' (' + calendarDateFilter(event.startsAt, 'time', true) + ')';\n\t }\n\n\t function monthViewTooltip(event) {\n\t return calendarDateFilter(event.startsAt, 'time', true) + ' - ' + event.title;\n\t }\n\n\t function weekView(event) {\n\t return event.title;\n\t }\n\n\t function weekViewTooltip(event) {\n\t return event.title;\n\t }\n\n\t function dayView(event) {\n\t return event.allDay ? event.title : calendarTruncateEventTitleFilter(event.title, 20, event.height);\n\t }\n\n\t return {\n\t yearView: yearView,\n\t monthView: monthView,\n\t monthViewTooltip: monthViewTooltip,\n\t weekView: weekView,\n\t weekViewTooltip: weekViewTooltip,\n\t dayView: dayView\n\t };\n\n\t }]);\n\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\tvar calendarUtils = __webpack_require__(27);\n\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', [\"$q\", \"$templateRequest\", \"dateFilter\", \"moment\", \"calendarConfig\", function($q, $templateRequest, dateFilter, moment, calendarConfig) {\n\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t } else {\n\t throw new Error('Unknown date formatter: ' + calendarConfig.dateFormatter);\n\t }\n\t }\n\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\n\t function getRecurringEventPeriod(eventPeriod, recursOn, containerPeriodStart) {\n\n\t var eventStart = moment(eventPeriod.start);\n\t var eventEnd = moment(eventPeriod.end);\n\t var periodStart = moment(containerPeriodStart);\n\n\t if (recursOn) {\n\n\t switch (recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\n\t default:\n\t throw new Error('Invalid value (' + recursOn + ') given for recurs on. Can only be year or month.');\n\t }\n\n\t eventEnd = adjustEndDateFromStartDiff(eventPeriod.start, eventStart, eventEnd);\n\n\t }\n\n\t return {start: eventStart, end: eventEnd};\n\n\t }\n\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\n\t var eventPeriod = getRecurringEventPeriod({start: event.startsAt, end: event.endsAt || event.startsAt}, event.recursOn, periodStart);\n\t var eventStart = eventPeriod.start;\n\t var eventEnd = eventPeriod.end;\n\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\n\t }\n\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\n\t function getYearView(events, viewDate, cellModifier) {\n\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(viewDate, 'year', events);\n\t var month = moment(viewDate).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\n\t return view;\n\n\t }\n\n\t function getMonthView(events, viewDate, cellModifier) {\n\n\t // hack required to work with the calendar-utils api\n\t events.forEach(function(event) {\n\t event.start = event.startsAt;\n\t event.end = event.endsAt;\n\t });\n\n\t var view = calendarUtils.getMonthView({\n\t events: events,\n\t viewDate: viewDate\n\t });\n\n\t view.days = view.days.map(function(day) {\n\t day.label = day.date.date();\n\t day.badgeTotal = getBadgeTotal(day.events);\n\t if (!calendarConfig.displayAllMonthEvents && !day.inMonth) {\n\t day.events = [];\n\t }\n\t cellModifier({calendarCell: day});\n\t return day;\n\t });\n\n\t // remove hack\n\t events.forEach(function(event) {\n\t delete event.start;\n\t delete event.end;\n\t });\n\n\t return view;\n\n\t }\n\n\t function getWeekView(events, viewDate) {\n\n\t var days = calendarUtils.getWeekViewHeader({\n\t viewDate: viewDate\n\t }).map(function(day) {\n\t day.weekDayLabel = formatDate(day.date, calendarConfig.dateFormats.weekDay);\n\t day.dayLabel = formatDate(day.date, calendarConfig.dateFormats.day);\n\t return day;\n\t });\n\n\t var startOfWeek = moment(viewDate).startOf('week');\n\t var endOfWeek = moment(viewDate).endOf('week');\n\n\t var eventRows = calendarUtils.getWeekView({\n\t viewDate: viewDate,\n\t events: filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\n\t var eventPeriod = getRecurringEventPeriod({\n\t start: moment(event.startsAt).startOf('day'),\n\t end: moment(event.endsAt || event.startsAt).startOf('day').add(1, 'second')\n\t }, event.recursOn, weekViewStart);\n\n\t eventPeriod.originalEvent = event;\n\n\t return eventPeriod;\n\n\t })\n\t }).map(function(eventRow) {\n\n\t eventRow.row = eventRow.row.map(function(rowEvent) {\n\t rowEvent.event = rowEvent.event.originalEvent;\n\t return rowEvent;\n\t });\n\n\t return eventRow;\n\n\t });\n\n\t return {days: days, eventRows: eventRows};\n\n\t }\n\n\t function getDayView(events, viewDate, dayViewStart, dayViewEnd, dayViewSplit) {\n\n\t var dayStart = (dayViewStart || '00:00').split(':');\n\t var dayEnd = (dayViewEnd || '23:59').split(':');\n\n\t var view = calendarUtils.getDayView({\n\t events: events.map(function(event) { // hack required to work with event API\n\t event.start = event.startsAt;\n\t event.end = event.endsAt;\n\t return event;\n\t }),\n\t viewDate: viewDate,\n\t hourSegments: 60 / dayViewSplit,\n\t dayStart: {\n\t hour: dayStart[0],\n\t minute: dayStart[1]\n\t },\n\t dayEnd: {\n\t hour: dayEnd[0],\n\t minute: dayEnd[1]\n\t },\n\t eventWidth: 150,\n\t segmentHeight: 30\n\t });\n\n\t // remove hack to work with new event API\n\t events.forEach(function(event) {\n\t delete event.start;\n\t delete event.end;\n\t });\n\n\t return view;\n\n\t }\n\n\t function getWeekViewWithTimes(events, viewDate, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, viewDate);\n\t var newEvents = [];\n\t var flattenedEvents = [];\n\t weekView.eventRows.forEach(function(row) {\n\t row.row.forEach(function(eventRow) {\n\t flattenedEvents.push(eventRow.event);\n\t });\n\t });\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = flattenedEvents.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t ).events;\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.eventRows = [{\n\t row: newEvents.map(function(dayEvent) {\n\t var event = dayEvent.event;\n\t return {\n\t event: event,\n\t top: dayEvent.top,\n\t offset: calendarUtils.getDayOffset(\n\t {start: event.startsAt, end: event.endsAt},\n\t moment(viewDate).startOf('week')\n\t )\n\t };\n\t })\n\t }];\n\t return weekView;\n\t }\n\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:59', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'minutes') / 60) * hourHeight) + 3;\n\t }\n\n\t function loadTemplates() {\n\n\t var templatePromises = Object.keys(calendarConfig.templates).map(function(key) {\n\t var templateUrl = calendarConfig.templates[key];\n\t return $templateRequest(templateUrl);\n\t });\n\n\t return $q.all(templatePromises);\n\n\t }\n\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t loadTemplates: loadTemplates,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\n\t }]);\n\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', [\"moment\", \"calendarConfig\", \"calendarHelper\", function(moment, calendarConfig, calendarHelper) {\n\n\t function day(viewDate) {\n\t return calendarHelper.formatDate(viewDate, calendarConfig.titleFormats.day);\n\t }\n\n\t function week(viewDate) {\n\t return calendarConfig.titleFormats.week\n\t .replace('{week}', moment(viewDate).isoWeek())\n\t .replace('{year}', moment(viewDate).startOf('week').format('YYYY'));\n\t }\n\n\t function month(viewDate) {\n\t return calendarHelper.formatDate(viewDate, calendarConfig.titleFormats.month);\n\t }\n\n\t function year(viewDate) {\n\t return calendarHelper.formatDate(viewDate, calendarConfig.titleFormats.year);\n\t }\n\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\n\t }]);\n\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(52);\n\t} catch (e) {\n\t /* istanbul ignore next */\n\t interact = null;\n\t}\n\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 52 */\n/***/ function(module, exports) {\n\n\tif(typeof __WEBPACK_EXTERNAL_MODULE_52__ === 'undefined') {var e = new Error(\"Cannot find module \\\"undefined\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_52__;\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar angular = __webpack_require__(12);\n\tvar moment = __webpack_require__(28);\n\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ }\n/******/ ])\n});\n;\n/*\n * angular-ui-bootstrap\n * http://angular-ui.github.io/bootstrap/\n\n * Version: 2.1.3 - 2016-08-25\n * License: MIT\n */angular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\", \"ui.bootstrap.collapse\",\"ui.bootstrap.tabindex\",\"ui.bootstrap.accordion\",\"ui.bootstrap.alert\",\"ui.bootstrap.buttons\",\"ui.bootstrap.carousel\",\"ui.bootstrap.dateparser\",\"ui.bootstrap.isClass\",\"ui.bootstrap.datepicker\",\"ui.bootstrap.position\",\"ui.bootstrap.datepickerPopup\",\"ui.bootstrap.debounce\",\"ui.bootstrap.dropdown\",\"ui.bootstrap.stackedMap\",\"ui.bootstrap.modal\",\"ui.bootstrap.paging\",\"ui.bootstrap.pager\",\"ui.bootstrap.pagination\",\"ui.bootstrap.tooltip\",\"ui.bootstrap.popover\",\"ui.bootstrap.progressbar\",\"ui.bootstrap.rating\",\"ui.bootstrap.tabs\",\"ui.bootstrap.timepicker\",\"ui.bootstrap.typeahead\"]);\nangular.module(\"ui.bootstrap.tpls\", [\"uib/template/accordion/accordion-group.html\",\"uib/template/accordion/accordion.html\",\"uib/template/alert/alert.html\",\"uib/template/carousel/carousel.html\",\"uib/template/carousel/slide.html\",\"uib/template/datepicker/datepicker.html\",\"uib/template/datepicker/day.html\",\"uib/template/datepicker/month.html\",\"uib/template/datepicker/year.html\",\"uib/template/datepickerPopup/popup.html\",\"uib/template/modal/window.html\",\"uib/template/pager/pager.html\",\"uib/template/pagination/pagination.html\",\"uib/template/tooltip/tooltip-html-popup.html\",\"uib/template/tooltip/tooltip-popup.html\",\"uib/template/tooltip/tooltip-template-popup.html\",\"uib/template/popover/popover-html.html\",\"uib/template/popover/popover-template.html\",\"uib/template/popover/popover.html\",\"uib/template/progressbar/bar.html\",\"uib/template/progressbar/progress.html\",\"uib/template/progressbar/progressbar.html\",\"uib/template/rating/rating.html\",\"uib/template/tabs/tab.html\",\"uib/template/tabs/tabset.html\",\"uib/template/timepicker/timepicker.html\",\"uib/template/typeahead/typeahead-match.html\",\"uib/template/typeahead/typeahead-popup.html\"]);\nangular.module('ui.bootstrap.collapse', [])\n\n .directive('uibCollapse', ['$animate', '$q', '$parse', '$injector', function($animate, $q, $parse, $injector) {\n var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;\n return {\n link: function(scope, element, attrs) {\n var expandingExpr = $parse(attrs.expanding),\n expandedExpr = $parse(attrs.expanded),\n collapsingExpr = $parse(attrs.collapsing),\n collapsedExpr = $parse(attrs.collapsed),\n horizontal = false,\n css = {},\n cssTo = {};\n\n init();\n\n function init() {\n horizontal = !!('horizontal' in attrs);\n if (horizontal) {\n css = {\n width: ''\n };\n cssTo = {width: '0'};\n } else {\n css = {\n height: ''\n };\n cssTo = {height: '0'};\n }\n if (!scope.$eval(attrs.uibCollapse)) {\n element.addClass('in')\n .addClass('collapse')\n .attr('aria-expanded', true)\n .attr('aria-hidden', false)\n .css(css);\n }\n }\n\n function getScrollFromElement(element) {\n if (horizontal) {\n return {width: element.scrollWidth + 'px'};\n }\n return {height: element.scrollHeight + 'px'};\n }\n\n function expand() {\n if (element.hasClass('collapse') && element.hasClass('in')) {\n return;\n }\n\n $q.resolve(expandingExpr(scope))\n .then(function() {\n element.removeClass('collapse')\n .addClass('collapsing')\n .attr('aria-expanded', true)\n .attr('aria-hidden', false);\n\n if ($animateCss) {\n $animateCss(element, {\n addClass: 'in',\n easing: 'ease',\n css: {\n overflow: 'hidden'\n },\n to: getScrollFromElement(element[0])\n }).start()['finally'](expandDone);\n } else {\n $animate.addClass(element, 'in', {\n css: {\n overflow: 'hidden'\n },\n to: getScrollFromElement(element[0])\n }).then(expandDone);\n }\n });\n }\n\n function expandDone() {\n element.removeClass('collapsing')\n .addClass('collapse')\n .css(css);\n expandedExpr(scope);\n }\n\n function collapse() {\n if (!element.hasClass('collapse') && !element.hasClass('in')) {\n return collapseDone();\n }\n\n $q.resolve(collapsingExpr(scope))\n .then(function() {\n element\n // IMPORTANT: The width must be set before adding \"collapsing\" class.\n // Otherwise, the browser attempts to animate from width 0 (in\n // collapsing class) to the given width here.\n .css(getScrollFromElement(element[0]))\n // initially all panel collapse have the collapse class, this removal\n // prevents the animation from jumping to collapsed state\n .removeClass('collapse')\n .addClass('collapsing')\n .attr('aria-expanded', false)\n .attr('aria-hidden', true);\n\n if ($animateCss) {\n $animateCss(element, {\n removeClass: 'in',\n to: cssTo\n }).start()['finally'](collapseDone);\n } else {\n $animate.removeClass(element, 'in', {\n to: cssTo\n }).then(collapseDone);\n }\n });\n }\n\n function collapseDone() {\n element.css(cssTo); // Required so that collapse works when animation is disabled\n element.removeClass('collapsing')\n .addClass('collapse');\n collapsedExpr(scope);\n }\n\n scope.$watch(attrs.uibCollapse, function(shouldCollapse) {\n if (shouldCollapse) {\n collapse();\n } else {\n expand();\n }\n });\n }\n };\n }]);\n\nangular.module('ui.bootstrap.tabindex', [])\n\n.directive('uibTabindexToggle', function() {\n return {\n restrict: 'A',\n link: function(scope, elem, attrs) {\n attrs.$observe('disabled', function(disabled) {\n attrs.$set('tabindex', disabled ? -1 : null);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap.tabindex'])\n\n.constant('uibAccordionConfig', {\n closeOthers: true\n})\n\n.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {\n // This array keeps track of the accordion groups\n this.groups = [];\n\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\n this.closeOthers = function(openGroup) {\n var closeOthers = angular.isDefined($attrs.closeOthers) ?\n $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;\n if (closeOthers) {\n angular.forEach(this.groups, function(group) {\n if (group !== openGroup) {\n group.isOpen = false;\n }\n });\n }\n };\n\n // This is called from the accordion-group directive to add itself to the accordion\n this.addGroup = function(groupScope) {\n var that = this;\n this.groups.push(groupScope);\n\n groupScope.$on('$destroy', function(event) {\n that.removeGroup(groupScope);\n });\n };\n\n // This is called from the accordion-group directive when to remove itself\n this.removeGroup = function(group) {\n var index = this.groups.indexOf(group);\n if (index !== -1) {\n this.groups.splice(index, 1);\n }\n };\n}])\n\n// The accordion directive simply sets up the directive controller\n// and adds an accordion CSS class to itself element.\n.directive('uibAccordion', function() {\n return {\n controller: 'UibAccordionController',\n controllerAs: 'accordion',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/accordion/accordion.html';\n }\n };\n})\n\n// The accordion-group directive indicates a block of html that will expand and collapse in an accordion\n.directive('uibAccordionGroup', function() {\n return {\n require: '^uibAccordion', // We need this directive to be inside an accordion\n transclude: true, // It transcludes the contents of the directive into the template\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';\n },\n scope: {\n heading: '@', // Interpolate the heading attribute onto this scope\n panelClass: '@?', // Ditto with panelClass\n isOpen: '=?',\n isDisabled: '=?'\n },\n controller: function() {\n this.setHeading = function(element) {\n this.heading = element;\n };\n },\n link: function(scope, element, attrs, accordionCtrl) {\n element.addClass('panel');\n accordionCtrl.addGroup(scope);\n\n scope.openClass = attrs.openClass || 'panel-open';\n scope.panelClass = attrs.panelClass || 'panel-default';\n scope.$watch('isOpen', function(value) {\n element.toggleClass(scope.openClass, !!value);\n if (value) {\n accordionCtrl.closeOthers(scope);\n }\n });\n\n scope.toggleOpen = function($event) {\n if (!scope.isDisabled) {\n if (!$event || $event.which === 32) {\n scope.isOpen = !scope.isOpen;\n }\n }\n };\n\n var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n scope.headingId = id + '-tab';\n scope.panelId = id + '-panel';\n }\n };\n})\n\n// Use accordion-heading below an accordion-group to provide a heading containing HTML\n.directive('uibAccordionHeading', function() {\n return {\n transclude: true, // Grab the contents to be used as the heading\n template: '', // In effect remove this element!\n replace: true,\n require: '^uibAccordionGroup',\n link: function(scope, element, attrs, accordionGroupCtrl, transclude) {\n // Pass the heading to the accordion-group controller\n // so that it can be transcluded into the right place in the template\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\n accordionGroupCtrl.setHeading(transclude(scope, angular.noop));\n }\n };\n})\n\n// Use in the accordion-group template to indicate where you want the heading to be transcluded\n// You must provide the property on the accordion-group controller that will hold the transcluded element\n.directive('uibAccordionTransclude', function() {\n return {\n require: '^uibAccordionGroup',\n link: function(scope, element, attrs, controller) {\n scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {\n if (heading) {\n var elem = angular.element(element[0].querySelector(getHeaderSelectors()));\n elem.html('');\n elem.append(heading);\n }\n });\n }\n };\n\n function getHeaderSelectors() {\n return 'uib-accordion-header,' +\n 'data-uib-accordion-header,' +\n 'x-uib-accordion-header,' +\n 'uib\\\\:accordion-header,' +\n '[uib-accordion-header],' +\n '[data-uib-accordion-header],' +\n '[x-uib-accordion-header]';\n }\n});\n\nangular.module('ui.bootstrap.alert', [])\n\n.controller('UibAlertController', ['$scope', '$element', '$attrs', '$interpolate', '$timeout', function($scope, $element, $attrs, $interpolate, $timeout) {\n $scope.closeable = !!$attrs.close;\n $element.addClass('alert');\n $attrs.$set('role', 'alert');\n if ($scope.closeable) {\n $element.addClass('alert-dismissible');\n }\n\n var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?\n $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;\n\n if (dismissOnTimeout) {\n $timeout(function() {\n $scope.close();\n }, parseInt(dismissOnTimeout, 10));\n }\n}])\n\n.directive('uibAlert', function() {\n return {\n controller: 'UibAlertController',\n controllerAs: 'alert',\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/alert/alert.html';\n },\n transclude: true,\n scope: {\n close: '&'\n }\n };\n});\n\nangular.module('ui.bootstrap.buttons', [])\n\n.constant('uibButtonConfig', {\n activeClass: 'active',\n toggleEvent: 'click'\n})\n\n.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {\n this.activeClass = buttonConfig.activeClass || 'active';\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\n}])\n\n.directive('uibBtnRadio', ['$parse', function($parse) {\n return {\n require: ['uibBtnRadio', 'ngModel'],\n controller: 'UibButtonsController',\n controllerAs: 'buttons',\n link: function(scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n var uncheckableExpr = $parse(attrs.uibUncheckable);\n\n element.find('input').css({display: 'none'});\n\n //model -> UI\n ngModelCtrl.$render = function() {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));\n };\n\n //ui->model\n element.on(buttonsCtrl.toggleEvent, function() {\n if (attrs.disabled) {\n return;\n }\n\n var isActive = element.hasClass(buttonsCtrl.activeClass);\n\n if (!isActive || angular.isDefined(attrs.uncheckable)) {\n scope.$apply(function() {\n ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));\n ngModelCtrl.$render();\n });\n }\n });\n\n if (attrs.uibUncheckable) {\n scope.$watch(uncheckableExpr, function(uncheckable) {\n attrs.$set('uncheckable', uncheckable ? '' : undefined);\n });\n }\n }\n };\n}])\n\n.directive('uibBtnCheckbox', function() {\n return {\n require: ['uibBtnCheckbox', 'ngModel'],\n controller: 'UibButtonsController',\n controllerAs: 'button',\n link: function(scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n element.find('input').css({display: 'none'});\n\n function getTrueValue() {\n return getCheckboxValue(attrs.btnCheckboxTrue, true);\n }\n\n function getFalseValue() {\n return getCheckboxValue(attrs.btnCheckboxFalse, false);\n }\n\n function getCheckboxValue(attribute, defaultValue) {\n return angular.isDefined(attribute) ? scope.$eval(attribute) : defaultValue;\n }\n\n //model -> UI\n ngModelCtrl.$render = function() {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));\n };\n\n //ui->model\n element.on(buttonsCtrl.toggleEvent, function() {\n if (attrs.disabled) {\n return;\n }\n\n scope.$apply(function() {\n ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());\n ngModelCtrl.$render();\n });\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.carousel', [])\n\n.controller('UibCarouselController', ['$scope', '$element', '$interval', '$timeout', '$animate', function($scope, $element, $interval, $timeout, $animate) {\n var self = this,\n slides = self.slides = $scope.slides = [],\n SLIDE_DIRECTION = 'uib-slideDirection',\n currentIndex = $scope.active,\n currentInterval, isPlaying, bufferedTransitions = [];\n\n var destroyed = false;\n $element.addClass('carousel');\n\n self.addSlide = function(slide, element) {\n slides.push({\n slide: slide,\n element: element\n });\n slides.sort(function(a, b) {\n return +a.slide.index - +b.slide.index;\n });\n //if this is the first slide or the slide is set to active, select it\n if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {\n if ($scope.$currentTransition) {\n $scope.$currentTransition = null;\n }\n\n currentIndex = slide.index;\n $scope.active = slide.index;\n setActive(currentIndex);\n self.select(slides[findSlideIndex(slide)]);\n if (slides.length === 1) {\n $scope.play();\n }\n }\n };\n\n self.getCurrentIndex = function() {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide.index === currentIndex) {\n return i;\n }\n }\n };\n\n self.next = $scope.next = function() {\n var newIndex = (self.getCurrentIndex() + 1) % slides.length;\n\n if (newIndex === 0 && $scope.noWrap()) {\n $scope.pause();\n return;\n }\n\n return self.select(slides[newIndex], 'next');\n };\n\n self.prev = $scope.prev = function() {\n var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;\n\n if ($scope.noWrap() && newIndex === slides.length - 1) {\n $scope.pause();\n return;\n }\n\n return self.select(slides[newIndex], 'prev');\n };\n\n self.removeSlide = function(slide) {\n var index = findSlideIndex(slide);\n\n var bufferedIndex = bufferedTransitions.indexOf(slides[index]);\n if (bufferedIndex !== -1) {\n bufferedTransitions.splice(bufferedIndex, 1);\n }\n\n //get the index of the slide inside the carousel\n slides.splice(index, 1);\n if (slides.length > 0 && currentIndex === index) {\n if (index >= slides.length) {\n currentIndex = slides.length - 1;\n $scope.active = currentIndex;\n setActive(currentIndex);\n self.select(slides[slides.length - 1]);\n } else {\n currentIndex = index;\n $scope.active = currentIndex;\n setActive(currentIndex);\n self.select(slides[index]);\n }\n } else if (currentIndex > index) {\n currentIndex--;\n $scope.active = currentIndex;\n }\n\n //clean the active value when no more slide\n if (slides.length === 0) {\n currentIndex = null;\n $scope.active = null;\n clearBufferedTransitions();\n }\n };\n\n /* direction: \"prev\" or \"next\" */\n self.select = $scope.select = function(nextSlide, direction) {\n var nextIndex = findSlideIndex(nextSlide.slide);\n //Decide direction if it's not given\n if (direction === undefined) {\n direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';\n }\n //Prevent this user-triggered transition from occurring if there is already one in progress\n if (nextSlide.slide.index !== currentIndex &&\n !$scope.$currentTransition) {\n goNext(nextSlide.slide, nextIndex, direction);\n } else if (nextSlide && nextSlide.slide.index !== currentIndex && $scope.$currentTransition) {\n bufferedTransitions.push(slides[nextIndex]);\n }\n };\n\n /* Allow outside people to call indexOf on slides array */\n $scope.indexOfSlide = function(slide) {\n return +slide.slide.index;\n };\n\n $scope.isActive = function(slide) {\n return $scope.active === slide.slide.index;\n };\n\n $scope.isPrevDisabled = function() {\n return $scope.active === 0 && $scope.noWrap();\n };\n\n $scope.isNextDisabled = function() {\n return $scope.active === slides.length - 1 && $scope.noWrap();\n };\n\n $scope.pause = function() {\n if (!$scope.noPause) {\n isPlaying = false;\n resetTimer();\n }\n };\n\n $scope.play = function() {\n if (!isPlaying) {\n isPlaying = true;\n restartTimer();\n }\n };\n\n $element.on('mouseenter', $scope.pause);\n $element.on('mouseleave', $scope.play);\n\n $scope.$on('$destroy', function() {\n destroyed = true;\n resetTimer();\n });\n\n $scope.$watch('noTransition', function(noTransition) {\n $animate.enabled($element, !noTransition);\n });\n\n $scope.$watch('interval', restartTimer);\n\n $scope.$watchCollection('slides', resetTransition);\n\n $scope.$watch('active', function(index) {\n if (angular.isNumber(index) && currentIndex !== index) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide.index === index) {\n index = i;\n break;\n }\n }\n\n var slide = slides[index];\n if (slide) {\n setActive(index);\n self.select(slides[index]);\n currentIndex = index;\n }\n }\n });\n\n function clearBufferedTransitions() {\n while (bufferedTransitions.length) {\n bufferedTransitions.shift();\n }\n }\n\n function getSlideByIndex(index) {\n for (var i = 0, l = slides.length; i < l; ++i) {\n if (slides[i].index === index) {\n return slides[i];\n }\n }\n }\n\n function setActive(index) {\n for (var i = 0; i < slides.length; i++) {\n slides[i].slide.active = i === index;\n }\n }\n\n function goNext(slide, index, direction) {\n if (destroyed) {\n return;\n }\n\n angular.extend(slide, {direction: direction});\n angular.extend(slides[currentIndex].slide || {}, {direction: direction});\n if ($animate.enabled($element) && !$scope.$currentTransition &&\n slides[index].element && self.slides.length > 1) {\n slides[index].element.data(SLIDE_DIRECTION, slide.direction);\n var currentIdx = self.getCurrentIndex();\n\n if (angular.isNumber(currentIdx) && slides[currentIdx].element) {\n slides[currentIdx].element.data(SLIDE_DIRECTION, slide.direction);\n }\n\n $scope.$currentTransition = true;\n $animate.on('addClass', slides[index].element, function(element, phase) {\n if (phase === 'close') {\n $scope.$currentTransition = null;\n $animate.off('addClass', element);\n if (bufferedTransitions.length) {\n var nextSlide = bufferedTransitions.pop().slide;\n var nextIndex = nextSlide.index;\n var nextDirection = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';\n clearBufferedTransitions();\n\n goNext(nextSlide, nextIndex, nextDirection);\n }\n }\n });\n }\n\n $scope.active = slide.index;\n currentIndex = slide.index;\n setActive(index);\n\n //every time you change slides, reset the timer\n restartTimer();\n }\n\n function findSlideIndex(slide) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide === slide) {\n return i;\n }\n }\n }\n\n function resetTimer() {\n if (currentInterval) {\n $interval.cancel(currentInterval);\n currentInterval = null;\n }\n }\n\n function resetTransition(slides) {\n if (!slides.length) {\n $scope.$currentTransition = null;\n clearBufferedTransitions();\n }\n }\n\n function restartTimer() {\n resetTimer();\n var interval = +$scope.interval;\n if (!isNaN(interval) && interval > 0) {\n currentInterval = $interval(timerFn, interval);\n }\n }\n\n function timerFn() {\n var interval = +$scope.interval;\n if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {\n $scope.next();\n } else {\n $scope.pause();\n }\n }\n}])\n\n.directive('uibCarousel', function() {\n return {\n transclude: true,\n controller: 'UibCarouselController',\n controllerAs: 'carousel',\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/carousel/carousel.html';\n },\n scope: {\n active: '=',\n interval: '=',\n noTransition: '=',\n noPause: '=',\n noWrap: '&'\n }\n };\n})\n\n.directive('uibSlide', ['$animate', function($animate) {\n return {\n require: '^uibCarousel',\n restrict: 'A',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/carousel/slide.html';\n },\n scope: {\n actual: '=?',\n index: '=?'\n },\n link: function (scope, element, attrs, carouselCtrl) {\n element.addClass('item');\n carouselCtrl.addSlide(scope, element);\n //when the scope is destroyed then remove the slide from the current slides array\n scope.$on('$destroy', function() {\n carouselCtrl.removeSlide(scope);\n });\n\n scope.$watch('active', function(active) {\n $animate[active ? 'addClass' : 'removeClass'](element, 'active');\n });\n }\n };\n}])\n\n.animation('.item', ['$animateCss',\nfunction($animateCss) {\n var SLIDE_DIRECTION = 'uib-slideDirection';\n\n function removeClass(element, className, callback) {\n element.removeClass(className);\n if (callback) {\n callback();\n }\n }\n\n return {\n beforeAddClass: function(element, className, done) {\n if (className === 'active') {\n var stopped = false;\n var direction = element.data(SLIDE_DIRECTION);\n var directionClass = direction === 'next' ? 'left' : 'right';\n var removeClassFn = removeClass.bind(this, element,\n directionClass + ' ' + direction, done);\n element.addClass(direction);\n\n $animateCss(element, {addClass: directionClass})\n .start()\n .done(removeClassFn);\n\n return function() {\n stopped = true;\n };\n }\n done();\n },\n beforeRemoveClass: function (element, className, done) {\n if (className === 'active') {\n var stopped = false;\n var direction = element.data(SLIDE_DIRECTION);\n var directionClass = direction === 'next' ? 'left' : 'right';\n var removeClassFn = removeClass.bind(this, element, directionClass, done);\n\n $animateCss(element, {addClass: directionClass})\n .start()\n .done(removeClassFn);\n\n return function() {\n stopped = true;\n };\n }\n done();\n }\n };\n}]);\n\nangular.module('ui.bootstrap.dateparser', [])\n\n.service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', function($log, $locale, dateFilter, orderByFilter) {\n // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js\n var SPECIAL_CHARACTERS_REGEXP = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n var localeId;\n var formatCodeToRegex;\n\n this.init = function() {\n localeId = $locale.id;\n\n this.parsers = {};\n this.formatters = {};\n\n formatCodeToRegex = [\n {\n key: 'yyyy',\n regex: '\\\\d{4}',\n apply: function(value) { this.year = +value; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'yyyy');\n }\n },\n {\n key: 'yy',\n regex: '\\\\d{2}',\n apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'yy');\n }\n },\n {\n key: 'y',\n regex: '\\\\d{1,4}',\n apply: function(value) { this.year = +value; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'y');\n }\n },\n {\n key: 'M!',\n regex: '0?[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) {\n var value = date.getMonth();\n if (/^[0-9]$/.test(value)) {\n return dateFilter(date, 'MM');\n }\n\n return dateFilter(date, 'M');\n }\n },\n {\n key: 'MMMM',\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'MMMM'); }\n },\n {\n key: 'MMM',\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'MMM'); }\n },\n {\n key: 'MM',\n regex: '0[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) { return dateFilter(date, 'MM'); }\n },\n {\n key: 'M',\n regex: '[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) { return dateFilter(date, 'M'); }\n },\n {\n key: 'd!',\n regex: '[0-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) {\n var value = date.getDate();\n if (/^[1-9]$/.test(value)) {\n return dateFilter(date, 'dd');\n }\n\n return dateFilter(date, 'd');\n }\n },\n {\n key: 'dd',\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) { return dateFilter(date, 'dd'); }\n },\n {\n key: 'd',\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) { return dateFilter(date, 'd'); }\n },\n {\n key: 'EEEE',\n regex: $locale.DATETIME_FORMATS.DAY.join('|'),\n formatter: function(date) { return dateFilter(date, 'EEEE'); }\n },\n {\n key: 'EEE',\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n formatter: function(date) { return dateFilter(date, 'EEE'); }\n },\n {\n key: 'HH',\n regex: '(?:0|1)[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'HH'); }\n },\n {\n key: 'hh',\n regex: '0[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'hh'); }\n },\n {\n key: 'H',\n regex: '1?[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'H'); }\n },\n {\n key: 'h',\n regex: '[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'h'); }\n },\n {\n key: 'mm',\n regex: '[0-5][0-9]',\n apply: function(value) { this.minutes = +value; },\n formatter: function(date) { return dateFilter(date, 'mm'); }\n },\n {\n key: 'm',\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.minutes = +value; },\n formatter: function(date) { return dateFilter(date, 'm'); }\n },\n {\n key: 'sss',\n regex: '[0-9][0-9][0-9]',\n apply: function(value) { this.milliseconds = +value; },\n formatter: function(date) { return dateFilter(date, 'sss'); }\n },\n {\n key: 'ss',\n regex: '[0-5][0-9]',\n apply: function(value) { this.seconds = +value; },\n formatter: function(date) { return dateFilter(date, 'ss'); }\n },\n {\n key: 's',\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.seconds = +value; },\n formatter: function(date) { return dateFilter(date, 's'); }\n },\n {\n key: 'a',\n regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),\n apply: function(value) {\n if (this.hours === 12) {\n this.hours = 0;\n }\n\n if (value === 'PM') {\n this.hours += 12;\n }\n },\n formatter: function(date) { return dateFilter(date, 'a'); }\n },\n {\n key: 'Z',\n regex: '[+-]\\\\d{4}',\n apply: function(value) {\n var matches = value.match(/([+-])(\\d{2})(\\d{2})/),\n sign = matches[1],\n hours = matches[2],\n minutes = matches[3];\n this.hours += toInt(sign + hours);\n this.minutes += toInt(sign + minutes);\n },\n formatter: function(date) {\n return dateFilter(date, 'Z');\n }\n },\n {\n key: 'ww',\n regex: '[0-4][0-9]|5[0-3]',\n formatter: function(date) { return dateFilter(date, 'ww'); }\n },\n {\n key: 'w',\n regex: '[0-9]|[1-4][0-9]|5[0-3]',\n formatter: function(date) { return dateFilter(date, 'w'); }\n },\n {\n key: 'GGGG',\n regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\\s/g, '\\\\s'),\n formatter: function(date) { return dateFilter(date, 'GGGG'); }\n },\n {\n key: 'GGG',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'GGG'); }\n },\n {\n key: 'GG',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'GG'); }\n },\n {\n key: 'G',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'G'); }\n }\n ];\n };\n\n this.init();\n\n function createParser(format) {\n var map = [], regex = format.split('');\n\n // check for literal values\n var quoteIndex = format.indexOf('\\'');\n if (quoteIndex > -1) {\n var inLiteral = false;\n format = format.split('');\n for (var i = quoteIndex; i < format.length; i++) {\n if (inLiteral) {\n if (format[i] === '\\'') {\n if (i + 1 < format.length && format[i+1] === '\\'') { // escaped single quote\n format[i+1] = '$';\n regex[i+1] = '';\n } else { // end of literal\n regex[i] = '';\n inLiteral = false;\n }\n }\n format[i] = '$';\n } else {\n if (format[i] === '\\'') { // start of literal\n format[i] = '$';\n regex[i] = '';\n inLiteral = true;\n }\n }\n }\n\n format = format.join('');\n }\n\n angular.forEach(formatCodeToRegex, function(data) {\n var index = format.indexOf(data.key);\n\n if (index > -1) {\n format = format.split('');\n\n regex[index] = '(' + data.regex + ')';\n format[index] = '$'; // Custom symbol to define consumed part of format\n for (var i = index + 1, n = index + data.key.length; i < n; i++) {\n regex[i] = '';\n format[i] = '$';\n }\n format = format.join('');\n\n map.push({\n index: index,\n key: data.key,\n apply: data.apply,\n matcher: data.regex\n });\n }\n });\n\n return {\n regex: new RegExp('^' + regex.join('') + '$'),\n map: orderByFilter(map, 'index')\n };\n }\n\n function createFormatter(format) {\n var formatters = [];\n var i = 0;\n var formatter, literalIdx;\n while (i < format.length) {\n if (angular.isNumber(literalIdx)) {\n if (format.charAt(i) === '\\'') {\n if (i + 1 >= format.length || format.charAt(i + 1) !== '\\'') {\n formatters.push(constructLiteralFormatter(format, literalIdx, i));\n literalIdx = null;\n }\n } else if (i === format.length) {\n while (literalIdx < format.length) {\n formatter = constructFormatterFromIdx(format, literalIdx);\n formatters.push(formatter);\n literalIdx = formatter.endIdx;\n }\n }\n\n i++;\n continue;\n }\n\n if (format.charAt(i) === '\\'') {\n literalIdx = i;\n i++;\n continue;\n }\n\n formatter = constructFormatterFromIdx(format, i);\n\n formatters.push(formatter.parser);\n i = formatter.endIdx;\n }\n\n return formatters;\n }\n\n function constructLiteralFormatter(format, literalIdx, endIdx) {\n return function() {\n return format.substr(literalIdx + 1, endIdx - literalIdx - 1);\n };\n }\n\n function constructFormatterFromIdx(format, i) {\n var currentPosStr = format.substr(i);\n for (var j = 0; j < formatCodeToRegex.length; j++) {\n if (new RegExp('^' + formatCodeToRegex[j].key).test(currentPosStr)) {\n var data = formatCodeToRegex[j];\n return {\n endIdx: i + data.key.length,\n parser: data.formatter\n };\n }\n }\n\n return {\n endIdx: i + 1,\n parser: function() {\n return currentPosStr.charAt(0);\n }\n };\n }\n\n this.filter = function(date, format) {\n if (!angular.isDate(date) || isNaN(date) || !format) {\n return '';\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n\n if ($locale.id !== localeId) {\n this.init();\n }\n\n if (!this.formatters[format]) {\n this.formatters[format] = createFormatter(format);\n }\n\n var formatters = this.formatters[format];\n\n return formatters.reduce(function(str, formatter) {\n return str + formatter(date);\n }, '');\n };\n\n this.parse = function(input, format, baseDate) {\n if (!angular.isString(input) || !format) {\n return input;\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\\\$&');\n\n if ($locale.id !== localeId) {\n this.init();\n }\n\n if (!this.parsers[format]) {\n this.parsers[format] = createParser(format, 'apply');\n }\n\n var parser = this.parsers[format],\n regex = parser.regex,\n map = parser.map,\n results = input.match(regex),\n tzOffset = false;\n if (results && results.length) {\n var fields, dt;\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {\n fields = {\n year: baseDate.getFullYear(),\n month: baseDate.getMonth(),\n date: baseDate.getDate(),\n hours: baseDate.getHours(),\n minutes: baseDate.getMinutes(),\n seconds: baseDate.getSeconds(),\n milliseconds: baseDate.getMilliseconds()\n };\n } else {\n if (baseDate) {\n $log.warn('dateparser:', 'baseDate is not a valid date');\n }\n fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };\n }\n\n for (var i = 1, n = results.length; i < n; i++) {\n var mapper = map[i - 1];\n if (mapper.matcher === 'Z') {\n tzOffset = true;\n }\n\n if (mapper.apply) {\n mapper.apply.call(fields, results[i]);\n }\n }\n\n var datesetter = tzOffset ? Date.prototype.setUTCFullYear :\n Date.prototype.setFullYear;\n var timesetter = tzOffset ? Date.prototype.setUTCHours :\n Date.prototype.setHours;\n\n if (isValid(fields.year, fields.month, fields.date)) {\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {\n dt = new Date(baseDate);\n datesetter.call(dt, fields.year, fields.month, fields.date);\n timesetter.call(dt, fields.hours, fields.minutes,\n fields.seconds, fields.milliseconds);\n } else {\n dt = new Date(0);\n datesetter.call(dt, fields.year, fields.month, fields.date);\n timesetter.call(dt, fields.hours || 0, fields.minutes || 0,\n fields.seconds || 0, fields.milliseconds || 0);\n }\n }\n\n return dt;\n }\n };\n\n // Check if date is valid for specific month (and year for February).\n // Month: 0 = Jan, 1 = Feb, etc\n function isValid(year, month, date) {\n if (date < 1) {\n return false;\n }\n\n if (month === 1 && date > 28) {\n return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\n }\n\n if (month === 3 || month === 5 || month === 8 || month === 10) {\n return date < 31;\n }\n\n return true;\n }\n\n function toInt(str) {\n return parseInt(str, 10);\n }\n\n this.toTimezone = toTimezone;\n this.fromTimezone = fromTimezone;\n this.timezoneToOffset = timezoneToOffset;\n this.addDateMinutes = addDateMinutes;\n this.convertTimezoneToLocal = convertTimezoneToLocal;\n\n function toTimezone(date, timezone) {\n return date && timezone ? convertTimezoneToLocal(date, timezone) : date;\n }\n\n function fromTimezone(date, timezone) {\n return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;\n }\n\n //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207\n function timezoneToOffset(timezone, fallback) {\n timezone = timezone.replace(/:/g, '');\n var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n }\n\n function addDateMinutes(date, minutes) {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + minutes);\n return date;\n }\n\n function convertTimezoneToLocal(date, timezone, reverse) {\n reverse = reverse ? -1 : 1;\n var dateTimezoneOffset = date.getTimezoneOffset();\n var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));\n }\n}]);\n\n// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to\n// at most one element.\nangular.module('ui.bootstrap.isClass', [])\n.directive('uibIsClass', [\n '$animate',\nfunction ($animate) {\n // 11111111 22222222\n var ON_REGEXP = /^\\s*([\\s\\S]+?)\\s+on\\s+([\\s\\S]+?)\\s*$/;\n // 11111111 22222222\n var IS_REGEXP = /^\\s*([\\s\\S]+?)\\s+for\\s+([\\s\\S]+?)\\s*$/;\n\n var dataPerTracked = {};\n\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n var linkedScopes = [];\n var instances = [];\n var expToData = {};\n var lastActivated = null;\n var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);\n var onExp = onExpMatches[2];\n var expsStr = onExpMatches[1];\n var exps = expsStr.split(',');\n\n return linkFn;\n\n function linkFn(scope, element, attrs) {\n linkedScopes.push(scope);\n instances.push({\n scope: scope,\n element: element\n });\n\n exps.forEach(function(exp, k) {\n addForExp(exp, scope);\n });\n\n scope.$on('$destroy', removeScope);\n }\n\n function addForExp(exp, scope) {\n var matches = exp.match(IS_REGEXP);\n var clazz = scope.$eval(matches[1]);\n var compareWithExp = matches[2];\n var data = expToData[exp];\n if (!data) {\n var watchFn = function(compareWithVal) {\n var newActivated = null;\n instances.some(function(instance) {\n var thisVal = instance.scope.$eval(onExp);\n if (thisVal === compareWithVal) {\n newActivated = instance;\n return true;\n }\n });\n if (data.lastActivated !== newActivated) {\n if (data.lastActivated) {\n $animate.removeClass(data.lastActivated.element, clazz);\n }\n if (newActivated) {\n $animate.addClass(newActivated.element, clazz);\n }\n data.lastActivated = newActivated;\n }\n };\n expToData[exp] = data = {\n lastActivated: null,\n scope: scope,\n watchFn: watchFn,\n compareWithExp: compareWithExp,\n watcher: scope.$watch(compareWithExp, watchFn)\n };\n }\n data.watchFn(scope.$eval(compareWithExp));\n }\n\n function removeScope(e) {\n var removedScope = e.targetScope;\n var index = linkedScopes.indexOf(removedScope);\n linkedScopes.splice(index, 1);\n instances.splice(index, 1);\n if (linkedScopes.length) {\n var newWatchScope = linkedScopes[0];\n angular.forEach(expToData, function(data) {\n if (data.scope === removedScope) {\n data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);\n data.scope = newWatchScope;\n }\n });\n } else {\n expToData = {};\n }\n }\n }\n };\n}]);\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])\n\n.value('$datepickerSuppressError', false)\n\n.value('$datepickerLiteralWarning', true)\n\n.constant('uibDatepickerConfig', {\n datepickerMode: 'day',\n formatDay: 'dd',\n formatMonth: 'MMMM',\n formatYear: 'yyyy',\n formatDayHeader: 'EEE',\n formatDayTitle: 'MMMM yyyy',\n formatMonthTitle: 'yyyy',\n maxDate: null,\n maxMode: 'year',\n minDate: null,\n minMode: 'day',\n monthColumns: 3,\n ngModelOptions: {},\n shortcutPropagation: false,\n showWeeks: true,\n yearColumns: 5,\n yearRows: 4\n})\n\n.controller('UibDatepickerController', ['$scope', '$element', '$attrs', '$parse', '$interpolate', '$locale', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerLiteralWarning', '$datepickerSuppressError', 'uibDateParser',\n function($scope, $element, $attrs, $parse, $interpolate, $locale, $log, dateFilter, datepickerConfig, $datepickerLiteralWarning, $datepickerSuppressError, dateParser) {\n var self = this,\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;\n ngModelOptions = {},\n watchListeners = [];\n\n $element.addClass('uib-datepicker');\n $attrs.$set('role', 'application');\n\n if (!$scope.datepickerOptions) {\n $scope.datepickerOptions = {};\n }\n\n // Modes chain\n this.modes = ['day', 'month', 'year'];\n\n [\n 'customClass',\n 'dateDisabled',\n 'datepickerMode',\n 'formatDay',\n 'formatDayHeader',\n 'formatDayTitle',\n 'formatMonth',\n 'formatMonthTitle',\n 'formatYear',\n 'maxDate',\n 'maxMode',\n 'minDate',\n 'minMode',\n 'monthColumns',\n 'showWeeks',\n 'shortcutPropagation',\n 'startingDay',\n 'yearColumns',\n 'yearRows'\n ].forEach(function(key) {\n switch (key) {\n case 'customClass':\n case 'dateDisabled':\n $scope[key] = $scope.datepickerOptions[key] || angular.noop;\n break;\n case 'datepickerMode':\n $scope.datepickerMode = angular.isDefined($scope.datepickerOptions.datepickerMode) ?\n $scope.datepickerOptions.datepickerMode : datepickerConfig.datepickerMode;\n break;\n case 'formatDay':\n case 'formatDayHeader':\n case 'formatDayTitle':\n case 'formatMonth':\n case 'formatMonthTitle':\n case 'formatYear':\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\n $interpolate($scope.datepickerOptions[key])($scope.$parent) :\n datepickerConfig[key];\n break;\n case 'monthColumns':\n case 'showWeeks':\n case 'shortcutPropagation':\n case 'yearColumns':\n case 'yearRows':\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\n $scope.datepickerOptions[key] : datepickerConfig[key];\n break;\n case 'startingDay':\n if (angular.isDefined($scope.datepickerOptions.startingDay)) {\n self.startingDay = $scope.datepickerOptions.startingDay;\n } else if (angular.isNumber(datepickerConfig.startingDay)) {\n self.startingDay = datepickerConfig.startingDay;\n } else {\n self.startingDay = ($locale.DATETIME_FORMATS.FIRSTDAYOFWEEK + 8) % 7;\n }\n\n break;\n case 'maxDate':\n case 'minDate':\n $scope.$watch('datepickerOptions.' + key, function(value) {\n if (value) {\n if (angular.isDate(value)) {\n self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.timezone);\n } else {\n if ($datepickerLiteralWarning) {\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\n }\n\n self[key] = new Date(dateFilter(value, 'medium'));\n }\n } else {\n self[key] = datepickerConfig[key] ?\n dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.timezone) :\n null;\n }\n\n self.refreshView();\n });\n\n break;\n case 'maxMode':\n case 'minMode':\n if ($scope.datepickerOptions[key]) {\n $scope.$watch(function() { return $scope.datepickerOptions[key]; }, function(value) {\n self[key] = $scope[key] = angular.isDefined(value) ? value : $scope.datepickerOptions[key];\n if (key === 'minMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) < self.modes.indexOf(self[key]) ||\n key === 'maxMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) > self.modes.indexOf(self[key])) {\n $scope.datepickerMode = self[key];\n $scope.datepickerOptions.datepickerMode = self[key];\n }\n });\n } else {\n self[key] = $scope[key] = datepickerConfig[key] || null;\n }\n\n break;\n }\n });\n\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\n\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\n if (angular.isDefined($attrs.ngDisabled)) {\n watchListeners.push($scope.$parent.$watch($attrs.ngDisabled, function(disabled) {\n $scope.disabled = disabled;\n self.refreshView();\n }));\n }\n\n $scope.isActive = function(dateObject) {\n if (self.compare(dateObject.date, self.activeDate) === 0) {\n $scope.activeDateId = dateObject.uid;\n return true;\n }\n return false;\n };\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelOptions = ngModelCtrl_.$options ||\n $scope.datepickerOptions.ngModelOptions ||\n datepickerConfig.ngModelOptions;\n if ($scope.datepickerOptions.initDate) {\n self.activeDate = dateParser.fromTimezone($scope.datepickerOptions.initDate, ngModelOptions.timezone) || new Date();\n $scope.$watch('datepickerOptions.initDate', function(initDate) {\n if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {\n self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.timezone);\n self.refreshView();\n }\n });\n } else {\n self.activeDate = new Date();\n }\n\n var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date();\n this.activeDate = !isNaN(date) ?\n dateParser.fromTimezone(date, ngModelOptions.timezone) :\n dateParser.fromTimezone(new Date(), ngModelOptions.timezone);\n\n ngModelCtrl.$render = function() {\n self.render();\n };\n };\n\n this.render = function() {\n if (ngModelCtrl.$viewValue) {\n var date = new Date(ngModelCtrl.$viewValue),\n isValid = !isNaN(date);\n\n if (isValid) {\n this.activeDate = dateParser.fromTimezone(date, ngModelOptions.timezone);\n } else if (!$datepickerSuppressError) {\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object');\n }\n }\n this.refreshView();\n };\n\n this.refreshView = function() {\n if (this.element) {\n $scope.selectedDt = null;\n this._refreshView();\n if ($scope.activeDt) {\n $scope.activeDateId = $scope.activeDt.uid;\n }\n\n var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n date = dateParser.fromTimezone(date, ngModelOptions.timezone);\n ngModelCtrl.$setValidity('dateDisabled', !date ||\n this.element && !this.isDisabled(date));\n }\n };\n\n this.createDateObject = function(date, format) {\n var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n model = dateParser.fromTimezone(model, ngModelOptions.timezone);\n var today = new Date();\n today = dateParser.fromTimezone(today, ngModelOptions.timezone);\n var time = this.compare(date, today);\n var dt = {\n date: date,\n label: dateParser.filter(date, format),\n selected: model && this.compare(date, model) === 0,\n disabled: this.isDisabled(date),\n past: time < 0,\n current: time === 0,\n future: time > 0,\n customClass: this.customClass(date) || null\n };\n\n if (model && this.compare(date, model) === 0) {\n $scope.selectedDt = dt;\n }\n\n if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {\n $scope.activeDt = dt;\n }\n\n return dt;\n };\n\n this.isDisabled = function(date) {\n return $scope.disabled ||\n this.minDate && this.compare(date, this.minDate) < 0 ||\n this.maxDate && this.compare(date, this.maxDate) > 0 ||\n $scope.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});\n };\n\n this.customClass = function(date) {\n return $scope.customClass({date: date, mode: $scope.datepickerMode});\n };\n\n // Split array into smaller arrays\n this.split = function(arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n };\n\n $scope.select = function(date) {\n if ($scope.datepickerMode === self.minMode) {\n var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.timezone) : new Date(0, 0, 0, 0, 0, 0, 0);\n dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n dt = dateParser.toTimezone(dt, ngModelOptions.timezone);\n ngModelCtrl.$setViewValue(dt);\n ngModelCtrl.$render();\n } else {\n self.activeDate = date;\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);\n\n $scope.$emit('uib:datepicker.mode');\n }\n\n $scope.$broadcast('uib:datepicker.focus');\n };\n\n $scope.move = function(direction) {\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\n self.activeDate.setFullYear(year, month, 1);\n self.refreshView();\n };\n\n $scope.toggleMode = function(direction) {\n direction = direction || 1;\n\n if ($scope.datepickerMode === self.maxMode && direction === 1 ||\n $scope.datepickerMode === self.minMode && direction === -1) {\n return;\n }\n\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);\n\n $scope.$emit('uib:datepicker.mode');\n };\n\n // Key event mapper\n $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };\n\n var focusElement = function() {\n self.element[0].focus();\n };\n\n // Listen for focus requests from popup directive\n $scope.$on('uib:datepicker.focus', focusElement);\n\n $scope.keydown = function(evt) {\n var key = $scope.keys[evt.which];\n\n if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {\n return;\n }\n\n evt.preventDefault();\n if (!self.shortcutPropagation) {\n evt.stopPropagation();\n }\n\n if (key === 'enter' || key === 'space') {\n if (self.isDisabled(self.activeDate)) {\n return; // do nothing\n }\n $scope.select(self.activeDate);\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\n $scope.toggleMode(key === 'up' ? 1 : -1);\n } else {\n self.handleKeyDown(key, evt);\n self.refreshView();\n }\n };\n\n $element.on('keydown', function(evt) {\n $scope.$apply(function() {\n $scope.keydown(evt);\n });\n });\n\n $scope.$on('$destroy', function() {\n //Clear all watch listeners on destroy\n while (watchListeners.length) {\n watchListeners.shift()();\n }\n });\n\n function setMode(mode) {\n $scope.datepickerMode = mode;\n $scope.datepickerOptions.datepickerMode = mode;\n }\n}])\n\n.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n this.step = { months: 1 };\n this.element = $element;\n function getDaysInMonth(year, month) {\n return month === 1 && year % 4 === 0 &&\n (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];\n }\n\n this.init = function(ctrl) {\n angular.extend(ctrl, this);\n scope.showWeeks = ctrl.showWeeks;\n ctrl.refreshView();\n };\n\n this.getDates = function(startDate, n) {\n var dates = new Array(n), current = new Date(startDate), i = 0, date;\n while (i < n) {\n date = new Date(current);\n dates[i++] = date;\n current.setDate(current.getDate() + 1);\n }\n return dates;\n };\n\n this._refreshView = function() {\n var year = this.activeDate.getFullYear(),\n month = this.activeDate.getMonth(),\n firstDayOfMonth = new Date(this.activeDate);\n\n firstDayOfMonth.setFullYear(year, month, 1);\n\n var difference = this.startingDay - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth = difference > 0 ?\n 7 - difference : - difference,\n firstDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n var days = this.getDates(firstDate, 42);\n for (var i = 0; i < 42; i ++) {\n days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {\n secondary: days[i].getMonth() !== month,\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.labels = new Array(7);\n for (var j = 0; j < 7; j++) {\n scope.labels[j] = {\n abbr: dateFilter(days[j].date, this.formatDayHeader),\n full: dateFilter(days[j].date, 'EEEE')\n };\n }\n\n scope.title = dateFilter(this.activeDate, this.formatDayTitle);\n scope.rows = this.split(days, 7);\n\n if (scope.showWeeks) {\n scope.weekNumbers = [];\n var thursdayIndex = (4 + 7 - this.startingDay) % 7,\n numWeeks = scope.rows.length;\n for (var curWeek = 0; curWeek < numWeeks; curWeek++) {\n scope.weekNumbers.push(\n getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));\n }\n }\n };\n\n this.compare = function(date1, date2) {\n var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n _date1.setFullYear(date1.getFullYear());\n _date2.setFullYear(date2.getFullYear());\n return _date1 - _date2;\n };\n\n function getISO8601WeekNumber(date) {\n var checkDate = new Date(date);\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\n var time = checkDate.getTime();\n checkDate.setMonth(0); // Compare with Jan 1\n checkDate.setDate(1);\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n }\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getDate();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - 7;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\n this.activeDate.setMonth(month, 1);\n date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());\n }\n this.activeDate.setDate(date);\n };\n}])\n\n.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n this.step = { years: 1 };\n this.element = $element;\n\n this.init = function(ctrl) {\n angular.extend(ctrl, this);\n ctrl.refreshView();\n };\n\n this._refreshView = function() {\n var months = new Array(12),\n year = this.activeDate.getFullYear(),\n date;\n\n for (var i = 0; i < 12; i++) {\n date = new Date(this.activeDate);\n date.setFullYear(year, i, 1);\n months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = dateFilter(this.activeDate, this.formatMonthTitle);\n scope.rows = this.split(months, this.monthColumns);\n scope.yearHeaderColspan = this.monthColumns > 3 ? this.monthColumns - 2 : 1;\n };\n\n this.compare = function(date1, date2) {\n var _date1 = new Date(date1.getFullYear(), date1.getMonth());\n var _date2 = new Date(date2.getFullYear(), date2.getMonth());\n _date1.setFullYear(date1.getFullYear());\n _date2.setFullYear(date2.getFullYear());\n return _date1 - _date2;\n };\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getMonth();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - this.monthColumns;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + this.monthColumns;\n } else if (key === 'pageup' || key === 'pagedown') {\n var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\n this.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n this.activeDate.setMonth(date);\n };\n}])\n\n.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n var columns, range;\n this.element = $element;\n\n function getStartingYear(year) {\n return parseInt((year - 1) / range, 10) * range + 1;\n }\n\n this.yearpickerInit = function() {\n columns = this.yearColumns;\n range = this.yearRows * columns;\n this.step = { years: range };\n };\n\n this._refreshView = function() {\n var years = new Array(range), date;\n\n for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {\n date = new Date(this.activeDate);\n date.setFullYear(start + i, 0, 1);\n years[i] = angular.extend(this.createDateObject(date, this.formatYear), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\n scope.rows = this.split(years, columns);\n scope.columns = columns;\n };\n\n this.compare = function(date1, date2) {\n return date1.getFullYear() - date2.getFullYear();\n };\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getFullYear();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - columns;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + columns;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? - 1 : 1) * range;\n } else if (key === 'home') {\n date = getStartingYear(this.activeDate.getFullYear());\n } else if (key === 'end') {\n date = getStartingYear(this.activeDate.getFullYear()) + range - 1;\n }\n this.activeDate.setFullYear(date);\n };\n}])\n\n.directive('uibDatepicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';\n },\n scope: {\n datepickerOptions: '=?'\n },\n require: ['uibDatepicker', '^ngModel'],\n restrict: 'A',\n controller: 'UibDatepickerController',\n controllerAs: 'datepicker',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n datepickerCtrl.init(ngModelCtrl);\n }\n };\n})\n\n.directive('uibDaypicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/day.html';\n },\n require: ['^uibDatepicker', 'uibDaypicker'],\n restrict: 'A',\n controller: 'UibDaypickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0],\n daypickerCtrl = ctrls[1];\n\n daypickerCtrl.init(datepickerCtrl);\n }\n };\n})\n\n.directive('uibMonthpicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/month.html';\n },\n require: ['^uibDatepicker', 'uibMonthpicker'],\n restrict: 'A',\n controller: 'UibMonthpickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0],\n monthpickerCtrl = ctrls[1];\n\n monthpickerCtrl.init(datepickerCtrl);\n }\n };\n})\n\n.directive('uibYearpicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/year.html';\n },\n require: ['^uibDatepicker', 'uibYearpicker'],\n restrict: 'A',\n controller: 'UibYearpickerController',\n link: function(scope, element, attrs, ctrls) {\n var ctrl = ctrls[0];\n angular.extend(ctrl, ctrls[1]);\n ctrl.yearpickerInit();\n\n ctrl.refreshView();\n }\n };\n});\n\nangular.module('ui.bootstrap.position', [])\n\n/**\n * A set of utility methods for working with the DOM.\n * It is meant to be used where we need to absolute-position elements in\n * relation to another element (this is the case for tooltips, popovers,\n * typeahead suggestions etc.).\n */\n .factory('$uibPosition', ['$document', '$window', function($document, $window) {\n /**\n * Used by scrollbarWidth() function to cache scrollbar's width.\n * Do not access this variable directly, use scrollbarWidth() instead.\n */\n var SCROLLBAR_WIDTH;\n /**\n * scrollbar on body and html element in IE and Edge overlay\n * content and should be considered 0 width.\n */\n var BODY_SCROLLBAR_WIDTH;\n var OVERFLOW_REGEX = {\n normal: /(auto|scroll)/,\n hidden: /(auto|scroll|hidden)/\n };\n var PLACEMENT_REGEX = {\n auto: /\\s?auto?\\s?/i,\n primary: /^(top|bottom|left|right)$/,\n secondary: /^(top|bottom|left|right|center)$/,\n vertical: /^(top|bottom)$/\n };\n var BODY_REGEX = /(HTML|BODY)/;\n\n return {\n\n /**\n * Provides a raw DOM element from a jQuery/jQLite element.\n *\n * @param {element} elem - The element to convert.\n *\n * @returns {element} A HTML element.\n */\n getRawNode: function(elem) {\n return elem.nodeName ? elem : elem[0] || elem;\n },\n\n /**\n * Provides a parsed number for a style property. Strips\n * units and casts invalid numbers to 0.\n *\n * @param {string} value - The style value to parse.\n *\n * @returns {number} A valid number.\n */\n parseStyle: function(value) {\n value = parseFloat(value);\n return isFinite(value) ? value : 0;\n },\n\n /**\n * Provides the closest positioned ancestor.\n *\n * @param {element} element - The element to get the offest parent for.\n *\n * @returns {element} The closest positioned ancestor.\n */\n offsetParent: function(elem) {\n elem = this.getRawNode(elem);\n\n var offsetParent = elem.offsetParent || $document[0].documentElement;\n\n function isStaticPositioned(el) {\n return ($window.getComputedStyle(el).position || 'static') === 'static';\n }\n\n while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || $document[0].documentElement;\n },\n\n /**\n * Provides the scrollbar width, concept from TWBS measureScrollbar()\n * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\n * In IE and Edge, scollbar on body and html element overlay and should\n * return a width of 0.\n *\n * @returns {number} The width of the browser scollbar.\n */\n scrollbarWidth: function(isBody) {\n if (isBody) {\n if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\n var bodyElem = $document.find('body');\n bodyElem.addClass('uib-position-body-scrollbar-measure');\n BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\n BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\n bodyElem.removeClass('uib-position-body-scrollbar-measure');\n }\n return BODY_SCROLLBAR_WIDTH;\n }\n\n if (angular.isUndefined(SCROLLBAR_WIDTH)) {\n var scrollElem = angular.element('
');\n $document.find('body').append(scrollElem);\n SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\n SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\n scrollElem.remove();\n }\n\n return SCROLLBAR_WIDTH;\n },\n\n /**\n * Provides the padding required on an element to replace the scrollbar.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **scrollbarWidth**: the width of the scrollbar
  • \n *
  • **widthOverflow**: whether the the width is overflowing
  • \n *
  • **right**: the amount of right padding on the element needed to replace the scrollbar
  • \n *
  • **rightOriginal**: the amount of right padding currently on the element
  • \n *
  • **heightOverflow**: whether the the height is overflowing
  • \n *
  • **bottom**: the amount of bottom padding on the element needed to replace the scrollbar
  • \n *
  • **bottomOriginal**: the amount of bottom padding currently on the element
  • \n *
\n */\n scrollbarPadding: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemStyle = $window.getComputedStyle(elem);\n var paddingRight = this.parseStyle(elemStyle.paddingRight);\n var paddingBottom = this.parseStyle(elemStyle.paddingBottom);\n var scrollParent = this.scrollParent(elem, false, true);\n var scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));\n\n return {\n scrollbarWidth: scrollbarWidth,\n widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\n right: paddingRight + scrollbarWidth,\n originalRight: paddingRight,\n heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\n bottom: paddingBottom + scrollbarWidth,\n originalBottom: paddingBottom\n };\n },\n\n /**\n * Checks to see if the element is scrollable.\n *\n * @param {element} elem - The element to check.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n *\n * @returns {boolean} Whether the element is scrollable.\n */\n isScrollable: function(elem, includeHidden) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var elemStyle = $window.getComputedStyle(elem);\n return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\n },\n\n /**\n * Provides the closest scrollable ancestor.\n * A port of the jQuery UI scrollParent method:\n * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\n *\n * @param {element} elem - The element to find the scroll parent of.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n * @param {boolean=} [includeSelf=false] - Should the element being passed be\n * included in the scrollable llokup.\n *\n * @returns {element} A HTML element.\n */\n scrollParent: function(elem, includeHidden, includeSelf) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var documentEl = $document[0].documentElement;\n var elemStyle = $window.getComputedStyle(elem);\n if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\n return elem;\n }\n var excludeStatic = elemStyle.position === 'absolute';\n var scrollParent = elem.parentElement || documentEl;\n\n if (scrollParent === documentEl || elemStyle.position === 'fixed') {\n return documentEl;\n }\n\n while (scrollParent.parentElement && scrollParent !== documentEl) {\n var spStyle = $window.getComputedStyle(scrollParent);\n if (excludeStatic && spStyle.position !== 'static') {\n excludeStatic = false;\n }\n\n if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\n break;\n }\n scrollParent = scrollParent.parentElement;\n }\n\n return scrollParent;\n },\n\n /**\n * Provides read-only equivalent of jQuery's position function:\n * http://api.jquery.com/position/ - distance to closest positioned\n * ancestor. Does not account for margins by default like jQuery position.\n *\n * @param {element} elem - The element to caclulate the position on.\n * @param {boolean=} [includeMargins=false] - Should margins be accounted\n * for, default is false.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **width**: the width of the element
  • \n *
  • **height**: the height of the element
  • \n *
  • **top**: distance to top edge of offset parent
  • \n *
  • **left**: distance to left edge of offset parent
  • \n *
\n */\n position: function(elem, includeMagins) {\n elem = this.getRawNode(elem);\n\n var elemOffset = this.offset(elem);\n if (includeMagins) {\n var elemStyle = $window.getComputedStyle(elem);\n elemOffset.top -= this.parseStyle(elemStyle.marginTop);\n elemOffset.left -= this.parseStyle(elemStyle.marginLeft);\n }\n var parent = this.offsetParent(elem);\n var parentOffset = {top: 0, left: 0};\n\n if (parent !== $document[0].documentElement) {\n parentOffset = this.offset(parent);\n parentOffset.top += parent.clientTop - parent.scrollTop;\n parentOffset.left += parent.clientLeft - parent.scrollLeft;\n }\n\n return {\n width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\n top: Math.round(elemOffset.top - parentOffset.top),\n left: Math.round(elemOffset.left - parentOffset.left)\n };\n },\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * http://api.jquery.com/offset/ - distance to viewport. Does\n * not account for borders, margins, or padding on the body\n * element.\n *\n * @param {element} elem - The element to calculate the offset on.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **width**: the width of the element
  • \n *
  • **height**: the height of the element
  • \n *
  • **top**: distance to top edge of viewport
  • \n *
  • **right**: distance to bottom edge of viewport
  • \n *
\n */\n offset: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemBCR = elem.getBoundingClientRect();\n return {\n width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\n top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\n left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\n };\n },\n\n /**\n * Provides offset distance to the closest scrollable ancestor\n * or viewport. Accounts for border and scrollbar width.\n *\n * Right and bottom dimensions represent the distance to the\n * respective edge of the viewport element. If the element\n * edge extends beyond the viewport, a negative value will be\n * reported.\n *\n * @param {element} elem - The element to get the viewport offset for.\n * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\n * of the first scrollable element, default is false.\n * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\n * be accounted for, default is true.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **top**: distance to the top content edge of viewport element
  • \n *
  • **bottom**: distance to the bottom content edge of viewport element
  • \n *
  • **left**: distance to the left content edge of viewport element
  • \n *
  • **right**: distance to the right content edge of viewport element
  • \n *
\n */\n viewportOffset: function(elem, useDocument, includePadding) {\n elem = this.getRawNode(elem);\n includePadding = includePadding !== false ? true : false;\n\n var elemBCR = elem.getBoundingClientRect();\n var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\n\n var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\n var offsetParentBCR = offsetParent.getBoundingClientRect();\n\n offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\n offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\n if (offsetParent === $document[0].documentElement) {\n offsetBCR.top += $window.pageYOffset;\n offsetBCR.left += $window.pageXOffset;\n }\n offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\n offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\n\n if (includePadding) {\n var offsetParentStyle = $window.getComputedStyle(offsetParent);\n offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\n offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\n offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\n offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\n }\n\n return {\n top: Math.round(elemBCR.top - offsetBCR.top),\n bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\n left: Math.round(elemBCR.left - offsetBCR.left),\n right: Math.round(offsetBCR.right - elemBCR.right)\n };\n },\n\n /**\n * Provides an array of placement values parsed from a placement string.\n * Along with the 'auto' indicator, supported placement strings are:\n *
    \n *
  • top: element on top, horizontally centered on host element.
  • \n *
  • top-left: element on top, left edge aligned with host element left edge.
  • \n *
  • top-right: element on top, lerightft edge aligned with host element right edge.
  • \n *
  • bottom: element on bottom, horizontally centered on host element.
  • \n *
  • bottom-left: element on bottom, left edge aligned with host element left edge.
  • \n *
  • bottom-right: element on bottom, right edge aligned with host element right edge.
  • \n *
  • left: element on left, vertically centered on host element.
  • \n *
  • left-top: element on left, top edge aligned with host element top edge.
  • \n *
  • left-bottom: element on left, bottom edge aligned with host element bottom edge.
  • \n *
  • right: element on right, vertically centered on host element.
  • \n *
  • right-top: element on right, top edge aligned with host element top edge.
  • \n *
  • right-bottom: element on right, bottom edge aligned with host element bottom edge.
  • \n *
\n * A placement string with an 'auto' indicator is expected to be\n * space separated from the placement, i.e: 'auto bottom-left' If\n * the primary and secondary placement values do not match 'top,\n * bottom, left, right' then 'top' will be the primary placement and\n * 'center' will be the secondary placement. If 'auto' is passed, true\n * will be returned as the 3rd value of the array.\n *\n * @param {string} placement - The placement string to parse.\n *\n * @returns {array} An array with the following values\n *
    \n *
  • **[0]**: The primary placement.
  • \n *
  • **[1]**: The secondary placement.
  • \n *
  • **[2]**: If auto is passed: true, else undefined.
  • \n *
\n */\n parsePlacement: function(placement) {\n var autoPlace = PLACEMENT_REGEX.auto.test(placement);\n if (autoPlace) {\n placement = placement.replace(PLACEMENT_REGEX.auto, '');\n }\n\n placement = placement.split('-');\n\n placement[0] = placement[0] || 'top';\n if (!PLACEMENT_REGEX.primary.test(placement[0])) {\n placement[0] = 'top';\n }\n\n placement[1] = placement[1] || 'center';\n if (!PLACEMENT_REGEX.secondary.test(placement[1])) {\n placement[1] = 'center';\n }\n\n if (autoPlace) {\n placement[2] = true;\n } else {\n placement[2] = false;\n }\n\n return placement;\n },\n\n /**\n * Provides coordinates for an element to be positioned relative to\n * another element. Passing 'auto' as part of the placement parameter\n * will enable smart placement - where the element fits. i.e:\n * 'auto left-top' will check to see if there is enough space to the left\n * of the hostElem to fit the targetElem, if not place right (same for secondary\n * top placement). Available space is calculated using the viewportOffset\n * function.\n *\n * @param {element} hostElem - The element to position against.\n * @param {element} targetElem - The element to position.\n * @param {string=} [placement=top] - The placement for the targetElem,\n * default is 'top'. 'center' is assumed as secondary placement for\n * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\n *
    \n *
  • top
  • \n *
  • top-right
  • \n *
  • top-left
  • \n *
  • bottom
  • \n *
  • bottom-left
  • \n *
  • bottom-right
  • \n *
  • left
  • \n *
  • left-top
  • \n *
  • left-bottom
  • \n *
  • right
  • \n *
  • right-top
  • \n *
  • right-bottom
  • \n *
\n * @param {boolean=} [appendToBody=false] - Should the top and left values returned\n * be calculated from the body element, default is false.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **top**: Value for targetElem top.
  • \n *
  • **left**: Value for targetElem left.
  • \n *
  • **placement**: The resolved placement.
  • \n *
\n */\n positionElements: function(hostElem, targetElem, placement, appendToBody) {\n hostElem = this.getRawNode(hostElem);\n targetElem = this.getRawNode(targetElem);\n\n // need to read from prop to support tests.\n var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\n var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\n\n placement = this.parsePlacement(placement);\n\n var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\n var targetElemPos = {top: 0, left: 0, placement: ''};\n\n if (placement[2]) {\n var viewportOffset = this.viewportOffset(hostElem, appendToBody);\n\n var targetElemStyle = $window.getComputedStyle(targetElem);\n var adjustedSize = {\n width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\n height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\n };\n\n placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\n placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\n placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\n placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\n placement[0];\n\n placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\n placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\n placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\n placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\n placement[1];\n\n if (placement[1] === 'center') {\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n var xOverflow = hostElemPos.width / 2 - targetWidth / 2;\n if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\n placement[1] = 'left';\n } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\n placement[1] = 'right';\n }\n } else {\n var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\n if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\n placement[1] = 'top';\n } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\n placement[1] = 'bottom';\n }\n }\n }\n }\n\n switch (placement[0]) {\n case 'top':\n targetElemPos.top = hostElemPos.top - targetHeight;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left - targetWidth;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width;\n break;\n }\n\n switch (placement[1]) {\n case 'top':\n targetElemPos.top = hostElemPos.top;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\n break;\n case 'center':\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\n } else {\n targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\n }\n break;\n }\n\n targetElemPos.top = Math.round(targetElemPos.top);\n targetElemPos.left = Math.round(targetElemPos.left);\n targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\n\n return targetElemPos;\n },\n\n /**\n * Provides a way to adjust the top positioning after first\n * render to correctly align element to top after content\n * rendering causes resized element height\n *\n * @param {array} placementClasses - The array of strings of classes\n * element should have.\n * @param {object} containerPosition - The object with container\n * position information\n * @param {number} initialHeight - The initial height for the elem.\n * @param {number} currentHeight - The current height for the elem.\n */\n adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {\n if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {\n return {\n top: containerPosition.top - currentHeight + 'px'\n };\n }\n },\n\n /**\n * Provides a way for positioning tooltip & dropdown\n * arrows when using placement options beyond the standard\n * left, right, top, or bottom.\n *\n * @param {element} elem - The tooltip/dropdown element.\n * @param {string} placement - The placement for the elem.\n */\n positionArrow: function(elem, placement) {\n elem = this.getRawNode(elem);\n\n var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\n if (!innerElem) {\n return;\n }\n\n var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\n\n var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\n if (!arrowElem) {\n return;\n }\n\n var arrowCss = {\n top: '',\n bottom: '',\n left: '',\n right: ''\n };\n\n placement = this.parsePlacement(placement);\n if (placement[1] === 'center') {\n // no adjustment necessary - just reset styles\n angular.element(arrowElem).css(arrowCss);\n return;\n }\n\n var borderProp = 'border-' + placement[0] + '-width';\n var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\n\n var borderRadiusProp = 'border-';\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n borderRadiusProp += placement[0] + '-' + placement[1];\n } else {\n borderRadiusProp += placement[1] + '-' + placement[0];\n }\n borderRadiusProp += '-radius';\n var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\n\n switch (placement[0]) {\n case 'top':\n arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'bottom':\n arrowCss.top = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'left':\n arrowCss.right = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'right':\n arrowCss.left = isTooltip ? '0' : '-' + borderWidth;\n break;\n }\n\n arrowCss[placement[1]] = borderRadius;\n\n angular.element(arrowElem).css(arrowCss);\n }\n };\n }]);\n\nangular.module('ui.bootstrap.datepickerPopup', ['ui.bootstrap.datepicker', 'ui.bootstrap.position'])\n\n.value('$datepickerPopupLiteralWarning', true)\n\n.constant('uibDatepickerPopupConfig', {\n altInputFormats: [],\n appendToBody: false,\n clearText: 'Clear',\n closeOnDateSelection: true,\n closeText: 'Done',\n currentText: 'Today',\n datepickerPopup: 'yyyy-MM-dd',\n datepickerPopupTemplateUrl: 'uib/template/datepickerPopup/popup.html',\n datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',\n html5Types: {\n date: 'yyyy-MM-dd',\n 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',\n 'month': 'yyyy-MM'\n },\n onOpenFocus: true,\n showButtonBar: true,\n placement: 'auto bottom-left'\n})\n\n.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$log', '$parse', '$window', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig', '$datepickerPopupLiteralWarning',\nfunction($scope, $element, $attrs, $compile, $log, $parse, $window, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig, $datepickerPopupLiteralWarning) {\n var cache = {},\n isHtml5DateInput = false;\n var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,\n datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl, scrollParentEl,\n ngModel, ngModelOptions, $popup, altInputFormats, watchListeners = [];\n\n this.init = function(_ngModel_) {\n ngModel = _ngModel_;\n ngModelOptions = angular.isObject(_ngModel_.$options) ?\n _ngModel_.$options :\n {\n timezone: null\n };\n closeOnDateSelection = angular.isDefined($attrs.closeOnDateSelection) ?\n $scope.$parent.$eval($attrs.closeOnDateSelection) :\n datepickerPopupConfig.closeOnDateSelection;\n appendToBody = angular.isDefined($attrs.datepickerAppendToBody) ?\n $scope.$parent.$eval($attrs.datepickerAppendToBody) :\n datepickerPopupConfig.appendToBody;\n onOpenFocus = angular.isDefined($attrs.onOpenFocus) ?\n $scope.$parent.$eval($attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;\n datepickerPopupTemplateUrl = angular.isDefined($attrs.datepickerPopupTemplateUrl) ?\n $attrs.datepickerPopupTemplateUrl :\n datepickerPopupConfig.datepickerPopupTemplateUrl;\n datepickerTemplateUrl = angular.isDefined($attrs.datepickerTemplateUrl) ?\n $attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;\n altInputFormats = angular.isDefined($attrs.altInputFormats) ?\n $scope.$parent.$eval($attrs.altInputFormats) :\n datepickerPopupConfig.altInputFormats;\n\n $scope.showButtonBar = angular.isDefined($attrs.showButtonBar) ?\n $scope.$parent.$eval($attrs.showButtonBar) :\n datepickerPopupConfig.showButtonBar;\n\n if (datepickerPopupConfig.html5Types[$attrs.type]) {\n dateFormat = datepickerPopupConfig.html5Types[$attrs.type];\n isHtml5DateInput = true;\n } else {\n dateFormat = $attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;\n $attrs.$observe('uibDatepickerPopup', function(value, oldValue) {\n var newDateFormat = value || datepickerPopupConfig.datepickerPopup;\n // Invalidate the $modelValue to ensure that formatters re-run\n // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764\n if (newDateFormat !== dateFormat) {\n dateFormat = newDateFormat;\n ngModel.$modelValue = null;\n\n if (!dateFormat) {\n throw new Error('uibDatepickerPopup must have a date format specified.');\n }\n }\n });\n }\n\n if (!dateFormat) {\n throw new Error('uibDatepickerPopup must have a date format specified.');\n }\n\n if (isHtml5DateInput && $attrs.uibDatepickerPopup) {\n throw new Error('HTML5 date input types do not support custom formats.');\n }\n\n // popup element used to display calendar\n popupEl = angular.element('
');\n\n popupEl.attr({\n 'ng-model': 'date',\n 'ng-change': 'dateSelection(date)',\n 'template-url': datepickerPopupTemplateUrl\n });\n\n // datepicker element\n datepickerEl = angular.element(popupEl.children()[0]);\n datepickerEl.attr('template-url', datepickerTemplateUrl);\n\n if (!$scope.datepickerOptions) {\n $scope.datepickerOptions = {};\n }\n\n if (isHtml5DateInput) {\n if ($attrs.type === 'month') {\n $scope.datepickerOptions.datepickerMode = 'month';\n $scope.datepickerOptions.minMode = 'month';\n }\n }\n\n datepickerEl.attr('datepicker-options', 'datepickerOptions');\n\n if (!isHtml5DateInput) {\n // Internal API to maintain the correct ng-invalid-[key] class\n ngModel.$$parserName = 'date';\n ngModel.$validators.date = validator;\n ngModel.$parsers.unshift(parseDate);\n ngModel.$formatters.push(function(value) {\n if (ngModel.$isEmpty(value)) {\n $scope.date = value;\n return value;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);\n\n return dateParser.filter($scope.date, dateFormat);\n });\n } else {\n ngModel.$formatters.push(function(value) {\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);\n return value;\n });\n }\n\n // Detect changes in the view from the text box\n ngModel.$viewChangeListeners.push(function() {\n $scope.date = parseDateString(ngModel.$viewValue);\n });\n\n $element.on('keydown', inputKeydownBind);\n\n $popup = $compile(popupEl)($scope);\n // Prevent jQuery cache memory leak (template is now redundant after linking)\n popupEl.remove();\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else {\n $element.after($popup);\n }\n\n $scope.$on('$destroy', function() {\n if ($scope.isOpen === true) {\n if (!$rootScope.$$phase) {\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n }\n }\n\n $popup.remove();\n $element.off('keydown', inputKeydownBind);\n $document.off('click', documentClickBind);\n if (scrollParentEl) {\n scrollParentEl.off('scroll', positionPopup);\n }\n angular.element($window).off('resize', positionPopup);\n\n //Clear all watch listeners on destroy\n while (watchListeners.length) {\n watchListeners.shift()();\n }\n });\n };\n\n $scope.getText = function(key) {\n return $scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\n };\n\n $scope.isDisabled = function(date) {\n if (date === 'today') {\n date = dateParser.fromTimezone(new Date(), ngModelOptions.timezone);\n }\n\n var dates = {};\n angular.forEach(['minDate', 'maxDate'], function(key) {\n if (!$scope.datepickerOptions[key]) {\n dates[key] = null;\n } else if (angular.isDate($scope.datepickerOptions[key])) {\n dates[key] = new Date($scope.datepickerOptions[key]);\n } else {\n if ($datepickerPopupLiteralWarning) {\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\n }\n\n dates[key] = new Date(dateFilter($scope.datepickerOptions[key], 'medium'));\n }\n });\n\n return $scope.datepickerOptions &&\n dates.minDate && $scope.compare(date, dates.minDate) < 0 ||\n dates.maxDate && $scope.compare(date, dates.maxDate) > 0;\n };\n\n $scope.compare = function(date1, date2) {\n return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n };\n\n // Inner change\n $scope.dateSelection = function(dt) {\n $scope.date = dt;\n var date = $scope.date ? dateParser.filter($scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function\n $element.val(date);\n ngModel.$setViewValue(date);\n\n if (closeOnDateSelection) {\n $scope.isOpen = false;\n $element[0].focus();\n }\n };\n\n $scope.keydown = function(evt) {\n if (evt.which === 27) {\n evt.stopPropagation();\n $scope.isOpen = false;\n $element[0].focus();\n }\n };\n\n $scope.select = function(date, evt) {\n evt.stopPropagation();\n\n if (date === 'today') {\n var today = new Date();\n if (angular.isDate($scope.date)) {\n date = new Date($scope.date);\n date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());\n } else {\n date = dateParser.fromTimezone(today, ngModelOptions.timezone);\n date.setHours(0, 0, 0, 0);\n }\n }\n $scope.dateSelection(date);\n };\n\n $scope.close = function(evt) {\n evt.stopPropagation();\n\n $scope.isOpen = false;\n $element[0].focus();\n };\n\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\n if ($attrs.ngDisabled) {\n watchListeners.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(disabled) {\n $scope.disabled = disabled;\n }));\n }\n\n $scope.$watch('isOpen', function(value) {\n if (value) {\n if (!$scope.disabled) {\n $timeout(function() {\n positionPopup();\n\n if (onOpenFocus) {\n $scope.$broadcast('uib:datepicker.focus');\n }\n\n $document.on('click', documentClickBind);\n\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\n if (appendToBody || $position.parsePlacement(placement)[2]) {\n scrollParentEl = scrollParentEl || angular.element($position.scrollParent($element));\n if (scrollParentEl) {\n scrollParentEl.on('scroll', positionPopup);\n }\n } else {\n scrollParentEl = null;\n }\n\n angular.element($window).on('resize', positionPopup);\n }, 0, false);\n } else {\n $scope.isOpen = false;\n }\n } else {\n $document.off('click', documentClickBind);\n if (scrollParentEl) {\n scrollParentEl.off('scroll', positionPopup);\n }\n angular.element($window).off('resize', positionPopup);\n }\n });\n\n function cameltoDash(string) {\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\n }\n\n function parseDateString(viewValue) {\n var date = dateParser.parse(viewValue, dateFormat, $scope.date);\n if (isNaN(date)) {\n for (var i = 0; i < altInputFormats.length; i++) {\n date = dateParser.parse(viewValue, altInputFormats[i], $scope.date);\n if (!isNaN(date)) {\n return date;\n }\n }\n }\n return date;\n }\n\n function parseDate(viewValue) {\n if (angular.isNumber(viewValue)) {\n // presumably timestamp to date object\n viewValue = new Date(viewValue);\n }\n\n if (!viewValue) {\n return null;\n }\n\n if (angular.isDate(viewValue) && !isNaN(viewValue)) {\n return viewValue;\n }\n\n if (angular.isString(viewValue)) {\n var date = parseDateString(viewValue);\n if (!isNaN(date)) {\n return dateParser.fromTimezone(date, ngModelOptions.timezone);\n }\n }\n\n return ngModel.$options && ngModel.$options.allowInvalid ? viewValue : undefined;\n }\n\n function validator(modelValue, viewValue) {\n var value = modelValue || viewValue;\n\n if (!$attrs.ngRequired && !value) {\n return true;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n\n if (!value) {\n return true;\n }\n\n if (angular.isDate(value) && !isNaN(value)) {\n return true;\n }\n\n if (angular.isString(value)) {\n return !isNaN(parseDateString(value));\n }\n\n return false;\n }\n\n function documentClickBind(event) {\n if (!$scope.isOpen && $scope.disabled) {\n return;\n }\n\n var popup = $popup[0];\n var dpContainsTarget = $element[0].contains(event.target);\n // The popup node may not be an element node\n // In some browsers (IE) only element nodes have the 'contains' function\n var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);\n if ($scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n }\n }\n\n function inputKeydownBind(evt) {\n if (evt.which === 27 && $scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n $element[0].focus();\n } else if (evt.which === 40 && !$scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.$apply(function() {\n $scope.isOpen = true;\n });\n }\n }\n\n function positionPopup() {\n if ($scope.isOpen) {\n var dpElement = angular.element($popup[0].querySelector('.uib-datepicker-popup'));\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\n var position = $position.positionElements($element, dpElement, placement, appendToBody);\n dpElement.css({top: position.top + 'px', left: position.left + 'px'});\n if (dpElement.hasClass('uib-position-measure')) {\n dpElement.removeClass('uib-position-measure');\n }\n }\n }\n\n $scope.$on('uib:datepicker.mode', function() {\n $timeout(positionPopup, 0, false);\n });\n}])\n\n.directive('uibDatepickerPopup', function() {\n return {\n require: ['ngModel', 'uibDatepickerPopup'],\n controller: 'UibDatepickerPopupController',\n scope: {\n datepickerOptions: '=?',\n isOpen: '=?',\n currentText: '@',\n clearText: '@',\n closeText: '@'\n },\n link: function(scope, element, attrs, ctrls) {\n var ngModel = ctrls[0],\n ctrl = ctrls[1];\n\n ctrl.init(ngModel);\n }\n };\n})\n\n.directive('uibDatepickerPopupWrap', function() {\n return {\n restrict: 'A',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';\n }\n };\n});\n\nangular.module('ui.bootstrap.debounce', [])\n/**\n * A helper, internal service that debounces a function\n */\n .factory('$$debounce', ['$timeout', function($timeout) {\n return function(callback, debounceTime) {\n var timeoutPromise;\n\n return function() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n\n timeoutPromise = $timeout(function() {\n callback.apply(self, args);\n }, debounceTime);\n };\n };\n }]);\n\nangular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])\n\n.constant('uibDropdownConfig', {\n appendToOpenClass: 'uib-dropdown-open',\n openClass: 'open'\n})\n\n.service('uibDropdownService', ['$document', '$rootScope', function($document, $rootScope) {\n var openScope = null;\n\n this.open = function(dropdownScope, element) {\n if (!openScope) {\n $document.on('click', closeDropdown);\n }\n\n if (openScope && openScope !== dropdownScope) {\n openScope.isOpen = false;\n }\n\n openScope = dropdownScope;\n };\n\n this.close = function(dropdownScope, element) {\n if (openScope === dropdownScope) {\n openScope = null;\n $document.off('click', closeDropdown);\n $document.off('keydown', this.keybindFilter);\n }\n };\n\n var closeDropdown = function(evt) {\n // This method may still be called during the same mouse event that\n // unbound this event handler. So check openScope before proceeding.\n if (!openScope) { return; }\n\n if (evt && openScope.getAutoClose() === 'disabled') { return; }\n\n if (evt && evt.which === 3) { return; }\n\n var toggleElement = openScope.getToggleElement();\n if (evt && toggleElement && toggleElement[0].contains(evt.target)) {\n return;\n }\n\n var dropdownElement = openScope.getDropdownElement();\n if (evt && openScope.getAutoClose() === 'outsideClick' &&\n dropdownElement && dropdownElement[0].contains(evt.target)) {\n return;\n }\n\n openScope.isOpen = false;\n openScope.focusToggleElement();\n\n if (!$rootScope.$$phase) {\n openScope.$apply();\n }\n };\n\n this.keybindFilter = function(evt) {\n var dropdownElement = openScope.getDropdownElement();\n var toggleElement = openScope.getToggleElement();\n var dropdownElementTargeted = dropdownElement && dropdownElement[0].contains(evt.target);\n var toggleElementTargeted = toggleElement && toggleElement[0].contains(evt.target);\n if (evt.which === 27) {\n evt.stopPropagation();\n openScope.focusToggleElement();\n closeDropdown();\n } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen && (dropdownElementTargeted || toggleElementTargeted)) {\n evt.preventDefault();\n evt.stopPropagation();\n openScope.focusDropdownEntry(evt.which);\n }\n };\n}])\n\n.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {\n var self = this,\n scope = $scope.$new(), // create a child scope so we are not polluting original one\n templateScope,\n appendToOpenClass = dropdownConfig.appendToOpenClass,\n openClass = dropdownConfig.openClass,\n getIsOpen,\n setIsOpen = angular.noop,\n toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,\n appendToBody = false,\n appendTo = null,\n keynavEnabled = false,\n selectedOption = null,\n body = $document.find('body');\n\n $element.addClass('dropdown');\n\n this.init = function() {\n if ($attrs.isOpen) {\n getIsOpen = $parse($attrs.isOpen);\n setIsOpen = getIsOpen.assign;\n\n $scope.$watch(getIsOpen, function(value) {\n scope.isOpen = !!value;\n });\n }\n\n if (angular.isDefined($attrs.dropdownAppendTo)) {\n var appendToEl = $parse($attrs.dropdownAppendTo)(scope);\n if (appendToEl) {\n appendTo = angular.element(appendToEl);\n }\n }\n\n appendToBody = angular.isDefined($attrs.dropdownAppendToBody);\n keynavEnabled = angular.isDefined($attrs.keyboardNav);\n\n if (appendToBody && !appendTo) {\n appendTo = body;\n }\n\n if (appendTo && self.dropdownMenu) {\n appendTo.append(self.dropdownMenu);\n $element.on('$destroy', function handleDestroyEvent() {\n self.dropdownMenu.remove();\n });\n }\n };\n\n this.toggle = function(open) {\n scope.isOpen = arguments.length ? !!open : !scope.isOpen;\n if (angular.isFunction(setIsOpen)) {\n setIsOpen(scope, scope.isOpen);\n }\n\n return scope.isOpen;\n };\n\n // Allow other directives to watch status\n this.isOpen = function() {\n return scope.isOpen;\n };\n\n scope.getToggleElement = function() {\n return self.toggleElement;\n };\n\n scope.getAutoClose = function() {\n return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'\n };\n\n scope.getElement = function() {\n return $element;\n };\n\n scope.isKeynavEnabled = function() {\n return keynavEnabled;\n };\n\n scope.focusDropdownEntry = function(keyCode) {\n var elems = self.dropdownMenu ? //If append to body is used.\n angular.element(self.dropdownMenu).find('a') :\n $element.find('ul').eq(0).find('a');\n\n switch (keyCode) {\n case 40: {\n if (!angular.isNumber(self.selectedOption)) {\n self.selectedOption = 0;\n } else {\n self.selectedOption = self.selectedOption === elems.length - 1 ?\n self.selectedOption :\n self.selectedOption + 1;\n }\n break;\n }\n case 38: {\n if (!angular.isNumber(self.selectedOption)) {\n self.selectedOption = elems.length - 1;\n } else {\n self.selectedOption = self.selectedOption === 0 ?\n 0 : self.selectedOption - 1;\n }\n break;\n }\n }\n elems[self.selectedOption].focus();\n };\n\n scope.getDropdownElement = function() {\n return self.dropdownMenu;\n };\n\n scope.focusToggleElement = function() {\n if (self.toggleElement) {\n self.toggleElement[0].focus();\n }\n };\n\n scope.$watch('isOpen', function(isOpen, wasOpen) {\n if (appendTo && self.dropdownMenu) {\n var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),\n css,\n rightalign,\n scrollbarPadding,\n scrollbarWidth = 0;\n\n css = {\n top: pos.top + 'px',\n display: isOpen ? 'block' : 'none'\n };\n\n rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');\n if (!rightalign) {\n css.left = pos.left + 'px';\n css.right = 'auto';\n } else {\n css.left = 'auto';\n scrollbarPadding = $position.scrollbarPadding(appendTo);\n\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n scrollbarWidth = scrollbarPadding.scrollbarWidth;\n }\n\n css.right = window.innerWidth - scrollbarWidth -\n (pos.left + $element.prop('offsetWidth')) + 'px';\n }\n\n // Need to adjust our positioning to be relative to the appendTo container\n // if it's not the body element\n if (!appendToBody) {\n var appendOffset = $position.offset(appendTo);\n\n css.top = pos.top - appendOffset.top + 'px';\n\n if (!rightalign) {\n css.left = pos.left - appendOffset.left + 'px';\n } else {\n css.right = window.innerWidth -\n (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';\n }\n }\n\n self.dropdownMenu.css(css);\n }\n\n var openContainer = appendTo ? appendTo : $element;\n var hasOpenClass = openContainer.hasClass(appendTo ? appendToOpenClass : openClass);\n\n if (hasOpenClass === !isOpen) {\n $animate[isOpen ? 'addClass' : 'removeClass'](openContainer, appendTo ? appendToOpenClass : openClass).then(function() {\n if (angular.isDefined(isOpen) && isOpen !== wasOpen) {\n toggleInvoker($scope, { open: !!isOpen });\n }\n });\n }\n\n if (isOpen) {\n if (self.dropdownMenuTemplateUrl) {\n $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {\n templateScope = scope.$new();\n $compile(tplContent.trim())(templateScope, function(dropdownElement) {\n var newEl = dropdownElement;\n self.dropdownMenu.replaceWith(newEl);\n self.dropdownMenu = newEl;\n $document.on('keydown', uibDropdownService.keybindFilter);\n });\n });\n } else {\n $document.on('keydown', uibDropdownService.keybindFilter);\n }\n\n scope.focusToggleElement();\n uibDropdownService.open(scope, $element);\n } else {\n uibDropdownService.close(scope, $element);\n if (self.dropdownMenuTemplateUrl) {\n if (templateScope) {\n templateScope.$destroy();\n }\n var newEl = angular.element('
    ');\n self.dropdownMenu.replaceWith(newEl);\n self.dropdownMenu = newEl;\n }\n\n self.selectedOption = null;\n }\n\n if (angular.isFunction(setIsOpen)) {\n setIsOpen($scope, isOpen);\n }\n });\n}])\n\n.directive('uibDropdown', function() {\n return {\n controller: 'UibDropdownController',\n link: function(scope, element, attrs, dropdownCtrl) {\n dropdownCtrl.init();\n }\n };\n})\n\n.directive('uibDropdownMenu', function() {\n return {\n restrict: 'A',\n require: '?^uibDropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {\n return;\n }\n\n element.addClass('dropdown-menu');\n\n var tplUrl = attrs.templateUrl;\n if (tplUrl) {\n dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;\n }\n\n if (!dropdownCtrl.dropdownMenu) {\n dropdownCtrl.dropdownMenu = element;\n }\n }\n };\n})\n\n.directive('uibDropdownToggle', function() {\n return {\n require: '?^uibDropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if (!dropdownCtrl) {\n return;\n }\n\n element.addClass('dropdown-toggle');\n\n dropdownCtrl.toggleElement = element;\n\n var toggleDropdown = function(event) {\n event.preventDefault();\n\n if (!element.hasClass('disabled') && !attrs.disabled) {\n scope.$apply(function() {\n dropdownCtrl.toggle();\n });\n }\n };\n\n element.bind('click', toggleDropdown);\n\n // WAI-ARIA\n element.attr({ 'aria-haspopup': true, 'aria-expanded': false });\n scope.$watch(dropdownCtrl.isOpen, function(isOpen) {\n element.attr('aria-expanded', !!isOpen);\n });\n\n scope.$on('$destroy', function() {\n element.unbind('click', toggleDropdown);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.stackedMap', [])\n/**\n * A helper, internal data structure that acts as a map but also allows getting / removing\n * elements in the LIFO order\n */\n .factory('$$stackedMap', function() {\n return {\n createNew: function() {\n var stack = [];\n\n return {\n add: function(key, value) {\n stack.push({\n key: key,\n value: value\n });\n },\n get: function(key) {\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n return stack[i];\n }\n }\n },\n keys: function() {\n var keys = [];\n for (var i = 0; i < stack.length; i++) {\n keys.push(stack[i].key);\n }\n return keys;\n },\n top: function() {\n return stack[stack.length - 1];\n },\n remove: function(key) {\n var idx = -1;\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n idx = i;\n break;\n }\n }\n return stack.splice(idx, 1)[0];\n },\n removeTop: function() {\n return stack.pop();\n },\n length: function() {\n return stack.length;\n }\n };\n }\n };\n });\nangular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap', 'ui.bootstrap.position'])\n/**\n * A helper, internal data structure that stores all references attached to key\n */\n .factory('$$multiMap', function() {\n return {\n createNew: function() {\n var map = {};\n\n return {\n entries: function() {\n return Object.keys(map).map(function(key) {\n return {\n key: key,\n value: map[key]\n };\n });\n },\n get: function(key) {\n return map[key];\n },\n hasKey: function(key) {\n return !!map[key];\n },\n keys: function() {\n return Object.keys(map);\n },\n put: function(key, value) {\n if (!map[key]) {\n map[key] = [];\n }\n\n map[key].push(value);\n },\n remove: function(key, value) {\n var values = map[key];\n\n if (!values) {\n return;\n }\n\n var idx = values.indexOf(value);\n\n if (idx !== -1) {\n values.splice(idx, 1);\n }\n\n if (!values.length) {\n delete map[key];\n }\n }\n };\n }\n };\n })\n\n/**\n * Pluggable resolve mechanism for the modal resolve resolution\n * Supports UI Router's $resolve service\n */\n .provider('$uibResolve', function() {\n var resolve = this;\n this.resolver = null;\n\n this.setResolver = function(resolver) {\n this.resolver = resolver;\n };\n\n this.$get = ['$injector', '$q', function($injector, $q) {\n var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;\n return {\n resolve: function(invocables, locals, parent, self) {\n if (resolver) {\n return resolver.resolve(invocables, locals, parent, self);\n }\n\n var promises = [];\n\n angular.forEach(invocables, function(value) {\n if (angular.isFunction(value) || angular.isArray(value)) {\n promises.push($q.resolve($injector.invoke(value)));\n } else if (angular.isString(value)) {\n promises.push($q.resolve($injector.get(value)));\n } else {\n promises.push($q.resolve(value));\n }\n });\n\n return $q.all(promises).then(function(resolves) {\n var resolveObj = {};\n var resolveIter = 0;\n angular.forEach(invocables, function(value, key) {\n resolveObj[key] = resolves[resolveIter++];\n });\n\n return resolveObj;\n });\n }\n };\n }];\n })\n\n/**\n * A helper directive for the $modal service. It creates a backdrop element.\n */\n .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',\n function($animate, $injector, $modalStack) {\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n tElement.addClass(tAttrs.backdropClass);\n return linkFn;\n }\n };\n\n function linkFn(scope, element, attrs) {\n if (attrs.modalInClass) {\n $animate.addClass(element, attrs.modalInClass);\n\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\n var done = setIsAsync();\n if (scope.modalOptions.animation) {\n $animate.removeClass(element, attrs.modalInClass).then(done);\n } else {\n done();\n }\n });\n }\n }\n }])\n\n .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',\n function($modalStack, $q, $animateCss, $document) {\n return {\n scope: {\n index: '@'\n },\n restrict: 'A',\n transclude: true,\n templateUrl: function(tElement, tAttrs) {\n return tAttrs.templateUrl || 'uib/template/modal/window.html';\n },\n link: function(scope, element, attrs) {\n element.addClass(attrs.windowTopClass || '');\n scope.size = attrs.size;\n\n scope.close = function(evt) {\n var modal = $modalStack.getTop();\n if (modal && modal.value.backdrop &&\n modal.value.backdrop !== 'static' &&\n evt.target === evt.currentTarget) {\n evt.preventDefault();\n evt.stopPropagation();\n $modalStack.dismiss(modal.key, 'backdrop click');\n }\n };\n\n // moved from template to fix issue #2280\n element.on('click', scope.close);\n\n // This property is only added to the scope for the purpose of detecting when this directive is rendered.\n // We can detect that by using this property in the template associated with this directive and then use\n // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.\n scope.$isRendered = true;\n\n // Deferred object that will be resolved when this modal is render.\n var modalRenderDeferObj = $q.defer();\n // Resolve render promise post-digest\n scope.$$postDigest(function() {\n modalRenderDeferObj.resolve();\n });\n\n modalRenderDeferObj.promise.then(function() {\n var animationPromise = null;\n\n if (attrs.modalInClass) {\n animationPromise = $animateCss(element, {\n addClass: attrs.modalInClass\n }).start();\n\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\n var done = setIsAsync();\n $animateCss(element, {\n removeClass: attrs.modalInClass\n }).start().then(done);\n });\n }\n\n\n $q.when(animationPromise).then(function() {\n // Notify {@link $modalStack} that modal is rendered.\n var modal = $modalStack.getTop();\n if (modal) {\n $modalStack.modalRendered(modal.key);\n }\n\n /**\n * If something within the freshly-opened modal already has focus (perhaps via a\n * directive that causes focus). then no need to try and focus anything.\n */\n if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {\n var inputWithAutofocus = element[0].querySelector('[autofocus]');\n /**\n * Auto-focusing of a freshly-opened modal element causes any child elements\n * with the autofocus attribute to lose focus. This is an issue on touch\n * based devices which will show and then hide the onscreen keyboard.\n * Attempts to refocus the autofocus element via JavaScript will not reopen\n * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus\n * the modal element if the modal does not contain an autofocus element.\n */\n if (inputWithAutofocus) {\n inputWithAutofocus.focus();\n } else {\n element[0].focus();\n }\n }\n });\n });\n }\n };\n }])\n\n .directive('uibModalAnimationClass', function() {\n return {\n compile: function(tElement, tAttrs) {\n if (tAttrs.modalAnimation) {\n tElement.addClass(tAttrs.uibModalAnimationClass);\n }\n }\n };\n })\n\n .directive('uibModalTransclude', ['$animate', function($animate) {\n return {\n link: function(scope, element, attrs, controller, transclude) {\n transclude(scope.$parent, function(clone) {\n element.empty();\n $animate.enter(clone, element);\n });\n }\n };\n }])\n\n .factory('$uibModalStack', ['$animate', '$animateCss', '$document',\n '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',\n function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {\n var OPENED_MODAL_CLASS = 'modal-open';\n\n var backdropDomEl, backdropScope;\n var openedWindows = $$stackedMap.createNew();\n var openedClasses = $$multiMap.createNew();\n var $modalStack = {\n NOW_CLOSING_EVENT: 'modal.stack.now-closing'\n };\n var topModalIndex = 0;\n var previousTopOpenedModal = null;\n\n //Modal focus behavior\n var tabbableSelector = 'a[href], area[href], input:not([disabled]):not([tabindex=\\'-1\\']), ' +\n 'button:not([disabled]):not([tabindex=\\'-1\\']),select:not([disabled]):not([tabindex=\\'-1\\']), textarea:not([disabled]):not([tabindex=\\'-1\\']), ' +\n 'iframe, object, embed, *[tabindex]:not([tabindex=\\'-1\\']), *[contenteditable=true]';\n var scrollbarPadding;\n var SNAKE_CASE_REGEXP = /[A-Z]/g;\n\n // TODO: extract into common dependency with tooltip\n function snake_case(name) {\n var separator = '-';\n return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n function isVisible(element) {\n return !!(element.offsetWidth ||\n element.offsetHeight ||\n element.getClientRects().length);\n }\n\n function backdropIndex() {\n var topBackdropIndex = -1;\n var opened = openedWindows.keys();\n for (var i = 0; i < opened.length; i++) {\n if (openedWindows.get(opened[i]).value.backdrop) {\n topBackdropIndex = i;\n }\n }\n\n // If any backdrop exist, ensure that it's index is always\n // right below the top modal\n if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {\n topBackdropIndex = topModalIndex;\n }\n return topBackdropIndex;\n }\n\n $rootScope.$watch(backdropIndex, function(newBackdropIndex) {\n if (backdropScope) {\n backdropScope.index = newBackdropIndex;\n }\n });\n\n function removeModalWindow(modalInstance, elementToReceiveFocus) {\n var modalWindow = openedWindows.get(modalInstance).value;\n var appendToElement = modalWindow.appendTo;\n\n //clean up the stack\n openedWindows.remove(modalInstance);\n previousTopOpenedModal = openedWindows.top();\n if (previousTopOpenedModal) {\n topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);\n }\n\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {\n var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;\n openedClasses.remove(modalBodyClass, modalInstance);\n var areAnyOpen = openedClasses.hasKey(modalBodyClass);\n appendToElement.toggleClass(modalBodyClass, areAnyOpen);\n if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n if (scrollbarPadding.originalRight) {\n appendToElement.css({paddingRight: scrollbarPadding.originalRight + 'px'});\n } else {\n appendToElement.css({paddingRight: ''});\n }\n scrollbarPadding = null;\n }\n toggleTopWindowClass(true);\n }, modalWindow.closedDeferred);\n checkRemoveBackdrop();\n\n //move focus to specified element if available, or else to body\n if (elementToReceiveFocus && elementToReceiveFocus.focus) {\n elementToReceiveFocus.focus();\n } else if (appendToElement.focus) {\n appendToElement.focus();\n }\n }\n\n // Add or remove \"windowTopClass\" from the top window in the stack\n function toggleTopWindowClass(toggleSwitch) {\n var modalWindow;\n\n if (openedWindows.length() > 0) {\n modalWindow = openedWindows.top().value;\n modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);\n }\n }\n\n function checkRemoveBackdrop() {\n //remove backdrop if no longer needed\n if (backdropDomEl && backdropIndex() === -1) {\n var backdropScopeRef = backdropScope;\n removeAfterAnimate(backdropDomEl, backdropScope, function() {\n backdropScopeRef = null;\n });\n backdropDomEl = undefined;\n backdropScope = undefined;\n }\n }\n\n function removeAfterAnimate(domEl, scope, done, closedDeferred) {\n var asyncDeferred;\n var asyncPromise = null;\n var setIsAsync = function() {\n if (!asyncDeferred) {\n asyncDeferred = $q.defer();\n asyncPromise = asyncDeferred.promise;\n }\n\n return function asyncDone() {\n asyncDeferred.resolve();\n };\n };\n scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);\n\n // Note that it's intentional that asyncPromise might be null.\n // That's when setIsAsync has not been called during the\n // NOW_CLOSING_EVENT broadcast.\n return $q.when(asyncPromise).then(afterAnimating);\n\n function afterAnimating() {\n if (afterAnimating.done) {\n return;\n }\n afterAnimating.done = true;\n\n $animate.leave(domEl).then(function() {\n if (done) {\n done();\n }\n\n domEl.remove();\n if (closedDeferred) {\n closedDeferred.resolve();\n }\n });\n\n scope.$destroy();\n }\n }\n\n $document.on('keydown', keydownListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keydown', keydownListener);\n });\n\n function keydownListener(evt) {\n if (evt.isDefaultPrevented()) {\n return evt;\n }\n\n var modal = openedWindows.top();\n if (modal) {\n switch (evt.which) {\n case 27: {\n if (modal.value.keyboard) {\n evt.preventDefault();\n $rootScope.$apply(function() {\n $modalStack.dismiss(modal.key, 'escape key press');\n });\n }\n break;\n }\n case 9: {\n var list = $modalStack.loadFocusElementList(modal);\n var focusChanged = false;\n if (evt.shiftKey) {\n if ($modalStack.isFocusInFirstItem(evt, list) || $modalStack.isModalFocused(evt, modal)) {\n focusChanged = $modalStack.focusLastFocusableElement(list);\n }\n } else {\n if ($modalStack.isFocusInLastItem(evt, list)) {\n focusChanged = $modalStack.focusFirstFocusableElement(list);\n }\n }\n\n if (focusChanged) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n break;\n }\n }\n }\n }\n\n $modalStack.open = function(modalInstance, modal) {\n var modalOpener = $document[0].activeElement,\n modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;\n\n toggleTopWindowClass(false);\n\n // Store the current top first, to determine what index we ought to use\n // for the current top modal\n previousTopOpenedModal = openedWindows.top();\n\n openedWindows.add(modalInstance, {\n deferred: modal.deferred,\n renderDeferred: modal.renderDeferred,\n closedDeferred: modal.closedDeferred,\n modalScope: modal.scope,\n backdrop: modal.backdrop,\n keyboard: modal.keyboard,\n openedClass: modal.openedClass,\n windowTopClass: modal.windowTopClass,\n animation: modal.animation,\n appendTo: modal.appendTo\n });\n\n openedClasses.put(modalBodyClass, modalInstance);\n\n var appendToElement = modal.appendTo,\n currBackdropIndex = backdropIndex();\n\n if (!appendToElement.length) {\n throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');\n }\n\n if (currBackdropIndex >= 0 && !backdropDomEl) {\n backdropScope = $rootScope.$new(true);\n backdropScope.modalOptions = modal;\n backdropScope.index = currBackdropIndex;\n backdropDomEl = angular.element('
    ');\n backdropDomEl.attr({\n 'class': 'modal-backdrop',\n 'ng-style': '{\\'z-index\\': 1040 + (index && 1 || 0) + index*10}',\n 'uib-modal-animation-class': 'fade',\n 'modal-in-class': 'in'\n });\n if (modal.backdropClass) {\n backdropDomEl.addClass(modal.backdropClass);\n }\n\n if (modal.animation) {\n backdropDomEl.attr('modal-animation', 'true');\n }\n $compile(backdropDomEl)(backdropScope);\n $animate.enter(backdropDomEl, appendToElement);\n if ($uibPosition.isScrollable(appendToElement)) {\n scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});\n }\n }\n }\n\n var content;\n if (modal.component) {\n content = document.createElement(snake_case(modal.component.name));\n content = angular.element(content);\n content.attr({\n resolve: '$resolve',\n 'modal-instance': '$uibModalInstance',\n close: '$close($value)',\n dismiss: '$dismiss($value)'\n });\n } else {\n content = modal.content;\n }\n\n // Set the top modal index based on the index of the previous top modal\n topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;\n var angularDomEl = angular.element('
    ');\n angularDomEl.attr({\n 'class': 'modal',\n 'template-url': modal.windowTemplateUrl,\n 'window-top-class': modal.windowTopClass,\n 'role': 'dialog',\n 'aria-labelledby': modal.ariaLabelledBy,\n 'aria-describedby': modal.ariaDescribedBy,\n 'size': modal.size,\n 'index': topModalIndex,\n 'animate': 'animate',\n 'ng-style': '{\\'z-index\\': 1050 + $$topModalIndex*10, display: \\'block\\'}',\n 'tabindex': -1,\n 'uib-modal-animation-class': 'fade',\n 'modal-in-class': 'in'\n }).append(content);\n if (modal.windowClass) {\n angularDomEl.addClass(modal.windowClass);\n }\n\n if (modal.animation) {\n angularDomEl.attr('modal-animation', 'true');\n }\n\n appendToElement.addClass(modalBodyClass);\n if (modal.scope) {\n // we need to explicitly add the modal index to the modal scope\n // because it is needed by ngStyle to compute the zIndex property.\n modal.scope.$$topModalIndex = topModalIndex;\n }\n $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);\n\n openedWindows.top().value.modalDomEl = angularDomEl;\n openedWindows.top().value.modalOpener = modalOpener;\n };\n\n function broadcastClosing(modalWindow, resultOrReason, closing) {\n return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;\n }\n\n $modalStack.close = function(modalInstance, result) {\n var modalWindow = openedWindows.get(modalInstance);\n if (modalWindow && broadcastClosing(modalWindow, result, true)) {\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\n modalWindow.value.deferred.resolve(result);\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\n return true;\n }\n return !modalWindow;\n };\n\n $modalStack.dismiss = function(modalInstance, reason) {\n var modalWindow = openedWindows.get(modalInstance);\n if (modalWindow && broadcastClosing(modalWindow, reason, false)) {\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\n modalWindow.value.deferred.reject(reason);\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\n return true;\n }\n return !modalWindow;\n };\n\n $modalStack.dismissAll = function(reason) {\n var topModal = this.getTop();\n while (topModal && this.dismiss(topModal.key, reason)) {\n topModal = this.getTop();\n }\n };\n\n $modalStack.getTop = function() {\n return openedWindows.top();\n };\n\n $modalStack.modalRendered = function(modalInstance) {\n var modalWindow = openedWindows.get(modalInstance);\n if (modalWindow) {\n modalWindow.value.renderDeferred.resolve();\n }\n };\n\n $modalStack.focusFirstFocusableElement = function(list) {\n if (list.length > 0) {\n list[0].focus();\n return true;\n }\n return false;\n };\n\n $modalStack.focusLastFocusableElement = function(list) {\n if (list.length > 0) {\n list[list.length - 1].focus();\n return true;\n }\n return false;\n };\n\n $modalStack.isModalFocused = function(evt, modalWindow) {\n if (evt && modalWindow) {\n var modalDomEl = modalWindow.value.modalDomEl;\n if (modalDomEl && modalDomEl.length) {\n return (evt.target || evt.srcElement) === modalDomEl[0];\n }\n }\n return false;\n };\n\n $modalStack.isFocusInFirstItem = function(evt, list) {\n if (list.length > 0) {\n return (evt.target || evt.srcElement) === list[0];\n }\n return false;\n };\n\n $modalStack.isFocusInLastItem = function(evt, list) {\n if (list.length > 0) {\n return (evt.target || evt.srcElement) === list[list.length - 1];\n }\n return false;\n };\n\n $modalStack.loadFocusElementList = function(modalWindow) {\n if (modalWindow) {\n var modalDomE1 = modalWindow.value.modalDomEl;\n if (modalDomE1 && modalDomE1.length) {\n var elements = modalDomE1[0].querySelectorAll(tabbableSelector);\n return elements ?\n Array.prototype.filter.call(elements, function(element) {\n return isVisible(element);\n }) : elements;\n }\n }\n };\n\n return $modalStack;\n }])\n\n .provider('$uibModal', function() {\n var $modalProvider = {\n options: {\n animation: true,\n backdrop: true, //can also be false or 'static'\n keyboard: true\n },\n $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',\n function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {\n var $modal = {};\n\n function getTemplatePromise(options) {\n return options.template ? $q.when(options.template) :\n $templateRequest(angular.isFunction(options.templateUrl) ?\n options.templateUrl() : options.templateUrl);\n }\n\n var promiseChain = null;\n $modal.getPromiseChain = function() {\n return promiseChain;\n };\n\n $modal.open = function(modalOptions) {\n var modalResultDeferred = $q.defer();\n var modalOpenedDeferred = $q.defer();\n var modalClosedDeferred = $q.defer();\n var modalRenderDeferred = $q.defer();\n\n //prepare an instance of a modal to be injected into controllers and returned to a caller\n var modalInstance = {\n result: modalResultDeferred.promise,\n opened: modalOpenedDeferred.promise,\n closed: modalClosedDeferred.promise,\n rendered: modalRenderDeferred.promise,\n close: function (result) {\n return $modalStack.close(modalInstance, result);\n },\n dismiss: function (reason) {\n return $modalStack.dismiss(modalInstance, reason);\n }\n };\n\n //merge and clean up options\n modalOptions = angular.extend({}, $modalProvider.options, modalOptions);\n modalOptions.resolve = modalOptions.resolve || {};\n modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);\n\n //verify options\n if (!modalOptions.component && !modalOptions.template && !modalOptions.templateUrl) {\n throw new Error('One of component or template or templateUrl options is required.');\n }\n\n var templateAndResolvePromise;\n if (modalOptions.component) {\n templateAndResolvePromise = $q.when($uibResolve.resolve(modalOptions.resolve, {}, null, null));\n } else {\n templateAndResolvePromise =\n $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);\n }\n\n function resolveWithTemplate() {\n return templateAndResolvePromise;\n }\n\n // Wait for the resolution of the existing promise chain.\n // Then switch to our own combined promise dependency (regardless of how the previous modal fared).\n // Then add to $modalStack and resolve opened.\n // Finally clean up the chain variable if no subsequent modal has overwritten it.\n var samePromise;\n samePromise = promiseChain = $q.all([promiseChain])\n .then(resolveWithTemplate, resolveWithTemplate)\n .then(function resolveSuccess(tplAndVars) {\n var providedScope = modalOptions.scope || $rootScope;\n\n var modalScope = providedScope.$new();\n modalScope.$close = modalInstance.close;\n modalScope.$dismiss = modalInstance.dismiss;\n\n modalScope.$on('$destroy', function() {\n if (!modalScope.$$uibDestructionScheduled) {\n modalScope.$dismiss('$uibUnscheduledDestruction');\n }\n });\n\n var modal = {\n scope: modalScope,\n deferred: modalResultDeferred,\n renderDeferred: modalRenderDeferred,\n closedDeferred: modalClosedDeferred,\n animation: modalOptions.animation,\n backdrop: modalOptions.backdrop,\n keyboard: modalOptions.keyboard,\n backdropClass: modalOptions.backdropClass,\n windowTopClass: modalOptions.windowTopClass,\n windowClass: modalOptions.windowClass,\n windowTemplateUrl: modalOptions.windowTemplateUrl,\n ariaLabelledBy: modalOptions.ariaLabelledBy,\n ariaDescribedBy: modalOptions.ariaDescribedBy,\n size: modalOptions.size,\n openedClass: modalOptions.openedClass,\n appendTo: modalOptions.appendTo\n };\n\n var component = {};\n var ctrlInstance, ctrlInstantiate, ctrlLocals = {};\n\n if (modalOptions.component) {\n constructLocals(component, false, true, false);\n component.name = modalOptions.component;\n modal.component = component;\n } else if (modalOptions.controller) {\n constructLocals(ctrlLocals, true, false, true);\n\n // the third param will make the controller instantiate later,private api\n // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126\n ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true, modalOptions.controllerAs);\n if (modalOptions.controllerAs && modalOptions.bindToController) {\n ctrlInstance = ctrlInstantiate.instance;\n ctrlInstance.$close = modalScope.$close;\n ctrlInstance.$dismiss = modalScope.$dismiss;\n angular.extend(ctrlInstance, {\n $resolve: ctrlLocals.$scope.$resolve\n }, providedScope);\n }\n\n ctrlInstance = ctrlInstantiate();\n\n if (angular.isFunction(ctrlInstance.$onInit)) {\n ctrlInstance.$onInit();\n }\n }\n\n if (!modalOptions.component) {\n modal.content = tplAndVars[0];\n }\n\n $modalStack.open(modalInstance, modal);\n modalOpenedDeferred.resolve(true);\n\n function constructLocals(obj, template, instanceOnScope, injectable) {\n obj.$scope = modalScope;\n obj.$scope.$resolve = {};\n if (instanceOnScope) {\n obj.$scope.$uibModalInstance = modalInstance;\n } else {\n obj.$uibModalInstance = modalInstance;\n }\n\n var resolves = template ? tplAndVars[1] : tplAndVars;\n angular.forEach(resolves, function(value, key) {\n if (injectable) {\n obj[key] = value;\n }\n\n obj.$scope.$resolve[key] = value;\n });\n }\n }, function resolveError(reason) {\n modalOpenedDeferred.reject(reason);\n modalResultDeferred.reject(reason);\n })['finally'](function() {\n if (promiseChain === samePromise) {\n promiseChain = null;\n }\n });\n\n return modalInstance;\n };\n\n return $modal;\n }\n ]\n };\n\n return $modalProvider;\n });\n\nangular.module('ui.bootstrap.paging', [])\n/**\n * Helper internal service for generating common controller code between the\n * pager and pagination components\n */\n.factory('uibPaging', ['$parse', function($parse) {\n return {\n create: function(ctrl, $scope, $attrs) {\n ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\n ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl\n ctrl._watchers = [];\n\n ctrl.init = function(ngModelCtrl, config) {\n ctrl.ngModelCtrl = ngModelCtrl;\n ctrl.config = config;\n\n ngModelCtrl.$render = function() {\n ctrl.render();\n };\n\n if ($attrs.itemsPerPage) {\n ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {\n ctrl.itemsPerPage = parseInt(value, 10);\n $scope.totalPages = ctrl.calculateTotalPages();\n ctrl.updatePage();\n }));\n } else {\n ctrl.itemsPerPage = config.itemsPerPage;\n }\n\n $scope.$watch('totalItems', function(newTotal, oldTotal) {\n if (angular.isDefined(newTotal) || newTotal !== oldTotal) {\n $scope.totalPages = ctrl.calculateTotalPages();\n ctrl.updatePage();\n }\n });\n };\n\n ctrl.calculateTotalPages = function() {\n var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);\n return Math.max(totalPages || 0, 1);\n };\n\n ctrl.render = function() {\n $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;\n };\n\n $scope.selectPage = function(page, evt) {\n if (evt) {\n evt.preventDefault();\n }\n\n var clickAllowed = !$scope.ngDisabled || !evt;\n if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {\n if (evt && evt.target) {\n evt.target.blur();\n }\n ctrl.ngModelCtrl.$setViewValue(page);\n ctrl.ngModelCtrl.$render();\n }\n };\n\n $scope.getText = function(key) {\n return $scope[key + 'Text'] || ctrl.config[key + 'Text'];\n };\n\n $scope.noPrevious = function() {\n return $scope.page === 1;\n };\n\n $scope.noNext = function() {\n return $scope.page === $scope.totalPages;\n };\n\n ctrl.updatePage = function() {\n ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable\n\n if ($scope.page > $scope.totalPages) {\n $scope.selectPage($scope.totalPages);\n } else {\n ctrl.ngModelCtrl.$render();\n }\n };\n\n $scope.$on('$destroy', function() {\n while (ctrl._watchers.length) {\n ctrl._watchers.shift()();\n }\n });\n }\n };\n}]);\n\nangular.module('ui.bootstrap.pager', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\n\n.controller('UibPagerController', ['$scope', '$attrs', 'uibPaging', 'uibPagerConfig', function($scope, $attrs, uibPaging, uibPagerConfig) {\n $scope.align = angular.isDefined($attrs.align) ? $scope.$parent.$eval($attrs.align) : uibPagerConfig.align;\n\n uibPaging.create(this, $scope, $attrs);\n}])\n\n.constant('uibPagerConfig', {\n itemsPerPage: 10,\n previousText: '« Previous',\n nextText: 'Next »',\n align: true\n})\n\n.directive('uibPager', ['uibPagerConfig', function(uibPagerConfig) {\n return {\n scope: {\n totalItems: '=',\n previousText: '@',\n nextText: '@',\n ngDisabled: '='\n },\n require: ['uibPager', '?ngModel'],\n restrict: 'A',\n controller: 'UibPagerController',\n controllerAs: 'pager',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/pager/pager.html';\n },\n link: function(scope, element, attrs, ctrls) {\n element.addClass('pager');\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n paginationCtrl.init(ngModelCtrl, uibPagerConfig);\n }\n };\n}]);\n\nangular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\n.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {\n var ctrl = this;\n // Setup configuration parameters\n var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,\n rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,\n forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,\n boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,\n pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;\n $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;\n $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;\n\n uibPaging.create(this, $scope, $attrs);\n\n if ($attrs.maxSize) {\n ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {\n maxSize = parseInt(value, 10);\n ctrl.render();\n }));\n }\n\n // Create page object used in template\n function makePage(number, text, isActive) {\n return {\n number: number,\n text: text,\n active: isActive\n };\n }\n\n function getPages(currentPage, totalPages) {\n var pages = [];\n\n // Default page limits\n var startPage = 1, endPage = totalPages;\n var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;\n\n // recompute if maxSize\n if (isMaxSized) {\n if (rotate) {\n // Current page is displayed in the middle of the visible ones\n startPage = Math.max(currentPage - Math.floor(maxSize / 2), 1);\n endPage = startPage + maxSize - 1;\n\n // Adjust if limit is exceeded\n if (endPage > totalPages) {\n endPage = totalPages;\n startPage = endPage - maxSize + 1;\n }\n } else {\n // Visible pages are paginated with maxSize\n startPage = (Math.ceil(currentPage / maxSize) - 1) * maxSize + 1;\n\n // Adjust last page if limit is exceeded\n endPage = Math.min(startPage + maxSize - 1, totalPages);\n }\n }\n\n // Add page number links\n for (var number = startPage; number <= endPage; number++) {\n var page = makePage(number, pageLabel(number), number === currentPage);\n pages.push(page);\n }\n\n // Add links to move between page sets\n if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {\n if (startPage > 1) {\n if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning\n var previousPageSet = makePage(startPage - 1, '...', false);\n pages.unshift(previousPageSet);\n }\n if (boundaryLinkNumbers) {\n if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential\n var secondPageLink = makePage(2, '2', false);\n pages.unshift(secondPageLink);\n }\n //add the first page\n var firstPageLink = makePage(1, '1', false);\n pages.unshift(firstPageLink);\n }\n }\n\n if (endPage < totalPages) {\n if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end\n var nextPageSet = makePage(endPage + 1, '...', false);\n pages.push(nextPageSet);\n }\n if (boundaryLinkNumbers) {\n if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential\n var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);\n pages.push(secondToLastPageLink);\n }\n //add the last page\n var lastPageLink = makePage(totalPages, totalPages, false);\n pages.push(lastPageLink);\n }\n }\n }\n return pages;\n }\n\n var originalRender = this.render;\n this.render = function() {\n originalRender();\n if ($scope.page > 0 && $scope.page <= $scope.totalPages) {\n $scope.pages = getPages($scope.page, $scope.totalPages);\n }\n };\n}])\n\n.constant('uibPaginationConfig', {\n itemsPerPage: 10,\n boundaryLinks: false,\n boundaryLinkNumbers: false,\n directionLinks: true,\n firstText: 'First',\n previousText: 'Previous',\n nextText: 'Next',\n lastText: 'Last',\n rotate: true,\n forceEllipses: false\n})\n\n.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {\n return {\n scope: {\n totalItems: '=',\n firstText: '@',\n previousText: '@',\n nextText: '@',\n lastText: '@',\n ngDisabled:'='\n },\n require: ['uibPagination', '?ngModel'],\n restrict: 'A',\n controller: 'UibPaginationController',\n controllerAs: 'pagination',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/pagination/pagination.html';\n },\n link: function(scope, element, attrs, ctrls) {\n element.addClass('pagination');\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n paginationCtrl.init(ngModelCtrl, uibPaginationConfig);\n }\n };\n}]);\n\n/**\n * The following features are still outstanding: animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, html tooltips, and selector delegation.\n */\nangular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])\n\n/**\n * The $tooltip service creates tooltip- and popover-like directives as well as\n * houses global options for them.\n */\n.provider('$uibTooltip', function() {\n // The default options tooltip and popover.\n var defaultOptions = {\n placement: 'top',\n placementClassPrefix: '',\n animation: true,\n popupDelay: 0,\n popupCloseDelay: 0,\n useContentExp: false\n };\n\n // Default hide triggers for each show trigger\n var triggerMap = {\n 'mouseenter': 'mouseleave',\n 'click': 'click',\n 'outsideClick': 'outsideClick',\n 'focus': 'blur',\n 'none': ''\n };\n\n // The options specified to the provider globally.\n var globalOptions = {};\n\n /**\n * `options({})` allows global configuration of all tooltips in the\n * application.\n *\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\n * // place tooltips left instead of top by default\n * $tooltipProvider.options( { placement: 'left' } );\n * });\n */\n\tthis.options = function(value) {\n\t\tangular.extend(globalOptions, value);\n\t};\n\n /**\n * This allows you to extend the set of trigger mappings available. E.g.:\n *\n * $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );\n */\n this.setTriggers = function setTriggers(triggers) {\n angular.extend(triggerMap, triggers);\n };\n\n /**\n * This is a helper function for translating camel-case to snake_case.\n */\n function snake_case(name) {\n var regexp = /[A-Z]/g;\n var separator = '-';\n return name.replace(regexp, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n /**\n * Returns the actual instance of the $tooltip service.\n * TODO support multiple triggers\n */\n this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {\n var openedTooltips = $$stackedMap.createNew();\n $document.on('keyup', keypressListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keyup', keypressListener);\n });\n\n function keypressListener(e) {\n if (e.which === 27) {\n var last = openedTooltips.top();\n if (last) {\n last.value.close();\n last = null;\n }\n }\n }\n\n return function $tooltip(ttType, prefix, defaultTriggerShow, options) {\n options = angular.extend({}, defaultOptions, globalOptions, options);\n\n /**\n * Returns an object of show and hide triggers.\n *\n * If a trigger is supplied,\n * it is used to show the tooltip; otherwise, it will use the `trigger`\n * option passed to the `$tooltipProvider.options` method; else it will\n * default to the trigger supplied to this directive factory.\n *\n * The hide trigger is based on the show trigger. If the `trigger` option\n * was passed to the `$tooltipProvider.options` method, it will use the\n * mapped trigger from `triggerMap` or the passed trigger if the map is\n * undefined; otherwise, it uses the `triggerMap` value of the show\n * trigger; else it will just use the show trigger.\n */\n function getTriggers(trigger) {\n var show = (trigger || options.trigger || defaultTriggerShow).split(' ');\n var hide = show.map(function(trigger) {\n return triggerMap[trigger] || trigger;\n });\n return {\n show: show,\n hide: hide\n };\n }\n\n var directiveName = snake_case(ttType);\n\n var startSym = $interpolate.startSymbol();\n var endSym = $interpolate.endSymbol();\n var template =\n '
    ' +\n '
    ';\n\n return {\n compile: function(tElem, tAttrs) {\n var tooltipLinker = $compile(template);\n\n return function link(scope, element, attrs, tooltipCtrl) {\n var tooltip;\n var tooltipLinkedScope;\n var transitionTimeout;\n var showTimeout;\n var hideTimeout;\n var positionTimeout;\n var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;\n var triggers = getTriggers(undefined);\n var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);\n var ttScope = scope.$new(true);\n var repositionScheduled = false;\n var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;\n var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;\n var observers = [];\n var lastPlacement;\n\n var positionTooltip = function() {\n // check if tooltip exists and is not empty\n if (!tooltip || !tooltip.html()) { return; }\n\n if (!positionTimeout) {\n positionTimeout = $timeout(function() {\n var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);\n var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var elementPos = appendToBody ? $position.offset(element) : $position.position(element);\n tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });\n var placementClasses = ttPosition.placement.split('-');\n\n if (!tooltip.hasClass(placementClasses[0])) {\n tooltip.removeClass(lastPlacement.split('-')[0]);\n tooltip.addClass(placementClasses[0]);\n }\n\n if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {\n tooltip.removeClass(options.placementClassPrefix + lastPlacement);\n tooltip.addClass(options.placementClassPrefix + ttPosition.placement);\n }\n\n $timeout(function() {\n var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);\n if (adjustment) {\n tooltip.css(adjustment);\n }\n }, 0, false);\n\n // first time through tt element will have the\n // uib-position-measure class or if the placement\n // has changed we need to position the arrow.\n if (tooltip.hasClass('uib-position-measure')) {\n $position.positionArrow(tooltip, ttPosition.placement);\n tooltip.removeClass('uib-position-measure');\n } else if (lastPlacement !== ttPosition.placement) {\n $position.positionArrow(tooltip, ttPosition.placement);\n }\n lastPlacement = ttPosition.placement;\n\n positionTimeout = null;\n }, 0, false);\n }\n };\n\n // Set up the correct scope to allow transclusion later\n ttScope.origScope = scope;\n\n // By default, the tooltip is not open.\n // TODO add ability to start tooltip opened\n ttScope.isOpen = false;\n\n function toggleTooltipBind() {\n if (!ttScope.isOpen) {\n showTooltipBind();\n } else {\n hideTooltipBind();\n }\n }\n\n // Show the tooltip with delay if specified, otherwise show it immediately\n function showTooltipBind() {\n if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {\n return;\n }\n\n cancelHide();\n prepareTooltip();\n\n if (ttScope.popupDelay) {\n // Do nothing if the tooltip was already scheduled to pop-up.\n // This happens if show is triggered multiple times before any hide is triggered.\n if (!showTimeout) {\n showTimeout = $timeout(show, ttScope.popupDelay, false);\n }\n } else {\n show();\n }\n }\n\n function hideTooltipBind() {\n cancelShow();\n\n if (ttScope.popupCloseDelay) {\n if (!hideTimeout) {\n hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);\n }\n } else {\n hide();\n }\n }\n\n // Show the tooltip popup element.\n function show() {\n cancelShow();\n cancelHide();\n\n // Don't show empty tooltips.\n if (!ttScope.content) {\n return angular.noop;\n }\n\n createTooltip();\n\n // And show the tooltip.\n ttScope.$evalAsync(function() {\n ttScope.isOpen = true;\n assignIsOpen(true);\n positionTooltip();\n });\n }\n\n function cancelShow() {\n if (showTimeout) {\n $timeout.cancel(showTimeout);\n showTimeout = null;\n }\n\n if (positionTimeout) {\n $timeout.cancel(positionTimeout);\n positionTimeout = null;\n }\n }\n\n // Hide the tooltip popup element.\n function hide() {\n if (!ttScope) {\n return;\n }\n\n // First things first: we don't show it anymore.\n ttScope.$evalAsync(function() {\n if (ttScope) {\n ttScope.isOpen = false;\n assignIsOpen(false);\n // And now we remove it from the DOM. However, if we have animation, we\n // need to wait for it to expire beforehand.\n // FIXME: this is a placeholder for a port of the transitions library.\n // The fade transition in TWBS is 150ms.\n if (ttScope.animation) {\n if (!transitionTimeout) {\n transitionTimeout = $timeout(removeTooltip, 150, false);\n }\n } else {\n removeTooltip();\n }\n }\n });\n }\n\n function cancelHide() {\n if (hideTimeout) {\n $timeout.cancel(hideTimeout);\n hideTimeout = null;\n }\n\n if (transitionTimeout) {\n $timeout.cancel(transitionTimeout);\n transitionTimeout = null;\n }\n }\n\n function createTooltip() {\n // There can only be one tooltip element per directive shown at once.\n if (tooltip) {\n return;\n }\n\n tooltipLinkedScope = ttScope.$new();\n tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {\n if (appendToBody) {\n $document.find('body').append(tooltip);\n } else {\n element.after(tooltip);\n }\n });\n\n openedTooltips.add(ttScope, {\n close: hide\n });\n\n prepObservers();\n }\n\n function removeTooltip() {\n cancelShow();\n cancelHide();\n unregisterObservers();\n\n if (tooltip) {\n tooltip.remove();\n tooltip = null;\n }\n\n openedTooltips.remove(ttScope);\n \n if (tooltipLinkedScope) {\n tooltipLinkedScope.$destroy();\n tooltipLinkedScope = null;\n }\n }\n\n /**\n * Set the initial scope values. Once\n * the tooltip is created, the observers\n * will be added to keep things in sync.\n */\n function prepareTooltip() {\n ttScope.title = attrs[prefix + 'Title'];\n if (contentParse) {\n ttScope.content = contentParse(scope);\n } else {\n ttScope.content = attrs[ttType];\n }\n\n ttScope.popupClass = attrs[prefix + 'Class'];\n ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;\n var placement = $position.parsePlacement(ttScope.placement);\n lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];\n\n var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);\n var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);\n ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;\n ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;\n }\n\n function assignIsOpen(isOpen) {\n if (isOpenParse && angular.isFunction(isOpenParse.assign)) {\n isOpenParse.assign(scope, isOpen);\n }\n }\n\n ttScope.contentExp = function() {\n return ttScope.content;\n };\n\n /**\n * Observe the relevant attributes.\n */\n attrs.$observe('disabled', function(val) {\n if (val) {\n cancelShow();\n }\n\n if (val && ttScope.isOpen) {\n hide();\n }\n });\n\n if (isOpenParse) {\n scope.$watch(isOpenParse, function(val) {\n if (ttScope && !val === ttScope.isOpen) {\n toggleTooltipBind();\n }\n });\n }\n\n function prepObservers() {\n observers.length = 0;\n\n if (contentParse) {\n observers.push(\n scope.$watch(contentParse, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n }\n })\n );\n\n observers.push(\n tooltipLinkedScope.$watch(function() {\n if (!repositionScheduled) {\n repositionScheduled = true;\n tooltipLinkedScope.$$postDigest(function() {\n repositionScheduled = false;\n if (ttScope && ttScope.isOpen) {\n positionTooltip();\n }\n });\n }\n })\n );\n } else {\n observers.push(\n attrs.$observe(ttType, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n } else {\n positionTooltip();\n }\n })\n );\n }\n\n observers.push(\n attrs.$observe(prefix + 'Title', function(val) {\n ttScope.title = val;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n\n observers.push(\n attrs.$observe(prefix + 'Placement', function(val) {\n ttScope.placement = val ? val : options.placement;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n }\n\n function unregisterObservers() {\n if (observers.length) {\n angular.forEach(observers, function(observer) {\n observer();\n });\n observers.length = 0;\n }\n }\n\n // hide tooltips/popovers for outsideClick trigger\n function bodyHideTooltipBind(e) {\n if (!ttScope || !ttScope.isOpen || !tooltip) {\n return;\n }\n // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked\n if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {\n hideTooltipBind();\n }\n }\n\n var unregisterTriggers = function() {\n triggers.show.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n element.off('click', toggleTooltipBind);\n } else {\n element.off(trigger, showTooltipBind);\n element.off(trigger, toggleTooltipBind);\n }\n });\n triggers.hide.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n $document.off('click', bodyHideTooltipBind);\n } else {\n element.off(trigger, hideTooltipBind);\n }\n });\n };\n\n function prepTriggers() {\n var showTriggers = [], hideTriggers = [];\n var val = scope.$eval(attrs[prefix + 'Trigger']);\n unregisterTriggers();\n\n if (angular.isObject(val)) {\n Object.keys(val).forEach(function(key) {\n showTriggers.push(key);\n hideTriggers.push(val[key]);\n });\n triggers = {\n show: showTriggers,\n hide: hideTriggers\n };\n } else {\n triggers = getTriggers(val);\n }\n\n if (triggers.show !== 'none') {\n triggers.show.forEach(function(trigger, idx) {\n if (trigger === 'outsideClick') {\n element.on('click', toggleTooltipBind);\n $document.on('click', bodyHideTooltipBind);\n } else if (trigger === triggers.hide[idx]) {\n element.on(trigger, toggleTooltipBind);\n } else if (trigger) {\n element.on(trigger, showTooltipBind);\n element.on(triggers.hide[idx], hideTooltipBind);\n }\n\n element.on('keypress', function(e) {\n if (e.which === 27) {\n hideTooltipBind();\n }\n });\n });\n }\n }\n\n prepTriggers();\n\n var animation = scope.$eval(attrs[prefix + 'Animation']);\n ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;\n\n var appendToBodyVal;\n var appendKey = prefix + 'AppendToBody';\n if (appendKey in attrs && attrs[appendKey] === undefined) {\n appendToBodyVal = true;\n } else {\n appendToBodyVal = scope.$eval(attrs[appendKey]);\n }\n\n appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;\n\n // Make sure tooltip is destroyed and removed.\n scope.$on('$destroy', function onDestroyTooltip() {\n unregisterTriggers();\n removeTooltip();\n ttScope = null;\n });\n };\n }\n };\n };\n }];\n})\n\n// This is mostly ngInclude code but with a custom scope\n.directive('uibTooltipTemplateTransclude', [\n '$animate', '$sce', '$compile', '$templateRequest',\nfunction ($animate, $sce, $compile, $templateRequest) {\n return {\n link: function(scope, elem, attrs) {\n var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);\n\n var changeCounter = 0,\n currentScope,\n previousElement,\n currentElement;\n\n var cleanupLastIncludeContent = function() {\n if (previousElement) {\n previousElement.remove();\n previousElement = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n\n if (currentElement) {\n $animate.leave(currentElement).then(function() {\n previousElement = null;\n });\n previousElement = currentElement;\n currentElement = null;\n }\n };\n\n scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {\n var thisChangeId = ++changeCounter;\n\n if (src) {\n //set the 2nd param to true to ignore the template request error so that the inner\n //contents and scope can be cleaned up.\n $templateRequest(src, true).then(function(response) {\n if (thisChangeId !== changeCounter) { return; }\n var newScope = origScope.$new();\n var template = response;\n\n var clone = $compile(template)(newScope, function(clone) {\n cleanupLastIncludeContent();\n $animate.enter(clone, elem);\n });\n\n currentScope = newScope;\n currentElement = clone;\n\n currentScope.$emit('$includeContentLoaded', src);\n }, function() {\n if (thisChangeId === changeCounter) {\n cleanupLastIncludeContent();\n scope.$emit('$includeContentError', src);\n }\n });\n scope.$emit('$includeContentRequested', src);\n } else {\n cleanupLastIncludeContent();\n }\n });\n\n scope.$on('$destroy', cleanupLastIncludeContent);\n }\n };\n}])\n\n/**\n * Note that it's intentional that these classes are *not* applied through $animate.\n * They must not be animated as they're expected to be present on the tooltip on\n * initialization.\n */\n.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n // need to set the primary position so the\n // arrow has space during position measure.\n // tooltip.positionTooltip()\n if (scope.placement) {\n // // There are no top-left etc... classes\n // // in TWBS, so we need the primary position.\n var position = $uibPosition.parsePlacement(scope.placement);\n element.addClass(position[0]);\n }\n\n if (scope.popupClass) {\n element.addClass(scope.popupClass);\n }\n\n if (scope.animation) {\n element.addClass(attrs.tooltipAnimationClass);\n }\n }\n };\n}])\n\n.directive('uibTooltipPopup', function() {\n return {\n restrict: 'A',\n scope: { content: '@' },\n templateUrl: 'uib/template/tooltip/tooltip-popup.html'\n };\n})\n\n.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');\n}])\n\n.directive('uibTooltipTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'\n };\n})\n\n.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}])\n\n.directive('uibTooltipHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'\n };\n})\n\n.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}]);\n\n/**\n * The following features are still outstanding: popup delay, animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, and selector delegatation.\n */\nangular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])\n\n.directive('uibPopoverTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { uibTitle: '@', contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/popover/popover-template.html'\n };\n})\n\n.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {\n useContentExp: true\n });\n}])\n\n.directive('uibPopoverHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', uibTitle: '@' },\n templateUrl: 'uib/template/popover/popover-html.html'\n };\n})\n\n.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopoverHtml', 'popover', 'click', {\n useContentExp: true\n });\n}])\n\n.directive('uibPopoverPopup', function() {\n return {\n restrict: 'A',\n scope: { uibTitle: '@', content: '@' },\n templateUrl: 'uib/template/popover/popover.html'\n };\n})\n\n.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopover', 'popover', 'click');\n}]);\n\nangular.module('ui.bootstrap.progressbar', [])\n\n.constant('uibProgressConfig', {\n animate: true,\n max: 100\n})\n\n.controller('UibProgressController', ['$scope', '$attrs', 'uibProgressConfig', function($scope, $attrs, progressConfig) {\n var self = this,\n animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;\n\n this.bars = [];\n $scope.max = getMaxOrDefault();\n\n this.addBar = function(bar, element, attrs) {\n if (!animate) {\n element.css({'transition': 'none'});\n }\n\n this.bars.push(bar);\n\n bar.max = getMaxOrDefault();\n bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';\n\n bar.$watch('value', function(value) {\n bar.recalculatePercentage();\n });\n\n bar.recalculatePercentage = function() {\n var totalPercentage = self.bars.reduce(function(total, bar) {\n bar.percent = +(100 * bar.value / bar.max).toFixed(2);\n return total + bar.percent;\n }, 0);\n\n if (totalPercentage > 100) {\n bar.percent -= totalPercentage - 100;\n }\n };\n\n bar.$on('$destroy', function() {\n element = null;\n self.removeBar(bar);\n });\n };\n\n this.removeBar = function(bar) {\n this.bars.splice(this.bars.indexOf(bar), 1);\n this.bars.forEach(function (bar) {\n bar.recalculatePercentage();\n });\n };\n\n //$attrs.$observe('maxParam', function(maxParam) {\n $scope.$watch('maxParam', function(maxParam) {\n self.bars.forEach(function(bar) {\n bar.max = getMaxOrDefault();\n bar.recalculatePercentage();\n });\n });\n\n function getMaxOrDefault () {\n return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;\n }\n}])\n\n.directive('uibProgress', function() {\n return {\n replace: true,\n transclude: true,\n controller: 'UibProgressController',\n require: 'uibProgress',\n scope: {\n maxParam: '=?max'\n },\n templateUrl: 'uib/template/progressbar/progress.html'\n };\n})\n\n.directive('uibBar', function() {\n return {\n replace: true,\n transclude: true,\n require: '^uibProgress',\n scope: {\n value: '=',\n type: '@'\n },\n templateUrl: 'uib/template/progressbar/bar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, element, attrs);\n }\n };\n})\n\n.directive('uibProgressbar', function() {\n return {\n replace: true,\n transclude: true,\n controller: 'UibProgressController',\n scope: {\n value: '=',\n maxParam: '=?max',\n type: '@'\n },\n templateUrl: 'uib/template/progressbar/progressbar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});\n }\n };\n});\n\nangular.module('ui.bootstrap.rating', [])\n\n.constant('uibRatingConfig', {\n max: 5,\n stateOn: null,\n stateOff: null,\n enableReset: true,\n titles: ['one', 'two', 'three', 'four', 'five']\n})\n\n.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {\n var ngModelCtrl = { $setViewValue: angular.noop },\n self = this;\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n ngModelCtrl.$formatters.push(function(value) {\n if (angular.isNumber(value) && value << 0 !== value) {\n value = Math.round(value);\n }\n\n return value;\n });\n\n this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;\n this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;\n this.enableReset = angular.isDefined($attrs.enableReset) ?\n $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;\n var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;\n this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?\n tmpTitles : ratingConfig.titles;\n\n var ratingStates = angular.isDefined($attrs.ratingStates) ?\n $scope.$parent.$eval($attrs.ratingStates) :\n new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);\n $scope.range = this.buildTemplateObjects(ratingStates);\n };\n\n this.buildTemplateObjects = function(states) {\n for (var i = 0, n = states.length; i < n; i++) {\n states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);\n }\n return states;\n };\n\n this.getTitle = function(index) {\n if (index >= this.titles.length) {\n return index + 1;\n }\n\n return this.titles[index];\n };\n\n $scope.rate = function(value) {\n if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {\n var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;\n ngModelCtrl.$setViewValue(newViewValue);\n ngModelCtrl.$render();\n }\n };\n\n $scope.enter = function(value) {\n if (!$scope.readonly) {\n $scope.value = value;\n }\n $scope.onHover({value: value});\n };\n\n $scope.reset = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.onLeave();\n };\n\n $scope.onKeydown = function(evt) {\n if (/(37|38|39|40)/.test(evt.which)) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));\n }\n };\n\n this.render = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.title = self.getTitle($scope.value - 1);\n };\n}])\n\n.directive('uibRating', function() {\n return {\n require: ['uibRating', 'ngModel'],\n restrict: 'A',\n scope: {\n readonly: '=?readOnly',\n onHover: '&',\n onLeave: '&'\n },\n controller: 'UibRatingController',\n templateUrl: 'uib/template/rating/rating.html',\n link: function(scope, element, attrs, ctrls) {\n var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n ratingCtrl.init(ngModelCtrl);\n }\n };\n});\n\nangular.module('ui.bootstrap.tabs', [])\n\n.controller('UibTabsetController', ['$scope', function ($scope) {\n var ctrl = this,\n oldIndex;\n ctrl.tabs = [];\n\n ctrl.select = function(index, evt) {\n if (!destroyed) {\n var previousIndex = findTabIndex(oldIndex);\n var previousSelected = ctrl.tabs[previousIndex];\n if (previousSelected) {\n previousSelected.tab.onDeselect({\n $event: evt,\n $selectedIndex: index\n });\n if (evt && evt.isDefaultPrevented()) {\n return;\n }\n previousSelected.tab.active = false;\n }\n\n var selected = ctrl.tabs[index];\n if (selected) {\n selected.tab.onSelect({\n $event: evt\n });\n selected.tab.active = true;\n ctrl.active = selected.index;\n oldIndex = selected.index;\n } else if (!selected && angular.isDefined(oldIndex)) {\n ctrl.active = null;\n oldIndex = null;\n }\n }\n };\n\n ctrl.addTab = function addTab(tab) {\n ctrl.tabs.push({\n tab: tab,\n index: tab.index\n });\n ctrl.tabs.sort(function(t1, t2) {\n if (t1.index > t2.index) {\n return 1;\n }\n\n if (t1.index < t2.index) {\n return -1;\n }\n\n return 0;\n });\n\n if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {\n var newActiveIndex = findTabIndex(tab.index);\n ctrl.select(newActiveIndex);\n }\n };\n\n ctrl.removeTab = function removeTab(tab) {\n var index;\n for (var i = 0; i < ctrl.tabs.length; i++) {\n if (ctrl.tabs[i].tab === tab) {\n index = i;\n break;\n }\n }\n\n if (ctrl.tabs[index].index === ctrl.active) {\n var newActiveTabIndex = index === ctrl.tabs.length - 1 ?\n index - 1 : index + 1 % ctrl.tabs.length;\n ctrl.select(newActiveTabIndex);\n }\n\n ctrl.tabs.splice(index, 1);\n };\n\n $scope.$watch('tabset.active', function(val) {\n if (angular.isDefined(val) && val !== oldIndex) {\n ctrl.select(findTabIndex(val));\n }\n });\n\n var destroyed;\n $scope.$on('$destroy', function() {\n destroyed = true;\n });\n\n function findTabIndex(index) {\n for (var i = 0; i < ctrl.tabs.length; i++) {\n if (ctrl.tabs[i].index === index) {\n return i;\n }\n }\n }\n}])\n\n.directive('uibTabset', function() {\n return {\n transclude: true,\n replace: true,\n scope: {},\n bindToController: {\n active: '=?',\n type: '@'\n },\n controller: 'UibTabsetController',\n controllerAs: 'tabset',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/tabs/tabset.html';\n },\n link: function(scope, element, attrs) {\n scope.vertical = angular.isDefined(attrs.vertical) ?\n scope.$parent.$eval(attrs.vertical) : false;\n scope.justified = angular.isDefined(attrs.justified) ?\n scope.$parent.$eval(attrs.justified) : false;\n }\n };\n})\n\n.directive('uibTab', ['$parse', function($parse) {\n return {\n require: '^uibTabset',\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/tabs/tab.html';\n },\n transclude: true,\n scope: {\n heading: '@',\n index: '=?',\n classes: '@?',\n onSelect: '&select', //This callback is called in contentHeadingTransclude\n //once it inserts the tab's content into the dom\n onDeselect: '&deselect'\n },\n controller: function() {\n //Empty controller so other directives can require being 'under' a tab\n },\n controllerAs: 'tab',\n link: function(scope, elm, attrs, tabsetCtrl, transclude) {\n scope.disabled = false;\n if (attrs.disable) {\n scope.$parent.$watch($parse(attrs.disable), function(value) {\n scope.disabled = !! value;\n });\n }\n\n if (angular.isUndefined(attrs.index)) {\n if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {\n scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;\n } else {\n scope.index = 0;\n }\n }\n\n if (angular.isUndefined(attrs.classes)) {\n scope.classes = '';\n }\n\n scope.select = function(evt) {\n if (!scope.disabled) {\n var index;\n for (var i = 0; i < tabsetCtrl.tabs.length; i++) {\n if (tabsetCtrl.tabs[i].tab === scope) {\n index = i;\n break;\n }\n }\n\n tabsetCtrl.select(index, evt);\n }\n };\n\n tabsetCtrl.addTab(scope);\n scope.$on('$destroy', function() {\n tabsetCtrl.removeTab(scope);\n });\n\n //We need to transclude later, once the content container is ready.\n //when this link happens, we're inside a tab heading.\n scope.$transcludeFn = transclude;\n }\n };\n}])\n\n.directive('uibTabHeadingTransclude', function() {\n return {\n restrict: 'A',\n require: '^uibTab',\n link: function(scope, elm) {\n scope.$watch('headingElement', function updateHeadingElement(heading) {\n if (heading) {\n elm.html('');\n elm.append(heading);\n }\n });\n }\n };\n})\n\n.directive('uibTabContentTransclude', function() {\n return {\n restrict: 'A',\n require: '^uibTabset',\n link: function(scope, elm, attrs) {\n var tab = scope.$eval(attrs.uibTabContentTransclude).tab;\n\n //Now our tab is ready to be transcluded: both the tab heading area\n //and the tab content area are loaded. Transclude 'em both.\n tab.$transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n if (isTabHeading(node)) {\n //Let tabHeadingTransclude know.\n tab.headingElement = node;\n } else {\n elm.append(node);\n }\n });\n });\n }\n };\n\n function isTabHeading(node) {\n return node.tagName && (\n node.hasAttribute('uib-tab-heading') ||\n node.hasAttribute('data-uib-tab-heading') ||\n node.hasAttribute('x-uib-tab-heading') ||\n node.tagName.toLowerCase() === 'uib-tab-heading' ||\n node.tagName.toLowerCase() === 'data-uib-tab-heading' ||\n node.tagName.toLowerCase() === 'x-uib-tab-heading' ||\n node.tagName.toLowerCase() === 'uib:tab-heading'\n );\n }\n});\n\nangular.module('ui.bootstrap.timepicker', [])\n\n.constant('uibTimepickerConfig', {\n hourStep: 1,\n minuteStep: 1,\n secondStep: 1,\n showMeridian: true,\n showSeconds: false,\n meridians: null,\n readonlyInput: false,\n mousewheel: true,\n arrowkeys: true,\n showSpinners: true,\n templateUrl: 'uib/template/timepicker/timepicker.html'\n})\n\n.controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {\n var selected = new Date(),\n watchers = [],\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl\n meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,\n padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;\n\n $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;\n $element.removeAttr('tabindex');\n\n this.init = function(ngModelCtrl_, inputs) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n ngModelCtrl.$formatters.unshift(function(modelValue) {\n return modelValue ? new Date(modelValue) : null;\n });\n\n var hoursInputEl = inputs.eq(0),\n minutesInputEl = inputs.eq(1),\n secondsInputEl = inputs.eq(2);\n\n var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;\n\n if (mousewheel) {\n this.setupMousewheelEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n }\n\n var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;\n if (arrowkeys) {\n this.setupArrowkeyEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n }\n\n $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;\n this.setupInputEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n };\n\n var hourStep = timepickerConfig.hourStep;\n if ($attrs.hourStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {\n hourStep = +value;\n }));\n }\n\n var minuteStep = timepickerConfig.minuteStep;\n if ($attrs.minuteStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {\n minuteStep = +value;\n }));\n }\n\n var min;\n watchers.push($scope.$parent.$watch($parse($attrs.min), function(value) {\n var dt = new Date(value);\n min = isNaN(dt) ? undefined : dt;\n }));\n\n var max;\n watchers.push($scope.$parent.$watch($parse($attrs.max), function(value) {\n var dt = new Date(value);\n max = isNaN(dt) ? undefined : dt;\n }));\n\n var disabled = false;\n if ($attrs.ngDisabled) {\n watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {\n disabled = value;\n }));\n }\n\n $scope.noIncrementHours = function() {\n var incrementedSelected = addMinutes(selected, hourStep * 60);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementHours = function() {\n var decrementedSelected = addMinutes(selected, -hourStep * 60);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noIncrementMinutes = function() {\n var incrementedSelected = addMinutes(selected, minuteStep);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementMinutes = function() {\n var decrementedSelected = addMinutes(selected, -minuteStep);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noIncrementSeconds = function() {\n var incrementedSelected = addSeconds(selected, secondStep);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementSeconds = function() {\n var decrementedSelected = addSeconds(selected, -secondStep);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noToggleMeridian = function() {\n if (selected.getHours() < 12) {\n return disabled || addMinutes(selected, 12 * 60) > max;\n }\n\n return disabled || addMinutes(selected, -12 * 60) < min;\n };\n\n var secondStep = timepickerConfig.secondStep;\n if ($attrs.secondStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {\n secondStep = +value;\n }));\n }\n\n $scope.showSeconds = timepickerConfig.showSeconds;\n if ($attrs.showSeconds) {\n watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {\n $scope.showSeconds = !!value;\n }));\n }\n\n // 12H / 24H mode\n $scope.showMeridian = timepickerConfig.showMeridian;\n if ($attrs.showMeridian) {\n watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {\n $scope.showMeridian = !!value;\n\n if (ngModelCtrl.$error.time) {\n // Evaluate from template\n var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\n selected.setHours(hours);\n refresh();\n }\n } else {\n updateTemplate();\n }\n }));\n }\n\n // Get $scope.hours in 24H mode if valid\n function getHoursFromTemplate() {\n var hours = +$scope.hours;\n var valid = $scope.showMeridian ? hours > 0 && hours < 13 :\n hours >= 0 && hours < 24;\n if (!valid || $scope.hours === '') {\n return undefined;\n }\n\n if ($scope.showMeridian) {\n if (hours === 12) {\n hours = 0;\n }\n if ($scope.meridian === meridians[1]) {\n hours = hours + 12;\n }\n }\n return hours;\n }\n\n function getMinutesFromTemplate() {\n var minutes = +$scope.minutes;\n var valid = minutes >= 0 && minutes < 60;\n if (!valid || $scope.minutes === '') {\n return undefined;\n }\n return minutes;\n }\n\n function getSecondsFromTemplate() {\n var seconds = +$scope.seconds;\n return seconds >= 0 && seconds < 60 ? seconds : undefined;\n }\n\n function pad(value, noPad) {\n if (value === null) {\n return '';\n }\n\n return angular.isDefined(value) && value.toString().length < 2 && !noPad ?\n '0' + value : value.toString();\n }\n\n // Respond on mousewheel spin\n this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n var isScrollingUp = function(e) {\n if (e.originalEvent) {\n e = e.originalEvent;\n }\n //pick correct delta variable depending on event\n var delta = e.wheelDelta ? e.wheelDelta : -e.deltaY;\n return e.detail || delta > 0;\n };\n\n hoursInputEl.bind('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementHours() : $scope.decrementHours());\n }\n e.preventDefault();\n });\n\n minutesInputEl.bind('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());\n }\n e.preventDefault();\n });\n\n secondsInputEl.bind('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementSeconds() : $scope.decrementSeconds());\n }\n e.preventDefault();\n });\n };\n\n // Respond on up/down arrowkeys\n this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n hoursInputEl.bind('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementHours();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementHours();\n $scope.$apply();\n }\n }\n });\n\n minutesInputEl.bind('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementMinutes();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementMinutes();\n $scope.$apply();\n }\n }\n });\n\n secondsInputEl.bind('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementSeconds();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementSeconds();\n $scope.$apply();\n }\n }\n });\n };\n\n this.setupInputEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n if ($scope.readonlyInput) {\n $scope.updateHours = angular.noop;\n $scope.updateMinutes = angular.noop;\n $scope.updateSeconds = angular.noop;\n return;\n }\n\n var invalidate = function(invalidHours, invalidMinutes, invalidSeconds) {\n ngModelCtrl.$setViewValue(null);\n ngModelCtrl.$setValidity('time', false);\n if (angular.isDefined(invalidHours)) {\n $scope.invalidHours = invalidHours;\n }\n\n if (angular.isDefined(invalidMinutes)) {\n $scope.invalidMinutes = invalidMinutes;\n }\n\n if (angular.isDefined(invalidSeconds)) {\n $scope.invalidSeconds = invalidSeconds;\n }\n };\n\n $scope.updateHours = function() {\n var hours = getHoursFromTemplate(),\n minutes = getMinutesFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\n selected.setHours(hours);\n selected.setMinutes(minutes);\n if (selected < min || selected > max) {\n invalidate(true);\n } else {\n refresh('h');\n }\n } else {\n invalidate(true);\n }\n };\n\n hoursInputEl.bind('blur', function(e) {\n ngModelCtrl.$setTouched();\n if (modelIsEmpty()) {\n makeValid();\n } else if ($scope.hours === null || $scope.hours === '') {\n invalidate(true);\n } else if (!$scope.invalidHours && $scope.hours < 10) {\n $scope.$apply(function() {\n $scope.hours = pad($scope.hours, !padHours);\n });\n }\n });\n\n $scope.updateMinutes = function() {\n var minutes = getMinutesFromTemplate(),\n hours = getHoursFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\n selected.setHours(hours);\n selected.setMinutes(minutes);\n if (selected < min || selected > max) {\n invalidate(undefined, true);\n } else {\n refresh('m');\n }\n } else {\n invalidate(undefined, true);\n }\n };\n\n minutesInputEl.bind('blur', function(e) {\n ngModelCtrl.$setTouched();\n if (modelIsEmpty()) {\n makeValid();\n } else if ($scope.minutes === null) {\n invalidate(undefined, true);\n } else if (!$scope.invalidMinutes && $scope.minutes < 10) {\n $scope.$apply(function() {\n $scope.minutes = pad($scope.minutes);\n });\n }\n });\n\n $scope.updateSeconds = function() {\n var seconds = getSecondsFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(seconds)) {\n selected.setSeconds(seconds);\n refresh('s');\n } else {\n invalidate(undefined, undefined, true);\n }\n };\n\n secondsInputEl.bind('blur', function(e) {\n if (modelIsEmpty()) {\n makeValid();\n } else if (!$scope.invalidSeconds && $scope.seconds < 10) {\n $scope.$apply( function() {\n $scope.seconds = pad($scope.seconds);\n });\n }\n });\n\n };\n\n this.render = function() {\n var date = ngModelCtrl.$viewValue;\n\n if (isNaN(date)) {\n ngModelCtrl.$setValidity('time', false);\n $log.error('Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\n } else {\n if (date) {\n selected = date;\n }\n\n if (selected < min || selected > max) {\n ngModelCtrl.$setValidity('time', false);\n $scope.invalidHours = true;\n $scope.invalidMinutes = true;\n } else {\n makeValid();\n }\n updateTemplate();\n }\n };\n\n // Call internally when we know that model is valid.\n function refresh(keyboardChange) {\n makeValid();\n ngModelCtrl.$setViewValue(new Date(selected));\n updateTemplate(keyboardChange);\n }\n\n function makeValid() {\n ngModelCtrl.$setValidity('time', true);\n $scope.invalidHours = false;\n $scope.invalidMinutes = false;\n $scope.invalidSeconds = false;\n }\n\n function updateTemplate(keyboardChange) {\n if (!ngModelCtrl.$modelValue) {\n $scope.hours = null;\n $scope.minutes = null;\n $scope.seconds = null;\n $scope.meridian = meridians[0];\n } else {\n var hours = selected.getHours(),\n minutes = selected.getMinutes(),\n seconds = selected.getSeconds();\n\n if ($scope.showMeridian) {\n hours = hours === 0 || hours === 12 ? 12 : hours % 12; // Convert 24 to 12 hour system\n }\n\n $scope.hours = keyboardChange === 'h' ? hours : pad(hours, !padHours);\n if (keyboardChange !== 'm') {\n $scope.minutes = pad(minutes);\n }\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n\n if (keyboardChange !== 's') {\n $scope.seconds = pad(seconds);\n }\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n }\n }\n\n function addSecondsToSelected(seconds) {\n selected = addSeconds(selected, seconds);\n refresh();\n }\n\n function addMinutes(selected, minutes) {\n return addSeconds(selected, minutes*60);\n }\n\n function addSeconds(date, seconds) {\n var dt = new Date(date.getTime() + seconds * 1000);\n var newDate = new Date(date);\n newDate.setHours(dt.getHours(), dt.getMinutes(), dt.getSeconds());\n return newDate;\n }\n\n function modelIsEmpty() {\n return ($scope.hours === null || $scope.hours === '') &&\n ($scope.minutes === null || $scope.minutes === '') &&\n (!$scope.showSeconds || $scope.showSeconds && ($scope.seconds === null || $scope.seconds === ''));\n }\n\n $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?\n $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;\n\n $scope.incrementHours = function() {\n if (!$scope.noIncrementHours()) {\n addSecondsToSelected(hourStep * 60 * 60);\n }\n };\n\n $scope.decrementHours = function() {\n if (!$scope.noDecrementHours()) {\n addSecondsToSelected(-hourStep * 60 * 60);\n }\n };\n\n $scope.incrementMinutes = function() {\n if (!$scope.noIncrementMinutes()) {\n addSecondsToSelected(minuteStep * 60);\n }\n };\n\n $scope.decrementMinutes = function() {\n if (!$scope.noDecrementMinutes()) {\n addSecondsToSelected(-minuteStep * 60);\n }\n };\n\n $scope.incrementSeconds = function() {\n if (!$scope.noIncrementSeconds()) {\n addSecondsToSelected(secondStep);\n }\n };\n\n $scope.decrementSeconds = function() {\n if (!$scope.noDecrementSeconds()) {\n addSecondsToSelected(-secondStep);\n }\n };\n\n $scope.toggleMeridian = function() {\n var minutes = getMinutesFromTemplate(),\n hours = getHoursFromTemplate();\n\n if (!$scope.noToggleMeridian()) {\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\n addSecondsToSelected(12 * 60 * (selected.getHours() < 12 ? 60 : -60));\n } else {\n $scope.meridian = $scope.meridian === meridians[0] ? meridians[1] : meridians[0];\n }\n }\n };\n\n $scope.blur = function() {\n ngModelCtrl.$setTouched();\n };\n\n $scope.$on('$destroy', function() {\n while (watchers.length) {\n watchers.shift()();\n }\n });\n}])\n\n.directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {\n return {\n require: ['uibTimepicker', '?^ngModel'],\n restrict: 'A',\n controller: 'UibTimepickerController',\n controllerAs: 'timepicker',\n scope: {},\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || uibTimepickerConfig.templateUrl;\n },\n link: function(scope, element, attrs, ctrls) {\n var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (ngModelCtrl) {\n timepickerCtrl.init(ngModelCtrl, element.find('input'));\n }\n }\n };\n}]);\n\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])\n\n/**\n * A helper service that can parse typeahead's syntax (string provided by users)\n * Extracted to a separate service for ease of unit testing\n */\n .factory('uibTypeaheadParser', ['$parse', function($parse) {\n // 000001111111100000000000002222222200000000000000003333333333333330000000000044444444000\n var TYPEAHEAD_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\n return {\n parse: function(input) {\n var match = input.match(TYPEAHEAD_REGEXP);\n if (!match) {\n throw new Error(\n 'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\"' +\n ' but got \"' + input + '\".');\n }\n\n return {\n itemName: match[3],\n source: $parse(match[4]),\n viewMapper: $parse(match[2] || match[1]),\n modelMapper: $parse(match[1])\n };\n }\n };\n }])\n\n .controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',\n function(originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {\n var HOT_KEYS = [9, 13, 27, 38, 40];\n var eventDebounceTime = 200;\n var modelCtrl, ngModelOptions;\n //SUPPORTED ATTRIBUTES (OPTIONS)\n\n //minimal no of characters that needs to be entered before typeahead kicks-in\n var minLength = originalScope.$eval(attrs.typeaheadMinLength);\n if (!minLength && minLength !== 0) {\n minLength = 1;\n }\n\n originalScope.$watch(attrs.typeaheadMinLength, function (newVal) {\n minLength = !newVal && newVal !== 0 ? 1 : newVal;\n });\n\n //minimal wait time after last character typed before typeahead kicks-in\n var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\n\n //should it restrict model values to the ones selected from the popup only?\n var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\n originalScope.$watch(attrs.typeaheadEditable, function (newVal) {\n isEditable = newVal !== false;\n });\n\n //binding to a variable that indicates if matches are being retrieved asynchronously\n var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\n\n //a function to determine if an event should cause selection\n var isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function(scope, vals) {\n var evt = vals.$event;\n return evt.which === 13 || evt.which === 9;\n };\n\n //a callback executed when a match is selected\n var onSelectCallback = $parse(attrs.typeaheadOnSelect);\n\n //should it select highlighted popup value when losing focus?\n var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;\n\n //binding to a variable that indicates if there were no results after the query is completed\n var isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;\n\n var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\n\n var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\n\n var appendTo = attrs.typeaheadAppendTo ?\n originalScope.$eval(attrs.typeaheadAppendTo) : null;\n\n var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;\n\n //If input matches an item of the list exactly, select it automatically\n var selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;\n\n //binding to a variable that indicates if dropdown is open\n var isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;\n\n var showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;\n\n //INTERNAL VARIABLES\n\n //model setter executed upon match selection\n var parsedModel = $parse(attrs.ngModel);\n var invokeModelSetter = $parse(attrs.ngModel + '($$$p)');\n var $setModelValue = function(scope, newValue) {\n if (angular.isFunction(parsedModel(originalScope)) &&\n ngModelOptions && ngModelOptions.$options && ngModelOptions.$options.getterSetter) {\n return invokeModelSetter(scope, {$$$p: newValue});\n }\n\n return parsedModel.assign(scope, newValue);\n };\n\n //expressions used by typeahead\n var parserResult = typeaheadParser.parse(attrs.uibTypeahead);\n\n var hasFocus;\n\n //Used to avoid bug in iOS webview where iOS keyboard does not fire\n //mousedown & mouseup events\n //Issue #3699\n var selected;\n\n //create a child scope for the typeahead directive so we are not polluting original scope\n //with typeahead-specific data (matches, query etc.)\n var scope = originalScope.$new();\n var offDestroy = originalScope.$on('$destroy', function() {\n scope.$destroy();\n });\n scope.$on('$destroy', offDestroy);\n\n // WAI-ARIA\n var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n element.attr({\n 'aria-autocomplete': 'list',\n 'aria-expanded': false,\n 'aria-owns': popupId\n });\n\n var inputsContainer, hintInputElem;\n //add read-only input to show hint\n if (showHint) {\n inputsContainer = angular.element('
    ');\n inputsContainer.css('position', 'relative');\n element.after(inputsContainer);\n hintInputElem = element.clone();\n hintInputElem.attr('placeholder', '');\n hintInputElem.attr('tabindex', '-1');\n hintInputElem.val('');\n hintInputElem.css({\n 'position': 'absolute',\n 'top': '0px',\n 'left': '0px',\n 'border-color': 'transparent',\n 'box-shadow': 'none',\n 'opacity': 1,\n 'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',\n 'color': '#999'\n });\n element.css({\n 'position': 'relative',\n 'vertical-align': 'top',\n 'background-color': 'transparent'\n });\n\n if (hintInputElem.attr('id')) {\n hintInputElem.removeAttr('id'); // remove duplicate id if present.\n }\n inputsContainer.append(hintInputElem);\n hintInputElem.after(element);\n }\n\n //pop-up element used to display matches\n var popUpEl = angular.element('
    ');\n popUpEl.attr({\n id: popupId,\n matches: 'matches',\n active: 'activeIdx',\n select: 'select(activeIdx, evt)',\n 'move-in-progress': 'moveInProgress',\n query: 'query',\n position: 'position',\n 'assign-is-open': 'assignIsOpen(isOpen)',\n debounce: 'debounceUpdate'\n });\n //custom item template\n if (angular.isDefined(attrs.typeaheadTemplateUrl)) {\n popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\n }\n\n if (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {\n popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);\n }\n\n var resetHint = function() {\n if (showHint) {\n hintInputElem.val('');\n }\n };\n\n var resetMatches = function() {\n scope.matches = [];\n scope.activeIdx = -1;\n element.attr('aria-expanded', false);\n resetHint();\n };\n\n var getMatchId = function(index) {\n return popupId + '-option-' + index;\n };\n\n // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\n // This attribute is added or removed automatically when the `activeIdx` changes.\n scope.$watch('activeIdx', function(index) {\n if (index < 0) {\n element.removeAttr('aria-activedescendant');\n } else {\n element.attr('aria-activedescendant', getMatchId(index));\n }\n });\n\n var inputIsExactMatch = function(inputValue, index) {\n if (scope.matches.length > index && inputValue) {\n return inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();\n }\n\n return false;\n };\n\n var getMatchesAsync = function(inputValue, evt) {\n var locals = {$viewValue: inputValue};\n isLoadingSetter(originalScope, true);\n isNoResultsSetter(originalScope, false);\n $q.when(parserResult.source(originalScope, locals)).then(function(matches) {\n //it might happen that several async queries were in progress if a user were typing fast\n //but we are interested only in responses that correspond to the current view value\n var onCurrentRequest = inputValue === modelCtrl.$viewValue;\n if (onCurrentRequest && hasFocus) {\n if (matches && matches.length > 0) {\n scope.activeIdx = focusFirst ? 0 : -1;\n isNoResultsSetter(originalScope, false);\n scope.matches.length = 0;\n\n //transform labels\n for (var i = 0; i < matches.length; i++) {\n locals[parserResult.itemName] = matches[i];\n scope.matches.push({\n id: getMatchId(i),\n label: parserResult.viewMapper(scope, locals),\n model: matches[i]\n });\n }\n\n scope.query = inputValue;\n //position pop-up with matches - we need to re-calculate its position each time we are opening a window\n //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page\n //due to other elements being rendered\n recalculatePosition();\n\n element.attr('aria-expanded', true);\n\n //Select the single remaining option if user input matches\n if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\n $$debounce(function() {\n scope.select(0, evt);\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\n } else {\n scope.select(0, evt);\n }\n }\n\n if (showHint) {\n var firstLabel = scope.matches[0].label;\n if (angular.isString(inputValue) &&\n inputValue.length > 0 &&\n firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {\n hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));\n } else {\n hintInputElem.val('');\n }\n }\n } else {\n resetMatches();\n isNoResultsSetter(originalScope, true);\n }\n }\n if (onCurrentRequest) {\n isLoadingSetter(originalScope, false);\n }\n }, function() {\n resetMatches();\n isLoadingSetter(originalScope, false);\n isNoResultsSetter(originalScope, true);\n });\n };\n\n // bind events only if appendToBody params exist - performance feature\n if (appendToBody) {\n angular.element($window).on('resize', fireRecalculating);\n $document.find('body').on('scroll', fireRecalculating);\n }\n\n // Declare the debounced function outside recalculating for\n // proper debouncing\n var debouncedRecalculate = $$debounce(function() {\n // if popup is visible\n if (scope.matches.length) {\n recalculatePosition();\n }\n\n scope.moveInProgress = false;\n }, eventDebounceTime);\n\n // Default progress type\n scope.moveInProgress = false;\n\n function fireRecalculating() {\n if (!scope.moveInProgress) {\n scope.moveInProgress = true;\n scope.$digest();\n }\n\n debouncedRecalculate();\n }\n\n // recalculate actual position and set new values to scope\n // after digest loop is popup in right position\n function recalculatePosition() {\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\n scope.position.top += element.prop('offsetHeight');\n }\n\n //we need to propagate user's query so we can higlight matches\n scope.query = undefined;\n\n //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later\n var timeoutPromise;\n\n var scheduleSearchWithTimeout = function(inputValue) {\n timeoutPromise = $timeout(function() {\n getMatchesAsync(inputValue);\n }, waitTime);\n };\n\n var cancelPreviousTimeout = function() {\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n };\n\n resetMatches();\n\n scope.assignIsOpen = function (isOpen) {\n isOpenSetter(originalScope, isOpen);\n };\n\n scope.select = function(activeIdx, evt) {\n //called from within the $digest() cycle\n var locals = {};\n var model, item;\n\n selected = true;\n locals[parserResult.itemName] = item = scope.matches[activeIdx].model;\n model = parserResult.modelMapper(originalScope, locals);\n $setModelValue(originalScope, model);\n modelCtrl.$setValidity('editable', true);\n modelCtrl.$setValidity('parse', true);\n\n onSelectCallback(originalScope, {\n $item: item,\n $model: model,\n $label: parserResult.viewMapper(originalScope, locals),\n $event: evt\n });\n\n resetMatches();\n\n //return focus to the input element if a match was selected via a mouse click event\n // use timeout to avoid $rootScope:inprog error\n if (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {\n $timeout(function() { element[0].focus(); }, 0, false);\n }\n };\n\n //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\n element.on('keydown', function(evt) {\n //typeahead is open and an \"interesting\" key was pressed\n if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\n return;\n }\n\n var shouldSelect = isSelectEvent(originalScope, {$event: evt});\n\n /**\n * if there's nothing selected (i.e. focusFirst) and enter or tab is hit\n * or\n * shift + tab is pressed to bring focus to the previous element\n * then clear the results\n */\n if (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {\n resetMatches();\n scope.$digest();\n return;\n }\n\n evt.preventDefault();\n var target;\n switch (evt.which) {\n case 27: // escape\n evt.stopPropagation();\n\n resetMatches();\n originalScope.$digest();\n break;\n case 38: // up arrow\n scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;\n scope.$digest();\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\n target.parentNode.scrollTop = target.offsetTop;\n break;\n case 40: // down arrow\n scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\n scope.$digest();\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\n target.parentNode.scrollTop = target.offsetTop;\n break;\n default:\n if (shouldSelect) {\n scope.$apply(function() {\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\n $$debounce(function() {\n scope.select(scope.activeIdx, evt);\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\n } else {\n scope.select(scope.activeIdx, evt);\n }\n });\n }\n }\n });\n\n element.bind('focus', function (evt) {\n hasFocus = true;\n if (minLength === 0 && !modelCtrl.$viewValue) {\n $timeout(function() {\n getMatchesAsync(modelCtrl.$viewValue, evt);\n }, 0);\n }\n });\n\n element.bind('blur', function(evt) {\n if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {\n selected = true;\n scope.$apply(function() {\n if (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {\n $$debounce(function() {\n scope.select(scope.activeIdx, evt);\n }, scope.debounceUpdate.blur);\n } else {\n scope.select(scope.activeIdx, evt);\n }\n });\n }\n if (!isEditable && modelCtrl.$error.editable) {\n modelCtrl.$setViewValue();\n scope.$apply(function() {\n // Reset validity as we are clearing\n modelCtrl.$setValidity('editable', true);\n modelCtrl.$setValidity('parse', true);\n });\n element.val('');\n }\n hasFocus = false;\n selected = false;\n });\n\n // Keep reference to click handler to unbind it.\n var dismissClickHandler = function(evt) {\n // Issue #3973\n // Firefox treats right click as a click on document\n if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {\n resetMatches();\n if (!$rootScope.$$phase) {\n originalScope.$digest();\n }\n }\n };\n\n $document.on('click', dismissClickHandler);\n\n originalScope.$on('$destroy', function() {\n $document.off('click', dismissClickHandler);\n if (appendToBody || appendTo) {\n $popup.remove();\n }\n\n if (appendToBody) {\n angular.element($window).off('resize', fireRecalculating);\n $document.find('body').off('scroll', fireRecalculating);\n }\n // Prevent jQuery cache memory leak\n popUpEl.remove();\n\n if (showHint) {\n inputsContainer.remove();\n }\n });\n\n var $popup = $compile(popUpEl)(scope);\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else if (appendTo) {\n angular.element(appendTo).eq(0).append($popup);\n } else {\n element.after($popup);\n }\n\n this.init = function(_modelCtrl, _ngModelOptions) {\n modelCtrl = _modelCtrl;\n ngModelOptions = _ngModelOptions;\n\n scope.debounceUpdate = modelCtrl.$options && $parse(modelCtrl.$options.debounce)(originalScope);\n\n //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM\n //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue\n modelCtrl.$parsers.unshift(function(inputValue) {\n hasFocus = true;\n\n if (minLength === 0 || inputValue && inputValue.length >= minLength) {\n if (waitTime > 0) {\n cancelPreviousTimeout();\n scheduleSearchWithTimeout(inputValue);\n } else {\n getMatchesAsync(inputValue);\n }\n } else {\n isLoadingSetter(originalScope, false);\n cancelPreviousTimeout();\n resetMatches();\n }\n\n if (isEditable) {\n return inputValue;\n }\n\n if (!inputValue) {\n // Reset in case user had typed something previously.\n modelCtrl.$setValidity('editable', true);\n return null;\n }\n\n modelCtrl.$setValidity('editable', false);\n return undefined;\n });\n\n modelCtrl.$formatters.push(function(modelValue) {\n var candidateViewValue, emptyViewValue;\n var locals = {};\n\n // The validity may be set to false via $parsers (see above) if\n // the model is restricted to selected values. If the model\n // is set manually it is considered to be valid.\n if (!isEditable) {\n modelCtrl.$setValidity('editable', true);\n }\n\n if (inputFormatter) {\n locals.$model = modelValue;\n return inputFormatter(originalScope, locals);\n }\n\n //it might happen that we don't have enough info to properly render input value\n //we need to check for this situation and simply return model value if we can't apply custom formatting\n locals[parserResult.itemName] = modelValue;\n candidateViewValue = parserResult.viewMapper(originalScope, locals);\n locals[parserResult.itemName] = undefined;\n emptyViewValue = parserResult.viewMapper(originalScope, locals);\n\n return candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;\n });\n };\n }])\n\n .directive('uibTypeahead', function() {\n return {\n controller: 'UibTypeaheadController',\n require: ['ngModel', '^?ngModelOptions', 'uibTypeahead'],\n link: function(originalScope, element, attrs, ctrls) {\n ctrls[2].init(ctrls[0], ctrls[1]);\n }\n };\n })\n\n .directive('uibTypeaheadPopup', ['$$debounce', function($$debounce) {\n return {\n scope: {\n matches: '=',\n query: '=',\n active: '=',\n position: '&',\n moveInProgress: '=',\n select: '&',\n assignIsOpen: '&',\n debounce: '&'\n },\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';\n },\n link: function(scope, element, attrs) {\n scope.templateUrl = attrs.templateUrl;\n\n scope.isOpen = function() {\n var isDropdownOpen = scope.matches.length > 0;\n scope.assignIsOpen({ isOpen: isDropdownOpen });\n return isDropdownOpen;\n };\n\n scope.isActive = function(matchIdx) {\n return scope.active === matchIdx;\n };\n\n scope.selectActive = function(matchIdx) {\n scope.active = matchIdx;\n };\n\n scope.selectMatch = function(activeIdx, evt) {\n var debounce = scope.debounce();\n if (angular.isNumber(debounce) || angular.isObject(debounce)) {\n $$debounce(function() {\n scope.select({activeIdx: activeIdx, evt: evt});\n }, angular.isNumber(debounce) ? debounce : debounce['default']);\n } else {\n scope.select({activeIdx: activeIdx, evt: evt});\n }\n };\n }\n };\n }])\n\n .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {\n return {\n scope: {\n index: '=',\n match: '=',\n query: '='\n },\n link: function(scope, element, attrs) {\n var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';\n $templateRequest(tplUrl).then(function(tplContent) {\n var tplEl = angular.element(tplContent.trim());\n element.replaceWith(tplEl);\n $compile(tplEl)(scope);\n });\n }\n };\n }])\n\n .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {\n var isSanitizePresent;\n isSanitizePresent = $injector.has('$sanitize');\n\n function escapeRegexp(queryToEscape) {\n // Regex: capture the whole query string and replace it with the string that will be used to match\n // the results, for example if the capture is \"a\" the result will be \\a\n return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n }\n\n function containsHtml(matchItem) {\n return /<.*>/g.test(matchItem);\n }\n\n return function(matchItem, query) {\n if (!isSanitizePresent && containsHtml(matchItem)) {\n $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger\n }\n matchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; // Replaces the capture string with a the same string inside of a \"strong\" tag\n if (!isSanitizePresent) {\n matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive\n }\n return matchItem;\n };\n }]);\n\nangular.module(\"uib/template/accordion/accordion-group.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/accordion/accordion-group.html\",\n \"
    \\n\" +\n \"

    \\n\" +\n \" {{heading}}\\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/accordion/accordion.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/accordion/accordion.html\",\n \"
    \");\n}]);\n\nangular.module(\"uib/template/alert/alert.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/alert/alert.html\",\n \"\\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/carousel/carousel.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/carousel/carousel.html\",\n \"
    \\n\" +\n \" 1\\\">\\n\" +\n \" \\n\" +\n \" previous\\n\" +\n \"\\n\" +\n \" 1\\\">\\n\" +\n \" \\n\" +\n \" next\\n\" +\n \"\\n\" +\n \"
      1\\\">\\n\" +\n \"
    1. \\n\" +\n \" slide {{ $index + 1 }} of {{ slides.length }}, currently active\\n\" +\n \"
    2. \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/carousel/slide.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/carousel/slide.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/datepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/datepicker.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/day.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/day.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
    {{::label.abbr}}
    {{ weekNumbers[$index] }}\\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/month.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/month.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/year.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/year.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepickerPopup/popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepickerPopup/popup.html\",\n \"
      \\n\" +\n \"
    • \\n\" +\n \"
    • \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
    • \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/modal/window.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/modal/window.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/pager/pager.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/pager/pager.html\",\n \"
  • {{::getText('previous')}}
  • \\n\" +\n \"
  • {{::getText('next')}}
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/pagination/pagination.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/pagination/pagination.html\",\n \"
  • {{::getText('first')}}
  • \\n\" +\n \"
  • {{::getText('previous')}}
  • \\n\" +\n \"
  • {{page.text}}
  • \\n\" +\n \"
  • {{::getText('next')}}
  • \\n\" +\n \"
  • {{::getText('last')}}
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-html-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-html-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-template-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-template-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover-html.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/popover/popover-html.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover-template.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/popover/popover-template.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/popover/popover.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/progressbar/bar.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/progressbar/bar.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/progressbar/progress.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/progressbar/progress.html\",\n \"
    \");\n}]);\n\nangular.module(\"uib/template/progressbar/progressbar.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/progressbar/progressbar.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/rating/rating.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/rating/rating.html\",\n \"\\n\" +\n \" ({{ $index < value ? '*' : ' ' }})\\n\" +\n \" \\n\" +\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tabs/tab.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tabs/tab.html\",\n \"
  • \\n\" +\n \" {{heading}}\\n\" +\n \"
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tabs/tabset.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tabs/tabset.html\",\n \"
    \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/timepicker/timepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/timepicker/timepicker.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
        
      \\n\" +\n \" \\n\" +\n \" :\\n\" +\n \" \\n\" +\n \" :\\n\" +\n \" \\n\" +\n \"
        
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/typeahead/typeahead-match.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/typeahead/typeahead-match.html\",\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/typeahead/typeahead-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/typeahead/typeahead-popup.html\",\n \"
        \\n\" +\n \"
      • \\n\" +\n \"
        \\n\" +\n \"
      • \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\nangular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibCarouselCss && angular.element(document).find('head').prepend(''); angular.$$uibCarouselCss = true; });\nangular.module('ui.bootstrap.datepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerCss = true; });\nangular.module('ui.bootstrap.position').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibPositionCss && angular.element(document).find('head').prepend(''); angular.$$uibPositionCss = true; });\nangular.module('ui.bootstrap.datepickerPopup').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerpopupCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerpopupCss = true; });\nangular.module('ui.bootstrap.tooltip').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTooltipCss && angular.element(document).find('head').prepend(''); angular.$$uibTooltipCss = true; });\nangular.module('ui.bootstrap.timepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTimepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibTimepickerCss = true; });\nangular.module('ui.bootstrap.typeahead').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTypeaheadCss && angular.element(document).find('head').prepend(''); angular.$$uibTypeaheadCss = true; });\n/**\n * interact.js v1.2.8\n *\n * Copyright (c) 2012-2015 Taye Adeyemi \n * Open source under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n(function (realWindow) {\n 'use strict';\n\n // return early if there's no window to work with (eg. Node.js)\n if (!realWindow) { return; }\n\n var // get wrapped window if using Shadow DOM polyfill\n window = (function () {\n // create a TextNode\n var el = realWindow.document.createTextNode('');\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== realWindow.document\n && typeof realWindow.wrap === 'function'\n && realWindow.wrap(el) === el) {\n // return wrapped window\n return realWindow.wrap(realWindow);\n }\n\n // no Shadow DOM polyfil or native implementation\n return realWindow;\n }()),\n\n document = window.document,\n DocumentFragment = window.DocumentFragment || blank,\n SVGElement = window.SVGElement || blank,\n SVGSVGElement = window.SVGSVGElement || blank,\n SVGElementInstance = window.SVGElementInstance || blank,\n HTMLElement = window.HTMLElement || window.Element,\n\n PointerEvent = (window.PointerEvent || window.MSPointerEvent),\n pEventTypes,\n\n hypot = Math.hypot || function (x, y) { return Math.sqrt(x * x + y * y); },\n\n tmpXY = {}, // reduce object creation in getXY()\n\n documents = [], // all documents being listened to\n\n interactables = [], // all set interactables\n interactions = [], // all interactions\n\n dynamicDrop = false,\n\n // {\n // type: {\n // selectors: ['selector', ...],\n // contexts : [document, ...],\n // listeners: [[listener, useCapture], ...]\n // }\n // }\n delegatedEvents = {},\n\n defaultOptions = {\n base: {\n accept : null,\n actionChecker : null,\n styleCursor : true,\n preventDefault: 'auto',\n origin : { x: 0, y: 0 },\n deltaSource : 'page',\n allowFrom : null,\n ignoreFrom : null,\n _context : document,\n dropChecker : null\n },\n\n drag: {\n enabled: false,\n manualStart: true,\n max: Infinity,\n maxPerElement: 1,\n\n snap: null,\n restrict: null,\n inertia: null,\n autoScroll: null,\n\n axis: 'xy'\n },\n\n drop: {\n enabled: false,\n accept: null,\n overlap: 'pointer'\n },\n\n resize: {\n enabled: false,\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n\n snap: null,\n restrict: null,\n inertia: null,\n autoScroll: null,\n\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none'\n },\n\n gesture: {\n manualStart: false,\n enabled: false,\n max: Infinity,\n maxPerElement: 1,\n\n restrict: null\n },\n\n perAction: {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n\n snap: {\n enabled : false,\n endOnly : false,\n range : Infinity,\n targets : null,\n offsets : null,\n\n relativePoints: null\n },\n\n restrict: {\n enabled: false,\n endOnly: false\n },\n\n autoScroll: {\n enabled : false,\n container : null, // the item that is scrolled (Window or HTMLElement)\n margin : 60,\n speed : 300 // the scroll speed in pixels per second\n },\n\n inertia: {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n zeroResumeDelta : true, // if an action is resumed after launch, set dx/dy to 0\n smoothEndDuration: 300 // animate to snap/restrict endOnly if there's no inertia\n }\n },\n\n _holdDuration: 600\n },\n\n // Things related to autoScroll\n autoScroll = {\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0, y: 0, // Direction each pulse is to scroll in\n\n // scroll the window by the values in scroll.x/y\n scroll: function () {\n var options = autoScroll.interaction.target.options[autoScroll.interaction.prepared.name].autoScroll,\n container = options.container || getWindow(autoScroll.interaction.element),\n now = new Date().getTime(),\n // change in time in seconds\n dtx = (now - autoScroll.prevTimeX) / 1000,\n dty = (now - autoScroll.prevTimeY) / 1000,\n vx, vy, sx, sy;\n\n // displacement\n if (options.velocity) {\n vx = options.velocity.x;\n vy = options.velocity.y;\n }\n else {\n vx = vy = options.speed\n }\n \n sx = vx * dtx;\n sy = vy * dty;\n\n if (sx >= 1 || sy >= 1) {\n if (isWindow(container)) {\n container.scrollBy(autoScroll.x * sx, autoScroll.y * sy);\n }\n else if (container) {\n container.scrollLeft += autoScroll.x * sx;\n container.scrollTop += autoScroll.y * sy;\n }\n\n if (sx >=1) autoScroll.prevTimeX = now;\n if (sy >= 1) autoScroll.prevTimeY = now;\n }\n\n if (autoScroll.isScrolling) {\n cancelFrame(autoScroll.i);\n autoScroll.i = reqFrame(autoScroll.scroll);\n }\n },\n\n isScrolling: false,\n prevTimeX: 0,\n prevTimeY: 0,\n\n start: function (interaction) {\n autoScroll.isScrolling = true;\n cancelFrame(autoScroll.i);\n\n autoScroll.interaction = interaction;\n autoScroll.prevTimeX = new Date().getTime();\n autoScroll.prevTimeY = new Date().getTime();\n autoScroll.i = reqFrame(autoScroll.scroll);\n },\n\n stop: function () {\n autoScroll.isScrolling = false;\n cancelFrame(autoScroll.i);\n }\n },\n\n // Does the browser support touch input?\n supportsTouch = (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch),\n\n // Does the browser support PointerEvents\n // Avoid PointerEvent bugs introduced in Chrome 55\n supportsPointerEvent = PointerEvent && !/Chrome/.test(navigator.userAgent),\n\n // Less Precision with touch input\n margin = supportsTouch || supportsPointerEvent? 20: 10,\n\n pointerMoveTolerance = 1,\n\n // for ignoring browser's simulated mouse events\n prevTouchTime = 0,\n\n // Allow this many interactions to happen simultaneously\n maxInteractions = Infinity,\n\n // Check if is IE9 or older\n actionCursors = (document.all && !window.atob) ? {\n drag : 'move',\n resizex : 'e-resize',\n resizey : 's-resize',\n resizexy: 'se-resize',\n\n resizetop : 'n-resize',\n resizeleft : 'w-resize',\n resizebottom : 's-resize',\n resizeright : 'e-resize',\n resizetopleft : 'se-resize',\n resizebottomright: 'se-resize',\n resizetopright : 'ne-resize',\n resizebottomleft : 'ne-resize',\n\n gesture : ''\n } : {\n drag : 'move',\n resizex : 'ew-resize',\n resizey : 'ns-resize',\n resizexy: 'nwse-resize',\n\n resizetop : 'ns-resize',\n resizeleft : 'ew-resize',\n resizebottom : 'ns-resize',\n resizeright : 'ew-resize',\n resizetopleft : 'nwse-resize',\n resizebottomright: 'nwse-resize',\n resizetopright : 'nesw-resize',\n resizebottomleft : 'nesw-resize',\n\n gesture : ''\n },\n\n actionIsEnabled = {\n drag : true,\n resize : true,\n gesture: true\n },\n\n // because Webkit and Opera still use 'mousewheel' event type\n wheelEvent = 'onmousewheel' in document? 'mousewheel': 'wheel',\n\n eventTypes = [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeend',\n 'gesturestart',\n 'gesturemove',\n 'gestureinertiastart',\n 'gestureend',\n\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold'\n ],\n\n globalEvents = {},\n\n // Opera Mobile must be handled differently\n isOperaMobile = navigator.appName == 'Opera' &&\n supportsTouch &&\n navigator.userAgent.match('Presto'),\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform)\n && /OS 7[^\\d]/.test(navigator.appVersion)),\n\n // prefix matchesSelector\n prefixedMatchesSelector = 'matches' in Element.prototype?\n 'matches': 'webkitMatchesSelector' in Element.prototype?\n 'webkitMatchesSelector': 'mozMatchesSelector' in Element.prototype?\n 'mozMatchesSelector': 'oMatchesSelector' in Element.prototype?\n 'oMatchesSelector': 'msMatchesSelector',\n\n // will be polyfill function if browser is IE8\n ie8MatchesSelector,\n\n // native requestAnimationFrame or polyfill\n reqFrame = realWindow.requestAnimationFrame,\n cancelFrame = realWindow.cancelAnimationFrame,\n\n // Events wrapper\n events = (function () {\n var useAttachEvent = ('attachEvent' in window) && !('addEventListener' in window),\n addEvent = useAttachEvent? 'attachEvent': 'addEventListener',\n removeEvent = useAttachEvent? 'detachEvent': 'removeEventListener',\n on = useAttachEvent? 'on': '',\n\n elements = [],\n targets = [],\n attachedListeners = [];\n\n function add (element, type, listener, useCapture) {\n var elementIndex = indexOf(elements, element),\n target = targets[elementIndex];\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0\n };\n\n elementIndex = elements.push(element) - 1;\n targets.push(target);\n\n attachedListeners.push((useAttachEvent ? {\n supplied: [],\n wrapped : [],\n useCount: []\n } : null));\n }\n\n if (!target.events[type]) {\n target.events[type] = [];\n target.typeCount++;\n }\n\n if (!contains(target.events[type], listener)) {\n var ret;\n\n if (useAttachEvent) {\n var listeners = attachedListeners[elementIndex],\n listenerIndex = indexOf(listeners.supplied, listener);\n\n var wrapped = listeners.wrapped[listenerIndex] || function (event) {\n if (!event.immediatePropagationStopped) {\n event.target = event.srcElement;\n event.currentTarget = element;\n\n event.preventDefault = event.preventDefault || preventDef;\n event.stopPropagation = event.stopPropagation || stopProp;\n event.stopImmediatePropagation = event.stopImmediatePropagation || stopImmProp;\n\n if (/mouse|click/.test(event.type)) {\n event.pageX = event.clientX + getWindow(element).document.documentElement.scrollLeft;\n event.pageY = event.clientY + getWindow(element).document.documentElement.scrollTop;\n }\n\n listener(event);\n }\n };\n\n ret = element[addEvent](on + type, wrapped, Boolean(useCapture));\n\n if (listenerIndex === -1) {\n listeners.supplied.push(listener);\n listeners.wrapped.push(wrapped);\n listeners.useCount.push(1);\n }\n else {\n listeners.useCount[listenerIndex]++;\n }\n }\n else {\n ret = element[addEvent](type, listener, useCapture || false);\n }\n target.events[type].push(listener);\n\n return ret;\n }\n }\n\n function remove (element, type, listener, useCapture) {\n var i,\n elementIndex = indexOf(elements, element),\n target = targets[elementIndex],\n listeners,\n listenerIndex,\n wrapped = listener;\n\n if (!target || !target.events) {\n return;\n }\n\n if (useAttachEvent) {\n listeners = attachedListeners[elementIndex];\n listenerIndex = indexOf(listeners.supplied, listener);\n wrapped = listeners.wrapped[listenerIndex];\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all');\n }\n }\n return;\n }\n\n if (target.events[type]) {\n var len = target.events[type].length;\n\n if (listener === 'all') {\n for (i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], Boolean(useCapture));\n }\n return;\n } else {\n for (i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element[removeEvent](on + type, wrapped, useCapture || false);\n target.events[type].splice(i, 1);\n\n if (useAttachEvent && listeners) {\n listeners.useCount[listenerIndex]--;\n if (listeners.useCount[listenerIndex] === 0) {\n listeners.supplied.splice(listenerIndex, 1);\n listeners.wrapped.splice(listenerIndex, 1);\n listeners.useCount.splice(listenerIndex, 1);\n }\n }\n\n break;\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n target.events[type] = null;\n target.typeCount--;\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1);\n elements.splice(elementIndex, 1);\n attachedListeners.splice(elementIndex, 1);\n }\n }\n\n function preventDef () {\n this.returnValue = false;\n }\n\n function stopProp () {\n this.cancelBubble = true;\n }\n\n function stopImmProp () {\n this.cancelBubble = true;\n this.immediatePropagationStopped = true;\n }\n\n return {\n add: add,\n remove: remove,\n useAttachEvent: useAttachEvent,\n\n _elements: elements,\n _targets: targets,\n _attachedListeners: attachedListeners\n };\n }());\n\n function blank () {}\n\n function isElement (o) {\n if (!o || (typeof o !== 'object')) { return false; }\n\n var _window = getWindow(o) || window;\n\n return (/object|function/.test(typeof _window.Element)\n ? o instanceof _window.Element //DOM2\n : o.nodeType === 1 && typeof o.nodeName === \"string\");\n }\n function isWindow (thing) { return thing === window || !!(thing && thing.Window) && (thing instanceof thing.Window); }\n function isDocFrag (thing) { return !!thing && thing instanceof DocumentFragment; }\n function isArray (thing) {\n return isObject(thing)\n && (typeof thing.length !== undefined)\n && isFunction(thing.splice);\n }\n function isObject (thing) { return !!thing && (typeof thing === 'object'); }\n function isFunction (thing) { return typeof thing === 'function'; }\n function isNumber (thing) { return typeof thing === 'number' ; }\n function isBool (thing) { return typeof thing === 'boolean' ; }\n function isString (thing) { return typeof thing === 'string' ; }\n\n function trySelector (value) {\n if (!isString(value)) { return false; }\n\n // an exception will be raised if it is invalid\n document.querySelector(value);\n return true;\n }\n\n function extend (dest, source) {\n for (var prop in source) {\n dest[prop] = source[prop];\n }\n return dest;\n }\n\n var prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/\n };\n\n function pointerExtend (dest, source) {\n for (var prop in source) {\n var deprecated = false;\n\n // skip deprecated prefixed properties\n for (var vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true;\n break;\n }\n }\n\n if (!deprecated) {\n dest[prop] = source[prop];\n }\n }\n return dest;\n }\n\n function copyCoords (dest, src) {\n dest.page = dest.page || {};\n dest.page.x = src.page.x;\n dest.page.y = src.page.y;\n\n dest.client = dest.client || {};\n dest.client.x = src.client.x;\n dest.client.y = src.client.y;\n\n dest.timeStamp = src.timeStamp;\n }\n\n function setEventXY (targetObj, pointers, interaction) {\n var pointer = (pointers.length > 1\n ? pointerAverage(pointers)\n : pointers[0]);\n\n getPageXY(pointer, tmpXY, interaction);\n targetObj.page.x = tmpXY.x;\n targetObj.page.y = tmpXY.y;\n\n getClientXY(pointer, tmpXY, interaction);\n targetObj.client.x = tmpXY.x;\n targetObj.client.y = tmpXY.y;\n\n targetObj.timeStamp = new Date().getTime();\n }\n\n function setEventDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x;\n targetObj.page.y = cur.page.y - prev.page.y;\n targetObj.client.x = cur.client.x - prev.client.x;\n targetObj.client.y = cur.client.y - prev.client.y;\n targetObj.timeStamp = new Date().getTime() - prev.timeStamp;\n\n // set pointer velocity\n var dt = Math.max(targetObj.timeStamp / 1000, 0.001);\n targetObj.page.speed = hypot(targetObj.page.x, targetObj.page.y) / dt;\n targetObj.page.vx = targetObj.page.x / dt;\n targetObj.page.vy = targetObj.page.y / dt;\n\n targetObj.client.speed = hypot(targetObj.client.x, targetObj.page.y) / dt;\n targetObj.client.vx = targetObj.client.x / dt;\n targetObj.client.vy = targetObj.client.y / dt;\n }\n\n function isNativePointer (pointer) {\n return (pointer instanceof window.Event\n || (supportsTouch && window.Touch && pointer instanceof window.Touch));\n }\n\n // Get specified X/Y coords for mouse or event.touches[0]\n function getXY (type, pointer, xy) {\n xy = xy || {};\n type = type || 'page';\n\n xy.x = pointer[type + 'X'];\n xy.y = pointer[type + 'Y'];\n\n return xy;\n }\n\n function getPageXY (pointer, page) {\n page = page || {};\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page);\n\n page.x += window.scrollX;\n page.y += window.scrollY;\n }\n else {\n getXY('page', pointer, page);\n }\n\n return page;\n }\n\n function getClientXY (pointer, client) {\n client = client || {};\n\n if (isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client);\n }\n else {\n getXY('client', pointer, client);\n }\n\n return client;\n }\n\n function getScrollXY (win) {\n win = win || window;\n return {\n x: win.scrollX || win.document.documentElement.scrollLeft,\n y: win.scrollY || win.document.documentElement.scrollTop\n };\n }\n\n function getPointerId (pointer) {\n return isNumber(pointer.pointerId)? pointer.pointerId : pointer.identifier;\n }\n\n function getActualElement (element) {\n return (element instanceof SVGElementInstance\n ? element.correspondingUseElement\n : element);\n }\n\n function getWindow (node) {\n if (isWindow(node)) {\n return node;\n }\n\n var rootNode = (node.ownerDocument || node);\n\n return rootNode.defaultView || rootNode.parentWindow || window;\n }\n\n function getElementClientRect (element) {\n var clientRect = (element instanceof SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0]);\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top\n };\n }\n\n function getElementRect (element) {\n var clientRect = getElementClientRect(element);\n\n if (!isIOS7 && clientRect) {\n var scroll = getScrollXY(getWindow(element));\n\n clientRect.left += scroll.x;\n clientRect.right += scroll.x;\n clientRect.top += scroll.y;\n clientRect.bottom += scroll.y;\n }\n\n return clientRect;\n }\n\n function getTouchPair (event) {\n var touches = [];\n\n // array of touches is supplied\n if (isArray(event)) {\n touches[0] = event[0];\n touches[1] = event[1];\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0];\n touches[1] = event.changedTouches[0];\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0];\n touches[1] = event.changedTouches[1];\n }\n }\n else {\n touches[0] = event.touches[0];\n touches[1] = event.touches[1];\n }\n }\n\n return touches;\n }\n\n function pointerAverage (pointers) {\n var average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0\n };\n var prop;\n\n for (var i = 0; i < pointers.length; i++) {\n for (prop in average) {\n average[prop] += pointers[i][prop];\n }\n }\n for (prop in average) {\n average[prop] /= pointers.length;\n }\n\n return average;\n }\n\n function touchBBox (event) {\n if (!event.length && !(event.touches && event.touches.length > 1)) {\n return;\n }\n\n var touches = getTouchPair(event),\n minX = Math.min(touches[0].pageX, touches[1].pageX),\n minY = Math.min(touches[0].pageY, touches[1].pageY),\n maxX = Math.max(touches[0].pageX, touches[1].pageX),\n maxY = Math.max(touches[0].pageY, touches[1].pageY);\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n function touchDistance (event, deltaSource) {\n deltaSource = deltaSource || defaultOptions.deltaSource;\n\n var sourceX = deltaSource + 'X',\n sourceY = deltaSource + 'Y',\n touches = getTouchPair(event);\n\n\n var dx = touches[0][sourceX] - touches[1][sourceX],\n dy = touches[0][sourceY] - touches[1][sourceY];\n\n return hypot(dx, dy);\n }\n\n function touchAngle (event, prevAngle, deltaSource) {\n deltaSource = deltaSource || defaultOptions.deltaSource;\n\n var sourceX = deltaSource + 'X',\n sourceY = deltaSource + 'Y',\n touches = getTouchPair(event),\n dx = touches[0][sourceX] - touches[1][sourceX],\n dy = touches[0][sourceY] - touches[1][sourceY],\n angle = 180 * Math.atan(dy / dx) / Math.PI;\n\n if (isNumber(prevAngle)) {\n var dr = angle - prevAngle,\n drClamped = dr % 360;\n\n if (drClamped > 315) {\n angle -= 360 + (angle / 360)|0 * 360;\n }\n else if (drClamped > 135) {\n angle -= 180 + (angle / 360)|0 * 360;\n }\n else if (drClamped < -315) {\n angle += 360 + (angle / 360)|0 * 360;\n }\n else if (drClamped < -135) {\n angle += 180 + (angle / 360)|0 * 360;\n }\n }\n\n return angle;\n }\n\n function getOriginXY (interactable, element) {\n var origin = interactable\n ? interactable.options.origin\n : defaultOptions.origin;\n\n if (origin === 'parent') {\n origin = parentElement(element);\n }\n else if (origin === 'self') {\n origin = interactable.getRect(element);\n }\n else if (trySelector(origin)) {\n origin = closest(element, origin) || { x: 0, y: 0 };\n }\n\n if (isFunction(origin)) {\n origin = origin(interactable && element);\n }\n\n if (isElement(origin)) {\n origin = getElementRect(origin);\n }\n\n origin.x = ('x' in origin)? origin.x : origin.left;\n origin.y = ('y' in origin)? origin.y : origin.top;\n\n return origin;\n }\n\n // http://stackoverflow.com/a/5634528/2280888\n function _getQBezierValue(t, p1, p2, p3) {\n var iT = 1 - t;\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;\n }\n\n function getQuadraticCurvePoint(startX, startY, cpX, cpY, endX, endY, position) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY)\n };\n }\n\n // http://gizma.com/easing/\n function easeOutQuad (t, b, c, d) {\n t /= d;\n return -c * t*(t-2) + b;\n }\n\n function nodeContains (parent, child) {\n while (child) {\n if (child === parent) {\n return true;\n }\n\n child = child.parentNode;\n }\n\n return false;\n }\n\n function closest (child, selector) {\n var parent = parentElement(child);\n\n while (isElement(parent)) {\n if (matchesSelector(parent, selector)) { return parent; }\n\n parent = parentElement(parent);\n }\n\n return null;\n }\n\n function parentElement (node) {\n var parent = node.parentNode;\n\n if (isDocFrag(parent)) {\n // skip past #shado-root fragments\n while ((parent = parent.host) && isDocFrag(parent)) {}\n\n return parent;\n }\n\n return parent;\n }\n\n function inContext (interactable, element) {\n return interactable._context === element.ownerDocument\n || nodeContains(interactable._context, element);\n }\n\n function testIgnore (interactable, interactableElement, element) {\n var ignoreFrom = interactable.options.ignoreFrom;\n\n if (!ignoreFrom || !isElement(element)) { return false; }\n\n if (isString(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, interactableElement);\n }\n else if (isElement(ignoreFrom)) {\n return nodeContains(ignoreFrom, element);\n }\n\n return false;\n }\n\n function testAllow (interactable, interactableElement, element) {\n var allowFrom = interactable.options.allowFrom;\n\n if (!allowFrom) { return true; }\n\n if (!isElement(element)) { return false; }\n\n if (isString(allowFrom)) {\n return matchesUpTo(element, allowFrom, interactableElement);\n }\n else if (isElement(allowFrom)) {\n return nodeContains(allowFrom, element);\n }\n\n return false;\n }\n\n function checkAxis (axis, interactable) {\n if (!interactable) { return false; }\n\n var thisAxis = interactable.options.drag.axis;\n\n return (axis === 'xy' || thisAxis === 'xy' || thisAxis === axis);\n }\n\n function checkSnap (interactable, action) {\n var options = interactable.options;\n\n if (/^resize/.test(action)) {\n action = 'resize';\n }\n\n return options[action].snap && options[action].snap.enabled;\n }\n\n function checkRestrict (interactable, action) {\n var options = interactable.options;\n\n if (/^resize/.test(action)) {\n action = 'resize';\n }\n\n return options[action].restrict && options[action].restrict.enabled;\n }\n\n function checkAutoScroll (interactable, action) {\n var options = interactable.options;\n\n if (/^resize/.test(action)) {\n action = 'resize';\n }\n\n return options[action].autoScroll && options[action].autoScroll.enabled;\n }\n\n function withinInteractionLimit (interactable, element, action) {\n var options = interactable.options,\n maxActions = options[action.name].max,\n maxPerElement = options[action.name].maxPerElement,\n activeInteractions = 0,\n targetCount = 0,\n targetElementCount = 0;\n\n for (var i = 0, len = interactions.length; i < len; i++) {\n var interaction = interactions[i],\n otherAction = interaction.prepared.name,\n active = interaction.interacting();\n\n if (!active) { continue; }\n\n activeInteractions++;\n\n if (activeInteractions >= maxInteractions) {\n return false;\n }\n\n if (interaction.target !== interactable) { continue; }\n\n targetCount += (otherAction === action.name)|0;\n\n if (targetCount >= maxActions) {\n return false;\n }\n\n if (interaction.element === element) {\n targetElementCount++;\n\n if (otherAction !== action.name || targetElementCount >= maxPerElement) {\n return false;\n }\n }\n }\n\n return maxInteractions > 0;\n }\n\n // Test for the element that's \"above\" all other qualifiers\n function indexOfDeepestElement (elements) {\n var dropzone,\n deepestZone = elements[0],\n index = deepestZone? 0: -1,\n parent,\n deepestZoneParents = [],\n dropzoneParents = [],\n child,\n i,\n n;\n\n for (i = 1; i < elements.length; i++) {\n dropzone = elements[i];\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue;\n }\n\n if (!deepestZone) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue;\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone;\n index = i;\n continue;\n }\n\n if (!deepestZoneParents.length) {\n parent = deepestZone;\n while (parent.parentNode && parent.parentNode !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n }\n\n // if this element is an svg element and the current deepest is\n // an HTMLElement\n if (deepestZone instanceof HTMLElement\n && dropzone instanceof SVGElement\n && !(dropzone instanceof SVGSVGElement)) {\n\n if (dropzone === deepestZone.parentNode) {\n continue;\n }\n\n parent = dropzone.ownerSVGElement;\n }\n else {\n parent = dropzone;\n }\n\n dropzoneParents = [];\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent);\n parent = parent.parentNode;\n }\n\n n = 0;\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++;\n }\n\n var parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n]\n ];\n\n child = parents[0].lastChild;\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone;\n index = i;\n deepestZoneParents = [];\n\n break;\n }\n else if (child === parents[2]) {\n break;\n }\n\n child = child.previousSibling;\n }\n }\n\n return index;\n }\n\n function Interaction () {\n this.target = null; // current interactable being interacted with\n this.element = null; // the target element of the interactable\n this.dropTarget = null; // the dropzone a drag target might be dropped into\n this.dropElement = null; // the element at the time of checking\n this.prevDropTarget = null; // the dropzone that was recently dragged away from\n this.prevDropElement = null; // the element at the time of checking\n\n this.prepared = { // action that's ready to be fired on next move event\n name : null,\n axis : null,\n edges: null\n };\n\n this.matches = []; // all selectors that are matched by target element\n this.matchElements = []; // corresponding elements\n\n this.inertiaStatus = {\n active : false,\n smoothEnd : false,\n ending : false,\n\n startEvent: null,\n upCoords: {},\n\n xe: 0, ye: 0,\n sx: 0, sy: 0,\n\n t0: 0,\n vx0: 0, vys: 0,\n duration: 0,\n\n resumeDx: 0,\n resumeDy: 0,\n\n lambda_v0: 0,\n one_ve_v0: 0,\n i : null\n };\n\n if (isFunction(Function.prototype.bind)) {\n this.boundInertiaFrame = this.inertiaFrame.bind(this);\n this.boundSmoothEndFrame = this.smoothEndFrame.bind(this);\n }\n else {\n var that = this;\n\n this.boundInertiaFrame = function () { return that.inertiaFrame(); };\n this.boundSmoothEndFrame = function () { return that.smoothEndFrame(); };\n }\n\n this.activeDrops = {\n dropzones: [], // the dropzones that are mentioned below\n elements : [], // elements of dropzones that accept the target draggable\n rects : [] // the rects of the elements mentioned above\n };\n\n // keep track of added pointers\n this.pointers = [];\n this.pointerIds = [];\n this.downTargets = [];\n this.downTimes = [];\n this.holdTimers = [];\n\n // Previous native pointer move event coordinates\n this.prevCoords = {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0\n };\n // current native pointer move event coordinates\n this.curCoords = {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0\n };\n\n // Starting InteractEvent pointer coordinates\n this.startCoords = {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0\n };\n\n // Change in coordinates and time of the pointer\n this.pointerDelta = {\n page : { x: 0, y: 0, vx: 0, vy: 0, speed: 0 },\n client : { x: 0, y: 0, vx: 0, vy: 0, speed: 0 },\n timeStamp: 0\n };\n\n this.downEvent = null; // pointerdown/mousedown/touchstart event\n this.downPointer = {};\n\n this._eventTarget = null;\n this._curEventTarget = null;\n\n this.prevEvent = null; // previous action event\n this.tapTime = 0; // time of the most recent tap event\n this.prevTap = null;\n\n this.startOffset = { left: 0, right: 0, top: 0, bottom: 0 };\n this.restrictOffset = { left: 0, right: 0, top: 0, bottom: 0 };\n this.snapOffsets = [];\n\n this.gesture = {\n start: { x: 0, y: 0 },\n\n startDistance: 0, // distance between two touches of touchStart\n prevDistance : 0,\n distance : 0,\n\n scale: 1, // gesture.distance / gesture.startDistance\n\n startAngle: 0, // angle of line joining two touches\n prevAngle : 0 // angle of the previous gesture event\n };\n\n this.snapStatus = {\n x : 0, y : 0,\n dx : 0, dy : 0,\n realX : 0, realY : 0,\n snappedX: 0, snappedY: 0,\n targets : [],\n locked : false,\n changed : false\n };\n\n this.restrictStatus = {\n dx : 0, dy : 0,\n restrictedX: 0, restrictedY: 0,\n snap : null,\n restricted : false,\n changed : false\n };\n\n this.restrictStatus.snap = this.snapStatus;\n\n this.pointerIsDown = false;\n this.pointerWasMoved = false;\n this.gesturing = false;\n this.dragging = false;\n this.resizing = false;\n this.resizeAxes = 'xy';\n\n this.mouse = false;\n\n interactions.push(this);\n }\n\n Interaction.prototype = {\n getPageXY : function (pointer, xy) { return getPageXY(pointer, xy, this); },\n getClientXY: function (pointer, xy) { return getClientXY(pointer, xy, this); },\n setEventXY : function (target, ptr) { return setEventXY(target, ptr, this); },\n\n pointerOver: function (pointer, event, eventTarget) {\n if (this.prepared.name || !this.mouse) { return; }\n\n var curMatches = [],\n curMatchElements = [],\n prevTargetElement = this.element;\n\n this.addPointer(pointer);\n\n if (this.target\n && (testIgnore(this.target, this.element, eventTarget)\n || !testAllow(this.target, this.element, eventTarget))) {\n // if the eventTarget should be ignored or shouldn't be allowed\n // clear the previous target\n this.target = null;\n this.element = null;\n this.matches = [];\n this.matchElements = [];\n }\n\n var elementInteractable = interactables.get(eventTarget),\n elementAction = (elementInteractable\n && !testIgnore(elementInteractable, eventTarget, eventTarget)\n && testAllow(elementInteractable, eventTarget, eventTarget)\n && validateAction(\n elementInteractable.getAction(pointer, event, this, eventTarget),\n elementInteractable));\n\n if (elementAction && !withinInteractionLimit(elementInteractable, eventTarget, elementAction)) {\n elementAction = null;\n }\n\n function pushCurMatches (interactable, selector) {\n if (interactable\n && inContext(interactable, eventTarget)\n && !testIgnore(interactable, eventTarget, eventTarget)\n && testAllow(interactable, eventTarget, eventTarget)\n && matchesSelector(eventTarget, selector)) {\n\n curMatches.push(interactable);\n curMatchElements.push(eventTarget);\n }\n }\n\n if (elementAction) {\n this.target = elementInteractable;\n this.element = eventTarget;\n this.matches = [];\n this.matchElements = [];\n }\n else {\n interactables.forEachSelector(pushCurMatches);\n\n if (this.validateSelector(pointer, event, curMatches, curMatchElements)) {\n this.matches = curMatches;\n this.matchElements = curMatchElements;\n\n this.pointerHover(pointer, event, this.matches, this.matchElements);\n events.add(eventTarget,\n supportsPointerEvent? pEventTypes.move : 'mousemove',\n listeners.pointerHover);\n }\n else if (this.target) {\n if (nodeContains(prevTargetElement, eventTarget)) {\n this.pointerHover(pointer, event, this.matches, this.matchElements);\n events.add(this.element,\n supportsPointerEvent? pEventTypes.move : 'mousemove',\n listeners.pointerHover);\n }\n else {\n this.target = null;\n this.element = null;\n this.matches = [];\n this.matchElements = [];\n }\n }\n }\n },\n\n // Check what action would be performed on pointerMove target if a mouse\n // button were pressed and change the cursor accordingly\n pointerHover: function (pointer, event, eventTarget, curEventTarget, matches, matchElements) {\n var target = this.target;\n\n if (!this.prepared.name && this.mouse) {\n\n var action;\n\n // update pointer coords for defaultActionChecker to use\n this.setEventXY(this.curCoords, [pointer]);\n\n if (matches) {\n action = this.validateSelector(pointer, event, matches, matchElements);\n }\n else if (target) {\n action = validateAction(target.getAction(this.pointers[0], event, this, this.element), this.target);\n }\n\n if (target && target.options.styleCursor) {\n if (action) {\n target._doc.documentElement.style.cursor = getActionCursor(action);\n }\n else {\n target._doc.documentElement.style.cursor = '';\n }\n }\n }\n else if (this.prepared.name) {\n this.checkAndPreventDefault(event, target, this.element);\n }\n },\n\n pointerOut: function (pointer, event, eventTarget) {\n if (this.prepared.name) { return; }\n\n // Remove temporary event listeners for selector Interactables\n if (!interactables.get(eventTarget)) {\n events.remove(eventTarget,\n supportsPointerEvent? pEventTypes.move : 'mousemove',\n listeners.pointerHover);\n }\n\n if (this.target && this.target.options.styleCursor && !this.interacting()) {\n this.target._doc.documentElement.style.cursor = '';\n }\n },\n\n selectorDown: function (pointer, event, eventTarget, curEventTarget) {\n var that = this,\n // copy event to be used in timeout for IE8\n eventCopy = events.useAttachEvent? extend({}, event) : event,\n element = eventTarget,\n pointerIndex = this.addPointer(pointer),\n action;\n\n this.holdTimers[pointerIndex] = setTimeout(function () {\n that.pointerHold(events.useAttachEvent? eventCopy : pointer, eventCopy, eventTarget, curEventTarget);\n }, defaultOptions._holdDuration);\n\n this.pointerIsDown = true;\n\n // Check if the down event hits the current inertia target\n if (this.inertiaStatus.active && this.target.selector) {\n // climb up the DOM tree from the event target\n while (isElement(element)) {\n\n // if this element is the current inertia target element\n if (element === this.element\n // and the prospective action is the same as the ongoing one\n && validateAction(this.target.getAction(pointer, event, this, this.element), this.target).name === this.prepared.name) {\n\n // stop inertia so that the next move will be a normal one\n cancelFrame(this.inertiaStatus.i);\n this.inertiaStatus.active = false;\n\n this.collectEventTargets(pointer, event, eventTarget, 'down');\n return;\n }\n element = parentElement(element);\n }\n }\n\n // do nothing if interacting\n if (this.interacting()) {\n this.collectEventTargets(pointer, event, eventTarget, 'down');\n return;\n }\n\n function pushMatches (interactable, selector, context) {\n var elements = ie8MatchesSelector\n ? context.querySelectorAll(selector)\n : undefined;\n\n if (inContext(interactable, element)\n && !testIgnore(interactable, element, eventTarget)\n && testAllow(interactable, element, eventTarget)\n && matchesSelector(element, selector, elements)) {\n\n that.matches.push(interactable);\n that.matchElements.push(element);\n }\n }\n\n // update pointer coords for defaultActionChecker to use\n this.setEventXY(this.curCoords, [pointer]);\n this.downEvent = event;\n\n while (isElement(element) && !action) {\n this.matches = [];\n this.matchElements = [];\n\n interactables.forEachSelector(pushMatches);\n\n action = this.validateSelector(pointer, event, this.matches, this.matchElements);\n element = parentElement(element);\n }\n\n if (action) {\n this.prepared.name = action.name;\n this.prepared.axis = action.axis;\n this.prepared.edges = action.edges;\n\n this.collectEventTargets(pointer, event, eventTarget, 'down');\n\n return this.pointerDown(pointer, event, eventTarget, curEventTarget, action);\n }\n else {\n // do these now since pointerDown isn't being called from here\n this.downTimes[pointerIndex] = new Date().getTime();\n this.downTargets[pointerIndex] = eventTarget;\n pointerExtend(this.downPointer, pointer);\n\n copyCoords(this.prevCoords, this.curCoords);\n this.pointerWasMoved = false;\n }\n\n this.collectEventTargets(pointer, event, eventTarget, 'down');\n },\n\n // Determine action to be performed on next pointerMove and add appropriate\n // style and event Listeners\n pointerDown: function (pointer, event, eventTarget, curEventTarget, forceAction) {\n if (!forceAction && !this.inertiaStatus.active && this.pointerWasMoved && this.prepared.name) {\n this.checkAndPreventDefault(event, this.target, this.element);\n\n return;\n }\n\n this.pointerIsDown = true;\n this.downEvent = event;\n\n var pointerIndex = this.addPointer(pointer),\n action;\n\n // If it is the second touch of a multi-touch gesture, keep the\n // target the same and get a new action if a target was set by the\n // first touch\n if (this.pointerIds.length > 1 && this.target._element === this.element) {\n var newAction = validateAction(forceAction || this.target.getAction(pointer, event, this, this.element), this.target);\n\n if (withinInteractionLimit(this.target, this.element, newAction)) {\n action = newAction;\n }\n\n this.prepared.name = null;\n }\n // Otherwise, set the target if there is no action prepared\n else if (!this.prepared.name) {\n var interactable = interactables.get(curEventTarget);\n\n if (interactable\n && !testIgnore(interactable, curEventTarget, eventTarget)\n && testAllow(interactable, curEventTarget, eventTarget)\n && (action = validateAction(forceAction || interactable.getAction(pointer, event, this, curEventTarget), interactable, eventTarget))\n && withinInteractionLimit(interactable, curEventTarget, action)) {\n this.target = interactable;\n this.element = curEventTarget;\n }\n }\n\n var target = this.target,\n options = target && target.options;\n\n if (target && (forceAction || !this.prepared.name)) {\n action = action || validateAction(forceAction || target.getAction(pointer, event, this, curEventTarget), target, this.element);\n\n this.setEventXY(this.startCoords, this.pointers);\n\n if (!action) { return; }\n\n if (options.styleCursor) {\n target._doc.documentElement.style.cursor = getActionCursor(action);\n }\n\n this.resizeAxes = action.name === 'resize'? action.axis : null;\n\n if (action === 'gesture' && this.pointerIds.length < 2) {\n action = null;\n }\n\n this.prepared.name = action.name;\n this.prepared.axis = action.axis;\n this.prepared.edges = action.edges;\n\n this.snapStatus.snappedX = this.snapStatus.snappedY =\n this.restrictStatus.restrictedX = this.restrictStatus.restrictedY = NaN;\n\n this.downTimes[pointerIndex] = new Date().getTime();\n this.downTargets[pointerIndex] = eventTarget;\n pointerExtend(this.downPointer, pointer);\n\n copyCoords(this.prevCoords, this.startCoords);\n this.pointerWasMoved = false;\n\n this.checkAndPreventDefault(event, target, this.element);\n }\n // if inertia is active try to resume action\n else if (this.inertiaStatus.active\n && curEventTarget === this.element\n && validateAction(target.getAction(pointer, event, this, this.element), target).name === this.prepared.name) {\n\n cancelFrame(this.inertiaStatus.i);\n this.inertiaStatus.active = false;\n\n this.checkAndPreventDefault(event, target, this.element);\n }\n },\n\n setModifications: function (coords, preEnd) {\n var target = this.target,\n shouldMove = true,\n shouldSnap = checkSnap(target, this.prepared.name) && (!target.options[this.prepared.name].snap.endOnly || preEnd),\n shouldRestrict = checkRestrict(target, this.prepared.name) && (!target.options[this.prepared.name].restrict.endOnly || preEnd);\n\n if (shouldSnap ) { this.setSnapping (coords); } else { this.snapStatus .locked = false; }\n if (shouldRestrict) { this.setRestriction(coords); } else { this.restrictStatus.restricted = false; }\n\n if (shouldSnap && this.snapStatus.locked && !this.snapStatus.changed) {\n shouldMove = shouldRestrict && this.restrictStatus.restricted && this.restrictStatus.changed;\n }\n else if (shouldRestrict && this.restrictStatus.restricted && !this.restrictStatus.changed) {\n shouldMove = false;\n }\n\n return shouldMove;\n },\n\n setStartOffsets: function (action, interactable, element) {\n var rect = interactable.getRect(element),\n origin = getOriginXY(interactable, element),\n snap = interactable.options[this.prepared.name].snap,\n restrict = interactable.options[this.prepared.name].restrict,\n width, height;\n\n if (rect) {\n this.startOffset.left = this.startCoords.page.x - rect.left;\n this.startOffset.top = this.startCoords.page.y - rect.top;\n\n this.startOffset.right = rect.right - this.startCoords.page.x;\n this.startOffset.bottom = rect.bottom - this.startCoords.page.y;\n\n if ('width' in rect) { width = rect.width; }\n else { width = rect.right - rect.left; }\n if ('height' in rect) { height = rect.height; }\n else { height = rect.bottom - rect.top; }\n }\n else {\n this.startOffset.left = this.startOffset.top = this.startOffset.right = this.startOffset.bottom = 0;\n }\n\n this.snapOffsets.splice(0);\n\n var snapOffset = snap && snap.offset === 'startCoords'\n ? {\n x: this.startCoords.page.x - origin.x,\n y: this.startCoords.page.y - origin.y\n }\n : snap && snap.offset || { x: 0, y: 0 };\n\n if (rect && snap && snap.relativePoints && snap.relativePoints.length) {\n for (var i = 0; i < snap.relativePoints.length; i++) {\n this.snapOffsets.push({\n x: this.startOffset.left - (width * snap.relativePoints[i].x) + snapOffset.x,\n y: this.startOffset.top - (height * snap.relativePoints[i].y) + snapOffset.y\n });\n }\n }\n else {\n this.snapOffsets.push(snapOffset);\n }\n\n if (rect && restrict.elementRect) {\n this.restrictOffset.left = this.startOffset.left - (width * restrict.elementRect.left);\n this.restrictOffset.top = this.startOffset.top - (height * restrict.elementRect.top);\n\n this.restrictOffset.right = this.startOffset.right - (width * (1 - restrict.elementRect.right));\n this.restrictOffset.bottom = this.startOffset.bottom - (height * (1 - restrict.elementRect.bottom));\n }\n else {\n this.restrictOffset.left = this.restrictOffset.top = this.restrictOffset.right = this.restrictOffset.bottom = 0;\n }\n },\n\n /*\\\n * Interaction.start\n [ method ]\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate number\n * of pointers must be held down – 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n - action (object) The action to be performed - drag, resize, etc.\n - interactable (Interactable) The Interactable to target\n - element (Element) The DOM Element to target\n = (object) interact\n **\n | interact(target)\n | .draggable({\n | // disable the default drag start by down->move\n | manualStart: true\n | })\n | // start dragging after the user holds the pointer down\n | .on('hold', function (event) {\n | var interaction = event.interaction;\n |\n | if (!interaction.interacting()) {\n | interaction.start({ name: 'drag' },\n | event.interactable,\n | event.currentTarget);\n | }\n | });\n \\*/\n start: function (action, interactable, element) {\n if (this.interacting()\n || !this.pointerIsDown\n || this.pointerIds.length < (action.name === 'gesture'? 2 : 1)) {\n return;\n }\n\n // if this interaction had been removed after stopping\n // add it back\n if (indexOf(interactions, this) === -1) {\n interactions.push(this);\n }\n\n // set the startCoords if there was no prepared action\n if (!this.prepared.name) {\n this.setEventXY(this.startCoords, this.pointers);\n }\n\n this.prepared.name = action.name;\n this.prepared.axis = action.axis;\n this.prepared.edges = action.edges;\n this.target = interactable;\n this.element = element;\n\n this.setStartOffsets(action.name, interactable, element);\n this.setModifications(this.startCoords.page);\n\n this.prevEvent = this[this.prepared.name + 'Start'](this.downEvent);\n },\n\n pointerMove: function (pointer, event, eventTarget, curEventTarget, preEnd) {\n if (this.inertiaStatus.active) {\n var pageUp = this.inertiaStatus.upCoords.page;\n var clientUp = this.inertiaStatus.upCoords.client;\n\n var inertiaPosition = {\n pageX : pageUp.x + this.inertiaStatus.sx,\n pageY : pageUp.y + this.inertiaStatus.sy,\n clientX: clientUp.x + this.inertiaStatus.sx,\n clientY: clientUp.y + this.inertiaStatus.sy\n };\n\n this.setEventXY(this.curCoords, [inertiaPosition]);\n }\n else {\n this.recordPointer(pointer);\n this.setEventXY(this.curCoords, this.pointers);\n }\n\n var duplicateMove = (this.curCoords.page.x === this.prevCoords.page.x\n && this.curCoords.page.y === this.prevCoords.page.y\n && this.curCoords.client.x === this.prevCoords.client.x\n && this.curCoords.client.y === this.prevCoords.client.y);\n\n var dx, dy,\n pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.curCoords.client.x - this.startCoords.client.x;\n dy = this.curCoords.client.y - this.startCoords.client.y;\n\n this.pointerWasMoved = hypot(dx, dy) > pointerMoveTolerance;\n }\n\n if (!duplicateMove && (!this.pointerIsDown || this.pointerWasMoved)) {\n if (this.pointerIsDown) {\n clearTimeout(this.holdTimers[pointerIndex]);\n }\n\n this.collectEventTargets(pointer, event, eventTarget, 'move');\n }\n\n if (!this.pointerIsDown) { return; }\n\n if (duplicateMove && this.pointerWasMoved && !preEnd) {\n this.checkAndPreventDefault(event, this.target, this.element);\n return;\n }\n\n // set pointer coordinate, time changes and speeds\n setEventDeltas(this.pointerDelta, this.prevCoords, this.curCoords);\n\n if (!this.prepared.name) { return; }\n\n if (this.pointerWasMoved\n // ignore movement while inertia is active\n && (!this.inertiaStatus.active || (pointer instanceof InteractEvent && /inertiastart/.test(pointer.type)))) {\n\n // if just starting an action, calculate the pointer speed now\n if (!this.interacting()) {\n setEventDeltas(this.pointerDelta, this.prevCoords, this.curCoords);\n\n // check if a drag is in the correct axis\n if (this.prepared.name === 'drag') {\n var absX = Math.abs(dx),\n absY = Math.abs(dy),\n targetAxis = this.target.options.drag.axis,\n axis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy');\n\n // if the movement isn't in the axis of the interactable\n if (axis !== 'xy' && targetAxis !== 'xy' && targetAxis !== axis) {\n // cancel the prepared action\n this.prepared.name = null;\n\n // then try to get a drag from another ineractable\n\n var element = eventTarget;\n\n // check element interactables\n while (isElement(element)) {\n var elementInteractable = interactables.get(element);\n\n if (elementInteractable\n && elementInteractable !== this.target\n && !elementInteractable.options.drag.manualStart\n && elementInteractable.getAction(this.downPointer, this.downEvent, this, element).name === 'drag'\n && checkAxis(axis, elementInteractable)) {\n\n this.prepared.name = 'drag';\n this.target = elementInteractable;\n this.element = element;\n break;\n }\n\n element = parentElement(element);\n }\n\n // if there's no drag from element interactables,\n // check the selector interactables\n if (!this.prepared.name) {\n var thisInteraction = this;\n\n var getDraggable = function (interactable, selector, context) {\n var elements = ie8MatchesSelector\n ? context.querySelectorAll(selector)\n : undefined;\n\n if (interactable === thisInteraction.target) { return; }\n\n if (inContext(interactable, eventTarget)\n && !interactable.options.drag.manualStart\n && !testIgnore(interactable, element, eventTarget)\n && testAllow(interactable, element, eventTarget)\n && matchesSelector(element, selector, elements)\n && interactable.getAction(thisInteraction.downPointer, thisInteraction.downEvent, thisInteraction, element).name === 'drag'\n && checkAxis(axis, interactable)\n && withinInteractionLimit(interactable, element, 'drag')) {\n\n return interactable;\n }\n };\n\n element = eventTarget;\n\n while (isElement(element)) {\n var selectorInteractable = interactables.forEachSelector(getDraggable);\n\n if (selectorInteractable) {\n this.prepared.name = 'drag';\n this.target = selectorInteractable;\n this.element = element;\n break;\n }\n\n element = parentElement(element);\n }\n }\n }\n }\n }\n\n var starting = !!this.prepared.name && !this.interacting();\n\n if (starting\n && (this.target.options[this.prepared.name].manualStart\n || !withinInteractionLimit(this.target, this.element, this.prepared))) {\n this.stop(event);\n return;\n }\n\n if (this.prepared.name && this.target) {\n if (starting) {\n this.start(this.prepared, this.target, this.element);\n }\n\n var shouldMove = this.setModifications(this.curCoords.page, preEnd);\n\n // move if snapping or restriction doesn't prevent it\n if (shouldMove || starting) {\n this.prevEvent = this[this.prepared.name + 'Move'](event);\n }\n\n this.checkAndPreventDefault(event, this.target, this.element);\n }\n }\n\n copyCoords(this.prevCoords, this.curCoords);\n\n if (this.dragging || this.resizing) {\n this.autoScrollMove(pointer);\n }\n },\n\n dragStart: function (event) {\n var dragEvent = new InteractEvent(this, event, 'drag', 'start', this.element);\n\n this.dragging = true;\n this.target.fire(dragEvent);\n\n // reset active dropzones\n this.activeDrops.dropzones = [];\n this.activeDrops.elements = [];\n this.activeDrops.rects = [];\n\n if (!this.dynamicDrop) {\n this.setActiveDrops(this.element);\n }\n\n var dropEvents = this.getDropEvents(event, dragEvent);\n\n if (dropEvents.activate) {\n this.fireActiveDrops(dropEvents.activate);\n }\n\n return dragEvent;\n },\n\n dragMove: function (event) {\n var target = this.target,\n dragEvent = new InteractEvent(this, event, 'drag', 'move', this.element),\n draggableElement = this.element,\n drop = this.getDrop(dragEvent, event, draggableElement);\n\n this.dropTarget = drop.dropzone;\n this.dropElement = drop.element;\n\n var dropEvents = this.getDropEvents(event, dragEvent);\n\n target.fire(dragEvent);\n\n if (dropEvents.leave) { this.prevDropTarget.fire(dropEvents.leave); }\n if (dropEvents.enter) { this.dropTarget.fire(dropEvents.enter); }\n if (dropEvents.move ) { this.dropTarget.fire(dropEvents.move ); }\n\n this.prevDropTarget = this.dropTarget;\n this.prevDropElement = this.dropElement;\n\n return dragEvent;\n },\n\n resizeStart: function (event) {\n var resizeEvent = new InteractEvent(this, event, 'resize', 'start', this.element);\n\n if (this.prepared.edges) {\n var startRect = this.target.getRect(this.element);\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (this.target.options.resize.square || this.target.options.resize.preserveAspectRatio) {\n var linkedEdges = extend({}, this.prepared.edges);\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom);\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right );\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top );\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left );\n\n this.prepared._linkedEdges = linkedEdges;\n }\n else {\n this.prepared._linkedEdges = null;\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (this.target.options.resize.preserveAspectRatio) {\n this.resizeStartAspectRatio = startRect.width / startRect.height;\n }\n\n this.resizeRects = {\n start : startRect,\n current : extend({}, startRect),\n restricted: extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0, right : 0, width : 0,\n top : 0, bottom: 0, height: 0\n }\n };\n\n resizeEvent.rect = this.resizeRects.restricted;\n resizeEvent.deltaRect = this.resizeRects.delta;\n }\n\n this.target.fire(resizeEvent);\n\n this.resizing = true;\n\n return resizeEvent;\n },\n\n resizeMove: function (event) {\n var resizeEvent = new InteractEvent(this, event, 'resize', 'move', this.element);\n\n var edges = this.prepared.edges,\n invert = this.target.options.resize.invert,\n invertible = invert === 'reposition' || invert === 'negate';\n\n if (edges) {\n var dx = resizeEvent.dx,\n dy = resizeEvent.dy,\n\n start = this.resizeRects.start,\n current = this.resizeRects.current,\n restricted = this.resizeRects.restricted,\n delta = this.resizeRects.delta,\n previous = extend(this.resizeRects.previous, restricted),\n\n originalEdges = edges;\n\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n if (this.target.options.resize.preserveAspectRatio) {\n var resizeStartAspectRatio = this.resizeStartAspectRatio;\n\n edges = this.prepared._linkedEdges;\n\n if ((originalEdges.left && originalEdges.bottom)\n || (originalEdges.right && originalEdges.top)) {\n dy = -dx / resizeStartAspectRatio;\n }\n else if (originalEdges.left || originalEdges.right) { dy = dx / resizeStartAspectRatio; }\n else if (originalEdges.top || originalEdges.bottom) { dx = dy * resizeStartAspectRatio; }\n }\n else if (this.target.options.resize.square) {\n edges = this.prepared._linkedEdges;\n\n if ((originalEdges.left && originalEdges.bottom)\n || (originalEdges.right && originalEdges.top)) {\n dy = -dx;\n }\n else if (originalEdges.left || originalEdges.right) { dy = dx; }\n else if (originalEdges.top || originalEdges.bottom) { dx = dy; }\n }\n\n // update the 'current' rect without modifications\n if (edges.top ) { current.top += dy; }\n if (edges.bottom) { current.bottom += dy; }\n if (edges.left ) { current.left += dx; }\n if (edges.right ) { current.right += dx; }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(restricted, current);\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n var swap;\n\n if (restricted.top > restricted.bottom) {\n swap = restricted.top;\n\n restricted.top = restricted.bottom;\n restricted.bottom = swap;\n }\n if (restricted.left > restricted.right) {\n swap = restricted.left;\n\n restricted.left = restricted.right;\n restricted.right = swap;\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n restricted.top = Math.min(current.top, start.bottom);\n restricted.bottom = Math.max(current.bottom, start.top);\n restricted.left = Math.min(current.left, start.right);\n restricted.right = Math.max(current.right, start.left);\n }\n\n restricted.width = restricted.right - restricted.left;\n restricted.height = restricted.bottom - restricted.top ;\n\n for (var edge in restricted) {\n delta[edge] = restricted[edge] - previous[edge];\n }\n\n resizeEvent.edges = this.prepared.edges;\n resizeEvent.rect = restricted;\n resizeEvent.deltaRect = delta;\n }\n\n this.target.fire(resizeEvent);\n\n return resizeEvent;\n },\n\n gestureStart: function (event) {\n var gestureEvent = new InteractEvent(this, event, 'gesture', 'start', this.element);\n\n gestureEvent.ds = 0;\n\n this.gesture.startDistance = this.gesture.prevDistance = gestureEvent.distance;\n this.gesture.startAngle = this.gesture.prevAngle = gestureEvent.angle;\n this.gesture.scale = 1;\n\n this.gesturing = true;\n\n this.target.fire(gestureEvent);\n\n return gestureEvent;\n },\n\n gestureMove: function (event) {\n if (!this.pointerIds.length) {\n return this.prevEvent;\n }\n\n var gestureEvent;\n\n gestureEvent = new InteractEvent(this, event, 'gesture', 'move', this.element);\n gestureEvent.ds = gestureEvent.scale - this.gesture.scale;\n\n this.target.fire(gestureEvent);\n\n this.gesture.prevAngle = gestureEvent.angle;\n this.gesture.prevDistance = gestureEvent.distance;\n\n if (gestureEvent.scale !== Infinity &&\n gestureEvent.scale !== null &&\n gestureEvent.scale !== undefined &&\n !isNaN(gestureEvent.scale)) {\n\n this.gesture.scale = gestureEvent.scale;\n }\n\n return gestureEvent;\n },\n\n pointerHold: function (pointer, event, eventTarget) {\n this.collectEventTargets(pointer, event, eventTarget, 'hold');\n },\n\n pointerUp: function (pointer, event, eventTarget, curEventTarget) {\n var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));\n\n clearTimeout(this.holdTimers[pointerIndex]);\n\n this.collectEventTargets(pointer, event, eventTarget, 'up' );\n this.collectEventTargets(pointer, event, eventTarget, 'tap');\n\n this.pointerEnd(pointer, event, eventTarget, curEventTarget);\n\n this.removePointer(pointer);\n },\n\n pointerCancel: function (pointer, event, eventTarget, curEventTarget) {\n var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));\n\n clearTimeout(this.holdTimers[pointerIndex]);\n\n this.collectEventTargets(pointer, event, eventTarget, 'cancel');\n this.pointerEnd(pointer, event, eventTarget, curEventTarget);\n\n this.removePointer(pointer);\n },\n\n // http://www.quirksmode.org/dom/events/click.html\n // >Events leading to dblclick\n //\n // IE8 doesn't fire down event before dblclick.\n // This workaround tries to fire a tap and doubletap after dblclick\n ie8Dblclick: function (pointer, event, eventTarget) {\n if (this.prevTap\n && event.clientX === this.prevTap.clientX\n && event.clientY === this.prevTap.clientY\n && eventTarget === this.prevTap.target) {\n\n this.downTargets[0] = eventTarget;\n this.downTimes[0] = new Date().getTime();\n this.collectEventTargets(pointer, event, eventTarget, 'tap');\n }\n },\n\n // End interact move events and stop auto-scroll unless inertia is enabled\n pointerEnd: function (pointer, event, eventTarget, curEventTarget) {\n var endEvent,\n target = this.target,\n options = target && target.options,\n inertiaOptions = options && this.prepared.name && options[this.prepared.name].inertia,\n inertiaStatus = this.inertiaStatus;\n\n if (this.interacting()) {\n\n if (inertiaStatus.active && !inertiaStatus.ending) { return; }\n\n var pointerSpeed,\n now = new Date().getTime(),\n inertiaPossible = false,\n inertia = false,\n smoothEnd = false,\n endSnap = checkSnap(target, this.prepared.name) && options[this.prepared.name].snap.endOnly,\n endRestrict = checkRestrict(target, this.prepared.name) && options[this.prepared.name].restrict.endOnly,\n dx = 0,\n dy = 0,\n startEvent;\n\n if (this.dragging) {\n if (options.drag.axis === 'x' ) { pointerSpeed = Math.abs(this.pointerDelta.client.vx); }\n else if (options.drag.axis === 'y' ) { pointerSpeed = Math.abs(this.pointerDelta.client.vy); }\n else /*options.drag.axis === 'xy'*/{ pointerSpeed = this.pointerDelta.client.speed; }\n }\n else {\n pointerSpeed = this.pointerDelta.client.speed;\n }\n\n // check if inertia should be started\n inertiaPossible = (inertiaOptions && inertiaOptions.enabled\n && this.prepared.name !== 'gesture'\n && event !== inertiaStatus.startEvent);\n\n inertia = (inertiaPossible\n && (now - this.curCoords.timeStamp) < 50\n && pointerSpeed > inertiaOptions.minSpeed\n && pointerSpeed > inertiaOptions.endSpeed);\n\n if (inertiaPossible && !inertia && (endSnap || endRestrict)) {\n\n var snapRestrict = {};\n\n snapRestrict.snap = snapRestrict.restrict = snapRestrict;\n\n if (endSnap) {\n this.setSnapping(this.curCoords.page, snapRestrict);\n if (snapRestrict.locked) {\n dx += snapRestrict.dx;\n dy += snapRestrict.dy;\n }\n }\n\n if (endRestrict) {\n this.setRestriction(this.curCoords.page, snapRestrict);\n if (snapRestrict.restricted) {\n dx += snapRestrict.dx;\n dy += snapRestrict.dy;\n }\n }\n\n if (dx || dy) {\n smoothEnd = true;\n }\n }\n\n if (inertia || smoothEnd) {\n copyCoords(inertiaStatus.upCoords, this.curCoords);\n\n this.pointers[0] = inertiaStatus.startEvent = startEvent =\n new InteractEvent(this, event, this.prepared.name, 'inertiastart', this.element);\n\n inertiaStatus.t0 = now;\n\n target.fire(inertiaStatus.startEvent);\n\n if (inertia) {\n inertiaStatus.vx0 = this.pointerDelta.client.vx;\n inertiaStatus.vy0 = this.pointerDelta.client.vy;\n inertiaStatus.v0 = pointerSpeed;\n\n this.calcInertia(inertiaStatus);\n\n var page = extend({}, this.curCoords.page),\n origin = getOriginXY(target, this.element),\n statusObject;\n\n page.x = page.x + inertiaStatus.xe - origin.x;\n page.y = page.y + inertiaStatus.ye - origin.y;\n\n statusObject = {\n useStatusXY: true,\n x: page.x,\n y: page.y,\n dx: 0,\n dy: 0,\n snap: null\n };\n\n statusObject.snap = statusObject;\n\n dx = dy = 0;\n\n if (endSnap) {\n var snap = this.setSnapping(this.curCoords.page, statusObject);\n\n if (snap.locked) {\n dx += snap.dx;\n dy += snap.dy;\n }\n }\n\n if (endRestrict) {\n var restrict = this.setRestriction(this.curCoords.page, statusObject);\n\n if (restrict.restricted) {\n dx += restrict.dx;\n dy += restrict.dy;\n }\n }\n\n inertiaStatus.modifiedXe += dx;\n inertiaStatus.modifiedYe += dy;\n\n inertiaStatus.i = reqFrame(this.boundInertiaFrame);\n }\n else {\n inertiaStatus.smoothEnd = true;\n inertiaStatus.xe = dx;\n inertiaStatus.ye = dy;\n\n inertiaStatus.sx = inertiaStatus.sy = 0;\n\n inertiaStatus.i = reqFrame(this.boundSmoothEndFrame);\n }\n\n inertiaStatus.active = true;\n return;\n }\n\n if (endSnap || endRestrict) {\n // fire a move event at the snapped coordinates\n this.pointerMove(pointer, event, eventTarget, curEventTarget, true);\n }\n }\n\n if (this.dragging) {\n endEvent = new InteractEvent(this, event, 'drag', 'end', this.element);\n\n var draggableElement = this.element,\n drop = this.getDrop(endEvent, event, draggableElement);\n\n this.dropTarget = drop.dropzone;\n this.dropElement = drop.element;\n\n var dropEvents = this.getDropEvents(event, endEvent);\n\n if (dropEvents.leave) { this.prevDropTarget.fire(dropEvents.leave); }\n if (dropEvents.enter) { this.dropTarget.fire(dropEvents.enter); }\n if (dropEvents.drop ) { this.dropTarget.fire(dropEvents.drop ); }\n if (dropEvents.deactivate) {\n this.fireActiveDrops(dropEvents.deactivate);\n }\n\n target.fire(endEvent);\n }\n else if (this.resizing) {\n endEvent = new InteractEvent(this, event, 'resize', 'end', this.element);\n target.fire(endEvent);\n }\n else if (this.gesturing) {\n endEvent = new InteractEvent(this, event, 'gesture', 'end', this.element);\n target.fire(endEvent);\n }\n\n this.stop(event);\n },\n\n collectDrops: function (element) {\n var drops = [],\n elements = [],\n i;\n\n element = element || this.element;\n\n // collect all dropzones and their elements which qualify for a drop\n for (i = 0; i < interactables.length; i++) {\n if (!interactables[i].options.drop.enabled) { continue; }\n\n var current = interactables[i],\n accept = current.options.drop.accept;\n\n // test the draggable element against the dropzone's accept setting\n if ((isElement(accept) && accept !== element)\n || (isString(accept)\n && !matchesSelector(element, accept))) {\n\n continue;\n }\n\n // query for new elements if necessary\n var dropElements = current.selector? current._context.querySelectorAll(current.selector) : [current._element];\n\n for (var j = 0, len = dropElements.length; j < len; j++) {\n var currentElement = dropElements[j];\n\n if (currentElement === element) {\n continue;\n }\n\n drops.push(current);\n elements.push(currentElement);\n }\n }\n\n return {\n dropzones: drops,\n elements: elements\n };\n },\n\n fireActiveDrops: function (event) {\n var i,\n current,\n currentElement,\n prevElement;\n\n // loop through all active dropzones and trigger event\n for (i = 0; i < this.activeDrops.dropzones.length; i++) {\n current = this.activeDrops.dropzones[i];\n currentElement = this.activeDrops.elements [i];\n\n // prevent trigger of duplicate events on same element\n if (currentElement !== prevElement) {\n // set current element as event target\n event.target = currentElement;\n current.fire(event);\n }\n prevElement = currentElement;\n }\n },\n\n // Collect a new set of possible drops and save them in activeDrops.\n // setActiveDrops should always be called when a drag has just started or a\n // drag event happens while dynamicDrop is true\n setActiveDrops: function (dragElement) {\n // get dropzones and their elements that could receive the draggable\n var possibleDrops = this.collectDrops(dragElement, true);\n\n this.activeDrops.dropzones = possibleDrops.dropzones;\n this.activeDrops.elements = possibleDrops.elements;\n this.activeDrops.rects = [];\n\n for (var i = 0; i < this.activeDrops.dropzones.length; i++) {\n this.activeDrops.rects[i] = this.activeDrops.dropzones[i].getRect(this.activeDrops.elements[i]);\n }\n },\n\n getDrop: function (dragEvent, event, dragElement) {\n var validDrops = [];\n\n if (dynamicDrop) {\n this.setActiveDrops(dragElement);\n }\n\n // collect all dropzones and their elements which qualify for a drop\n for (var j = 0; j < this.activeDrops.dropzones.length; j++) {\n var current = this.activeDrops.dropzones[j],\n currentElement = this.activeDrops.elements [j],\n rect = this.activeDrops.rects [j];\n\n validDrops.push(current.dropCheck(dragEvent, event, this.target, dragElement, currentElement, rect)\n ? currentElement\n : null);\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n var dropIndex = indexOfDeepestElement(validDrops),\n dropzone = this.activeDrops.dropzones[dropIndex] || null,\n element = this.activeDrops.elements [dropIndex] || null;\n\n return {\n dropzone: dropzone,\n element: element\n };\n },\n\n getDropEvents: function (pointerEvent, dragEvent) {\n var dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null\n };\n\n if (this.dropElement !== this.prevDropElement) {\n // if there was a prevDropTarget, create a dragleave event\n if (this.prevDropTarget) {\n dropEvents.leave = {\n target : this.prevDropElement,\n dropzone : this.prevDropTarget,\n relatedTarget: dragEvent.target,\n draggable : dragEvent.interactable,\n dragEvent : dragEvent,\n interaction : this,\n timeStamp : dragEvent.timeStamp,\n type : 'dragleave'\n };\n\n dragEvent.dragLeave = this.prevDropElement;\n dragEvent.prevDropzone = this.prevDropTarget;\n }\n // if the dropTarget is not null, create a dragenter event\n if (this.dropTarget) {\n dropEvents.enter = {\n target : this.dropElement,\n dropzone : this.dropTarget,\n relatedTarget: dragEvent.target,\n draggable : dragEvent.interactable,\n dragEvent : dragEvent,\n interaction : this,\n timeStamp : dragEvent.timeStamp,\n type : 'dragenter'\n };\n\n dragEvent.dragEnter = this.dropElement;\n dragEvent.dropzone = this.dropTarget;\n }\n }\n\n if (dragEvent.type === 'dragend' && this.dropTarget) {\n dropEvents.drop = {\n target : this.dropElement,\n dropzone : this.dropTarget,\n relatedTarget: dragEvent.target,\n draggable : dragEvent.interactable,\n dragEvent : dragEvent,\n interaction : this,\n timeStamp : dragEvent.timeStamp,\n type : 'drop'\n };\n\n dragEvent.dropzone = this.dropTarget;\n }\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = {\n target : null,\n dropzone : null,\n relatedTarget: dragEvent.target,\n draggable : dragEvent.interactable,\n dragEvent : dragEvent,\n interaction : this,\n timeStamp : dragEvent.timeStamp,\n type : 'dropactivate'\n };\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = {\n target : null,\n dropzone : null,\n relatedTarget: dragEvent.target,\n draggable : dragEvent.interactable,\n dragEvent : dragEvent,\n interaction : this,\n timeStamp : dragEvent.timeStamp,\n type : 'dropdeactivate'\n };\n }\n if (dragEvent.type === 'dragmove' && this.dropTarget) {\n dropEvents.move = {\n target : this.dropElement,\n dropzone : this.dropTarget,\n relatedTarget: dragEvent.target,\n draggable : dragEvent.interactable,\n dragEvent : dragEvent,\n interaction : this,\n dragmove : dragEvent,\n timeStamp : dragEvent.timeStamp,\n type : 'dropmove'\n };\n dragEvent.dropzone = this.dropTarget;\n }\n\n return dropEvents;\n },\n\n currentAction: function () {\n return (this.dragging && 'drag') || (this.resizing && 'resize') || (this.gesturing && 'gesture') || null;\n },\n\n interacting: function () {\n return this.dragging || this.resizing || this.gesturing;\n },\n\n clearTargets: function () {\n this.target = this.element = null;\n\n this.dropTarget = this.dropElement = this.prevDropTarget = this.prevDropElement = null;\n },\n\n stop: function (event) {\n if (this.interacting()) {\n autoScroll.stop();\n this.matches = [];\n this.matchElements = [];\n\n var target = this.target;\n\n if (target.options.styleCursor) {\n target._doc.documentElement.style.cursor = '';\n }\n\n // prevent Default only if were previously interacting\n if (event && isFunction(event.preventDefault)) {\n this.checkAndPreventDefault(event, target, this.element);\n }\n\n if (this.dragging) {\n this.activeDrops.dropzones = this.activeDrops.elements = this.activeDrops.rects = null;\n }\n }\n\n this.clearTargets();\n\n this.pointerIsDown = this.snapStatus.locked = this.dragging = this.resizing = this.gesturing = false;\n this.prepared.name = this.prevEvent = null;\n this.inertiaStatus.resumeDx = this.inertiaStatus.resumeDy = 0;\n\n // remove pointers if their ID isn't in this.pointerIds\n for (var i = 0; i < this.pointers.length; i++) {\n if (indexOf(this.pointerIds, getPointerId(this.pointers[i])) === -1) {\n this.pointers.splice(i, 1);\n }\n }\n },\n\n inertiaFrame: function () {\n var inertiaStatus = this.inertiaStatus,\n options = this.target.options[this.prepared.name].inertia,\n lambda = options.resistance,\n t = new Date().getTime() / 1000 - inertiaStatus.t0;\n\n if (t < inertiaStatus.te) {\n\n var progress = 1 - (Math.exp(-lambda * t) - inertiaStatus.lambda_v0) / inertiaStatus.one_ve_v0;\n\n if (inertiaStatus.modifiedXe === inertiaStatus.xe && inertiaStatus.modifiedYe === inertiaStatus.ye) {\n inertiaStatus.sx = inertiaStatus.xe * progress;\n inertiaStatus.sy = inertiaStatus.ye * progress;\n }\n else {\n var quadPoint = getQuadraticCurvePoint(\n 0, 0,\n inertiaStatus.xe, inertiaStatus.ye,\n inertiaStatus.modifiedXe, inertiaStatus.modifiedYe,\n progress);\n\n inertiaStatus.sx = quadPoint.x;\n inertiaStatus.sy = quadPoint.y;\n }\n\n this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);\n\n inertiaStatus.i = reqFrame(this.boundInertiaFrame);\n }\n else {\n inertiaStatus.ending = true;\n\n inertiaStatus.sx = inertiaStatus.modifiedXe;\n inertiaStatus.sy = inertiaStatus.modifiedYe;\n\n this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);\n this.pointerEnd(inertiaStatus.startEvent, inertiaStatus.startEvent);\n\n inertiaStatus.active = inertiaStatus.ending = false;\n }\n },\n\n smoothEndFrame: function () {\n var inertiaStatus = this.inertiaStatus,\n t = new Date().getTime() - inertiaStatus.t0,\n duration = this.target.options[this.prepared.name].inertia.smoothEndDuration;\n\n if (t < duration) {\n inertiaStatus.sx = easeOutQuad(t, 0, inertiaStatus.xe, duration);\n inertiaStatus.sy = easeOutQuad(t, 0, inertiaStatus.ye, duration);\n\n this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);\n\n inertiaStatus.i = reqFrame(this.boundSmoothEndFrame);\n }\n else {\n inertiaStatus.ending = true;\n\n inertiaStatus.sx = inertiaStatus.xe;\n inertiaStatus.sy = inertiaStatus.ye;\n\n this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);\n this.pointerEnd(inertiaStatus.startEvent, inertiaStatus.startEvent);\n\n inertiaStatus.smoothEnd =\n inertiaStatus.active = inertiaStatus.ending = false;\n }\n },\n\n addPointer: function (pointer) {\n var id = getPointerId(pointer),\n index = this.mouse? 0 : indexOf(this.pointerIds, id);\n\n if (index === -1) {\n index = this.pointerIds.length;\n }\n\n this.pointerIds[index] = id;\n this.pointers[index] = pointer;\n\n return index;\n },\n\n removePointer: function (pointer) {\n var id = getPointerId(pointer),\n index = this.mouse? 0 : indexOf(this.pointerIds, id);\n\n if (index === -1) { return; }\n\n this.pointers .splice(index, 1);\n this.pointerIds .splice(index, 1);\n this.downTargets.splice(index, 1);\n this.downTimes .splice(index, 1);\n this.holdTimers .splice(index, 1);\n },\n\n recordPointer: function (pointer) {\n var index = this.mouse? 0: indexOf(this.pointerIds, getPointerId(pointer));\n\n if (index === -1) { return; }\n\n this.pointers[index] = pointer;\n },\n\n collectEventTargets: function (pointer, event, eventTarget, eventType) {\n var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (eventType === 'tap' && (this.pointerWasMoved\n // or if the pointerup target is different to the pointerdown target\n || !(this.downTargets[pointerIndex] && this.downTargets[pointerIndex] === eventTarget))) {\n return;\n }\n\n var targets = [],\n elements = [],\n element = eventTarget;\n\n function collectSelectors (interactable, selector, context) {\n var els = ie8MatchesSelector\n ? context.querySelectorAll(selector)\n : undefined;\n\n if (interactable._iEvents[eventType]\n && isElement(element)\n && inContext(interactable, element)\n && !testIgnore(interactable, element, eventTarget)\n && testAllow(interactable, element, eventTarget)\n && matchesSelector(element, selector, els)) {\n\n targets.push(interactable);\n elements.push(element);\n }\n }\n\n while (element) {\n if (interact.isSet(element) && interact(element)._iEvents[eventType]) {\n targets.push(interact(element));\n elements.push(element);\n }\n\n interactables.forEachSelector(collectSelectors);\n\n element = parentElement(element);\n }\n\n // create the tap event even if there are no listeners so that\n // doubletap can still be created and fired\n if (targets.length || eventType === 'tap') {\n this.firePointers(pointer, event, eventTarget, targets, elements, eventType);\n }\n },\n\n firePointers: function (pointer, event, eventTarget, targets, elements, eventType) {\n var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer)),\n pointerEvent = {},\n i,\n // for tap events\n interval, createNewDoubleTap;\n\n // if it's a doubletap then the event properties would have been\n // copied from the tap event and provided as the pointer argument\n if (eventType === 'doubletap') {\n pointerEvent = pointer;\n }\n else {\n pointerExtend(pointerEvent, event);\n if (event !== pointer) {\n pointerExtend(pointerEvent, pointer);\n }\n\n pointerEvent.preventDefault = preventOriginalDefault;\n pointerEvent.stopPropagation = InteractEvent.prototype.stopPropagation;\n pointerEvent.stopImmediatePropagation = InteractEvent.prototype.stopImmediatePropagation;\n pointerEvent.interaction = this;\n\n pointerEvent.timeStamp = new Date().getTime();\n pointerEvent.originalEvent = event;\n pointerEvent.originalPointer = pointer;\n pointerEvent.type = eventType;\n pointerEvent.pointerId = getPointerId(pointer);\n pointerEvent.pointerType = this.mouse? 'mouse' : !supportsPointerEvent? 'touch'\n : isString(pointer.pointerType)\n ? pointer.pointerType\n : [,,'touch', 'pen', 'mouse'][pointer.pointerType];\n }\n\n if (eventType === 'tap') {\n pointerEvent.dt = pointerEvent.timeStamp - this.downTimes[pointerIndex];\n\n interval = pointerEvent.timeStamp - this.tapTime;\n createNewDoubleTap = !!(this.prevTap && this.prevTap.type !== 'doubletap'\n && this.prevTap.target === pointerEvent.target\n && interval < 500);\n\n pointerEvent.double = createNewDoubleTap;\n\n this.tapTime = pointerEvent.timeStamp;\n }\n\n for (i = 0; i < targets.length; i++) {\n pointerEvent.currentTarget = elements[i];\n pointerEvent.interactable = targets[i];\n targets[i].fire(pointerEvent);\n\n if (pointerEvent.immediatePropagationStopped\n ||(pointerEvent.propagationStopped && elements[i + 1] !== pointerEvent.currentTarget)) {\n break;\n }\n }\n\n if (createNewDoubleTap) {\n var doubleTap = {};\n\n extend(doubleTap, pointerEvent);\n\n doubleTap.dt = interval;\n doubleTap.type = 'doubletap';\n\n this.collectEventTargets(doubleTap, event, eventTarget, 'doubletap');\n\n this.prevTap = doubleTap;\n }\n else if (eventType === 'tap') {\n this.prevTap = pointerEvent;\n }\n },\n\n validateSelector: function (pointer, event, matches, matchElements) {\n for (var i = 0, len = matches.length; i < len; i++) {\n var match = matches[i],\n matchElement = matchElements[i],\n action = validateAction(match.getAction(pointer, event, this, matchElement), match);\n\n if (action && withinInteractionLimit(match, matchElement, action)) {\n this.target = match;\n this.element = matchElement;\n\n return action;\n }\n }\n },\n\n setSnapping: function (pageCoords, status) {\n var snap = this.target.options[this.prepared.name].snap,\n targets = [],\n target,\n page,\n i;\n\n status = status || this.snapStatus;\n\n if (status.useStatusXY) {\n page = { x: status.x, y: status.y };\n }\n else {\n var origin = getOriginXY(this.target, this.element);\n\n page = extend({}, pageCoords);\n\n page.x -= origin.x;\n page.y -= origin.y;\n }\n\n status.realX = page.x;\n status.realY = page.y;\n\n page.x = page.x - this.inertiaStatus.resumeDx;\n page.y = page.y - this.inertiaStatus.resumeDy;\n\n var len = snap.targets? snap.targets.length : 0;\n\n for (var relIndex = 0; relIndex < this.snapOffsets.length; relIndex++) {\n var relative = {\n x: page.x - this.snapOffsets[relIndex].x,\n y: page.y - this.snapOffsets[relIndex].y\n };\n\n for (i = 0; i < len; i++) {\n if (isFunction(snap.targets[i])) {\n target = snap.targets[i](relative.x, relative.y, this);\n }\n else {\n target = snap.targets[i];\n }\n\n if (!target) { continue; }\n\n targets.push({\n x: isNumber(target.x) ? (target.x + this.snapOffsets[relIndex].x) : relative.x,\n y: isNumber(target.y) ? (target.y + this.snapOffsets[relIndex].y) : relative.y,\n\n range: isNumber(target.range)? target.range: snap.range\n });\n }\n }\n\n var closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0\n };\n\n for (i = 0, len = targets.length; i < len; i++) {\n target = targets[i];\n\n var range = target.range,\n dx = target.x - page.x,\n dy = target.y - page.y,\n distance = hypot(dx, dy),\n inRange = distance <= range;\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false;\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity)\n // OR this target is closer that the previous closest\n || distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n\n if (range === Infinity) {\n inRange = true;\n }\n\n closest.target = target;\n closest.distance = distance;\n closest.range = range;\n closest.inRange = inRange;\n closest.dx = dx;\n closest.dy = dy;\n\n status.range = range;\n }\n }\n\n var snapChanged;\n\n if (closest.target) {\n snapChanged = (status.snappedX !== closest.target.x || status.snappedY !== closest.target.y);\n\n status.snappedX = closest.target.x;\n status.snappedY = closest.target.y;\n }\n else {\n snapChanged = true;\n\n status.snappedX = NaN;\n status.snappedY = NaN;\n }\n\n status.dx = closest.dx;\n status.dy = closest.dy;\n\n status.changed = (snapChanged || (closest.inRange && !status.locked));\n status.locked = closest.inRange;\n\n return status;\n },\n\n setRestriction: function (pageCoords, status) {\n var target = this.target,\n restrict = target && target.options[this.prepared.name].restrict,\n restriction = restrict && restrict.restriction,\n page;\n\n if (!restriction) {\n return status;\n }\n\n status = status || this.restrictStatus;\n\n page = status.useStatusXY\n ? page = { x: status.x, y: status.y }\n : page = extend({}, pageCoords);\n\n if (status.snap && status.snap.locked) {\n page.x += status.snap.dx || 0;\n page.y += status.snap.dy || 0;\n }\n\n page.x -= this.inertiaStatus.resumeDx;\n page.y -= this.inertiaStatus.resumeDy;\n\n status.dx = 0;\n status.dy = 0;\n status.restricted = false;\n\n var rect, restrictedX, restrictedY;\n\n if (isString(restriction)) {\n if (restriction === 'parent') {\n restriction = parentElement(this.element);\n }\n else if (restriction === 'self') {\n restriction = target.getRect(this.element);\n }\n else {\n restriction = closest(this.element, restriction);\n }\n\n if (!restriction) { return status; }\n }\n\n if (isFunction(restriction)) {\n restriction = restriction(page.x, page.y, this.element);\n }\n\n if (isElement(restriction)) {\n restriction = getElementRect(restriction);\n }\n\n rect = restriction;\n\n if (!restriction) {\n restrictedX = page.x;\n restrictedY = page.y;\n }\n // object is assumed to have\n // x, y, width, height or\n // left, top, right, bottom\n else if ('x' in restriction && 'y' in restriction) {\n restrictedX = Math.max(Math.min(rect.x + rect.width - this.restrictOffset.right , page.x), rect.x + this.restrictOffset.left);\n restrictedY = Math.max(Math.min(rect.y + rect.height - this.restrictOffset.bottom, page.y), rect.y + this.restrictOffset.top );\n }\n else {\n restrictedX = Math.max(Math.min(rect.right - this.restrictOffset.right , page.x), rect.left + this.restrictOffset.left);\n restrictedY = Math.max(Math.min(rect.bottom - this.restrictOffset.bottom, page.y), rect.top + this.restrictOffset.top );\n }\n\n status.dx = restrictedX - page.x;\n status.dy = restrictedY - page.y;\n\n status.changed = status.restrictedX !== restrictedX || status.restrictedY !== restrictedY;\n status.restricted = !!(status.dx || status.dy);\n\n status.restrictedX = restrictedX;\n status.restrictedY = restrictedY;\n\n return status;\n },\n\n checkAndPreventDefault: function (event, interactable, element) {\n if (!(interactable = interactable || this.target)) { return; }\n\n var options = interactable.options,\n prevent = options.preventDefault;\n\n if (prevent === 'auto' && element && !/^(input|select|textarea)$/i.test(event.target.nodeName)) {\n // do not preventDefault on pointerdown if the prepared action is a drag\n // and dragging can only start from a certain direction - this allows\n // a touch to pan the viewport if a drag isn't in the right direction\n if (/down|start/i.test(event.type)\n && this.prepared.name === 'drag' && options.drag.axis !== 'xy') {\n\n return;\n }\n\n // with manualStart, only preventDefault while interacting\n if (options[this.prepared.name] && options[this.prepared.name].manualStart\n && !this.interacting()) {\n return;\n }\n\n event.preventDefault();\n return;\n }\n\n if (prevent === 'always') {\n event.preventDefault();\n return;\n }\n },\n\n calcInertia: function (status) {\n var inertiaOptions = this.target.options[this.prepared.name].inertia,\n lambda = inertiaOptions.resistance,\n inertiaDur = -Math.log(inertiaOptions.endSpeed / status.v0) / lambda;\n\n status.x0 = this.prevEvent.pageX;\n status.y0 = this.prevEvent.pageY;\n status.t0 = status.startEvent.timeStamp / 1000;\n status.sx = status.sy = 0;\n\n status.modifiedXe = status.xe = (status.vx0 - inertiaDur) / lambda;\n status.modifiedYe = status.ye = (status.vy0 - inertiaDur) / lambda;\n status.te = inertiaDur;\n\n status.lambda_v0 = lambda / status.v0;\n status.one_ve_v0 = 1 - inertiaOptions.endSpeed / status.v0;\n },\n\n autoScrollMove: function (pointer) {\n if (!(this.interacting()\n && checkAutoScroll(this.target, this.prepared.name))) {\n return;\n }\n\n if (this.inertiaStatus.active) {\n autoScroll.x = autoScroll.y = 0;\n return;\n }\n\n var top,\n right,\n bottom,\n left,\n options = this.target.options[this.prepared.name].autoScroll,\n container = options.container || getWindow(this.element);\n\n if (isWindow(container)) {\n left = pointer.clientX < autoScroll.margin;\n top = pointer.clientY < autoScroll.margin;\n right = pointer.clientX > container.innerWidth - autoScroll.margin;\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin;\n }\n else {\n var rect = getElementClientRect(container);\n\n left = pointer.clientX < rect.left + autoScroll.margin;\n top = pointer.clientY < rect.top + autoScroll.margin;\n right = pointer.clientX > rect.right - autoScroll.margin;\n bottom = pointer.clientY > rect.bottom - autoScroll.margin;\n }\n\n autoScroll.x = (right ? 1: left? -1: 0);\n autoScroll.y = (bottom? 1: top? -1: 0);\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin;\n autoScroll.speed = options.speed;\n\n autoScroll.start(this);\n }\n },\n\n _updateEventTargets: function (target, currentTarget) {\n this._eventTarget = target;\n this._curEventTarget = currentTarget;\n }\n\n };\n\n function getInteractionFromPointer (pointer, eventType, eventTarget) {\n var i = 0, len = interactions.length,\n mouseEvent = (/mouse/i.test(pointer.pointerType || eventType)\n // MSPointerEvent.MSPOINTER_TYPE_MOUSE\n || pointer.pointerType === 4),\n interaction;\n\n var id = getPointerId(pointer);\n\n // try to resume inertia with a new pointer\n if (/down|start/i.test(eventType)) {\n for (i = 0; i < len; i++) {\n interaction = interactions[i];\n\n var element = eventTarget;\n\n if (interaction.inertiaStatus.active && interaction.target.options[interaction.prepared.name].inertia.allowResume\n && (interaction.mouse === mouseEvent)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction;\n }\n element = parentElement(element);\n }\n }\n }\n }\n\n // if it's a mouse interaction\n if (mouseEvent || !(supportsTouch || supportsPointerEvent)) {\n\n // find a mouse interaction that's not in inertia phase\n for (i = 0; i < len; i++) {\n if (interactions[i].mouse && !interactions[i].inertiaStatus.active) {\n return interactions[i];\n }\n }\n\n // find any interaction specifically for mouse.\n // if the eventType is a mousedown, and inertia is active\n // ignore the interaction\n for (i = 0; i < len; i++) {\n if (interactions[i].mouse && !(/down/.test(eventType) && interactions[i].inertiaStatus.active)) {\n return interaction;\n }\n }\n\n // create a new interaction for mouse\n interaction = new Interaction();\n interaction.mouse = true;\n\n return interaction;\n }\n\n // get interaction that has this pointer\n for (i = 0; i < len; i++) {\n if (contains(interactions[i].pointerIds, id)) {\n return interactions[i];\n }\n }\n\n // at this stage, a pointerUp should not return an interaction\n if (/up|end|out/i.test(eventType)) {\n return null;\n }\n\n // get first idle interaction\n for (i = 0; i < len; i++) {\n interaction = interactions[i];\n\n if ((!interaction.prepared.name || (interaction.target.options.gesture.enabled))\n && !interaction.interacting()\n && !(!mouseEvent && interaction.mouse)) {\n\n return interaction;\n }\n }\n\n return new Interaction();\n }\n\n function doOnInteractions (method) {\n return (function (event) {\n var interaction,\n eventTarget = getActualElement(event.path\n ? event.path[0]\n : event.target),\n curEventTarget = getActualElement(event.currentTarget),\n i;\n\n if (supportsTouch && /touch/.test(event.type)) {\n prevTouchTime = new Date().getTime();\n\n for (i = 0; i < event.changedTouches.length; i++) {\n var pointer = event.changedTouches[i];\n\n interaction = getInteractionFromPointer(pointer, event.type, eventTarget);\n\n if (!interaction) { continue; }\n\n interaction._updateEventTargets(eventTarget, curEventTarget);\n\n interaction[method](pointer, event, eventTarget, curEventTarget);\n }\n }\n else {\n if (!supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (i = 0; i < interactions.length; i++) {\n if (!interactions[i].mouse && interactions[i].pointerIsDown) {\n return;\n }\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n if (new Date().getTime() - prevTouchTime < 500) {\n return;\n }\n }\n\n interaction = getInteractionFromPointer(event, event.type, eventTarget);\n\n if (!interaction) { return; }\n\n interaction._updateEventTargets(eventTarget, curEventTarget);\n\n interaction[method](event, event, eventTarget, curEventTarget);\n }\n });\n }\n\n function InteractEvent (interaction, event, action, phase, element, related) {\n var client,\n page,\n target = interaction.target,\n snapStatus = interaction.snapStatus,\n restrictStatus = interaction.restrictStatus,\n pointers = interaction.pointers,\n deltaSource = (target && target.options || defaultOptions).deltaSource,\n sourceX = deltaSource + 'X',\n sourceY = deltaSource + 'Y',\n options = target? target.options: defaultOptions,\n origin = getOriginXY(target, element),\n starting = phase === 'start',\n ending = phase === 'end',\n coords = starting? interaction.startCoords : interaction.curCoords;\n\n element = element || interaction.element;\n\n page = extend({}, coords.page);\n client = extend({}, coords.client);\n\n page.x -= origin.x;\n page.y -= origin.y;\n\n client.x -= origin.x;\n client.y -= origin.y;\n\n var relativePoints = options[action].snap && options[action].snap.relativePoints ;\n\n if (checkSnap(target, action) && !(starting && relativePoints && relativePoints.length)) {\n this.snap = {\n range : snapStatus.range,\n locked : snapStatus.locked,\n x : snapStatus.snappedX,\n y : snapStatus.snappedY,\n realX : snapStatus.realX,\n realY : snapStatus.realY,\n dx : snapStatus.dx,\n dy : snapStatus.dy\n };\n\n if (snapStatus.locked) {\n page.x += snapStatus.dx;\n page.y += snapStatus.dy;\n client.x += snapStatus.dx;\n client.y += snapStatus.dy;\n }\n }\n\n if (checkRestrict(target, action) && !(starting && options[action].restrict.elementRect) && restrictStatus.restricted) {\n page.x += restrictStatus.dx;\n page.y += restrictStatus.dy;\n client.x += restrictStatus.dx;\n client.y += restrictStatus.dy;\n\n this.restrict = {\n dx: restrictStatus.dx,\n dy: restrictStatus.dy\n };\n }\n\n this.pageX = page.x;\n this.pageY = page.y;\n this.clientX = client.x;\n this.clientY = client.y;\n\n this.x0 = interaction.startCoords.page.x - origin.x;\n this.y0 = interaction.startCoords.page.y - origin.y;\n this.clientX0 = interaction.startCoords.client.x - origin.x;\n this.clientY0 = interaction.startCoords.client.y - origin.y;\n this.ctrlKey = event.ctrlKey;\n this.altKey = event.altKey;\n this.shiftKey = event.shiftKey;\n this.metaKey = event.metaKey;\n this.button = event.button;\n this.buttons = event.buttons;\n this.target = element;\n this.t0 = interaction.downTimes[0];\n this.type = action + (phase || '');\n\n this.interaction = interaction;\n this.interactable = target;\n\n var inertiaStatus = interaction.inertiaStatus;\n\n if (inertiaStatus.active) {\n this.detail = 'inertia';\n }\n\n if (related) {\n this.relatedTarget = related;\n }\n\n // end event dx, dy is difference between start and end points\n if (ending) {\n if (deltaSource === 'client') {\n this.dx = client.x - interaction.startCoords.client.x;\n this.dy = client.y - interaction.startCoords.client.y;\n }\n else {\n this.dx = page.x - interaction.startCoords.page.x;\n this.dy = page.y - interaction.startCoords.page.y;\n }\n }\n else if (starting) {\n this.dx = 0;\n this.dy = 0;\n }\n // copy properties from previousmove if starting inertia\n else if (phase === 'inertiastart') {\n this.dx = interaction.prevEvent.dx;\n this.dy = interaction.prevEvent.dy;\n }\n else {\n if (deltaSource === 'client') {\n this.dx = client.x - interaction.prevEvent.clientX;\n this.dy = client.y - interaction.prevEvent.clientY;\n }\n else {\n this.dx = page.x - interaction.prevEvent.pageX;\n this.dy = page.y - interaction.prevEvent.pageY;\n }\n }\n if (interaction.prevEvent && interaction.prevEvent.detail === 'inertia'\n && !inertiaStatus.active\n && options[action].inertia && options[action].inertia.zeroResumeDelta) {\n\n inertiaStatus.resumeDx += this.dx;\n inertiaStatus.resumeDy += this.dy;\n\n this.dx = this.dy = 0;\n }\n\n if (action === 'resize' && interaction.resizeAxes) {\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n this.dx = this.dy;\n }\n else {\n this.dy = this.dx;\n }\n this.axes = 'xy';\n }\n else {\n this.axes = interaction.resizeAxes;\n\n if (interaction.resizeAxes === 'x') {\n this.dy = 0;\n }\n else if (interaction.resizeAxes === 'y') {\n this.dx = 0;\n }\n }\n }\n else if (action === 'gesture') {\n this.touches = [pointers[0], pointers[1]];\n\n if (starting) {\n this.distance = touchDistance(pointers, deltaSource);\n this.box = touchBBox(pointers);\n this.scale = 1;\n this.ds = 0;\n this.angle = touchAngle(pointers, undefined, deltaSource);\n this.da = 0;\n }\n else if (ending || event instanceof InteractEvent) {\n this.distance = interaction.prevEvent.distance;\n this.box = interaction.prevEvent.box;\n this.scale = interaction.prevEvent.scale;\n this.ds = this.scale - 1;\n this.angle = interaction.prevEvent.angle;\n this.da = this.angle - interaction.gesture.startAngle;\n }\n else {\n this.distance = touchDistance(pointers, deltaSource);\n this.box = touchBBox(pointers);\n this.scale = this.distance / interaction.gesture.startDistance;\n this.angle = touchAngle(pointers, interaction.gesture.prevAngle, deltaSource);\n\n this.ds = this.scale - interaction.gesture.prevScale;\n this.da = this.angle - interaction.gesture.prevAngle;\n }\n }\n\n if (starting) {\n this.timeStamp = interaction.downTimes[0];\n this.dt = 0;\n this.duration = 0;\n this.speed = 0;\n this.velocityX = 0;\n this.velocityY = 0;\n }\n else if (phase === 'inertiastart') {\n this.timeStamp = interaction.prevEvent.timeStamp;\n this.dt = interaction.prevEvent.dt;\n this.duration = interaction.prevEvent.duration;\n this.speed = interaction.prevEvent.speed;\n this.velocityX = interaction.prevEvent.velocityX;\n this.velocityY = interaction.prevEvent.velocityY;\n }\n else {\n this.timeStamp = new Date().getTime();\n this.dt = this.timeStamp - interaction.prevEvent.timeStamp;\n this.duration = this.timeStamp - interaction.downTimes[0];\n\n if (event instanceof InteractEvent) {\n var dx = this[sourceX] - interaction.prevEvent[sourceX],\n dy = this[sourceY] - interaction.prevEvent[sourceY],\n dt = this.dt / 1000;\n\n this.speed = hypot(dx, dy) / dt;\n this.velocityX = dx / dt;\n this.velocityY = dy / dt;\n }\n // if normal move or end event, use previous user event coords\n else {\n // speed and velocity in pixels per second\n this.speed = interaction.pointerDelta[deltaSource].speed;\n this.velocityX = interaction.pointerDelta[deltaSource].vx;\n this.velocityY = interaction.pointerDelta[deltaSource].vy;\n }\n }\n\n if ((ending || phase === 'inertiastart')\n && interaction.prevEvent.speed > 600 && this.timeStamp - interaction.prevEvent.timeStamp < 150) {\n\n var angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI,\n overlap = 22.5;\n\n if (angle < 0) {\n angle += 360;\n }\n\n var left = 135 - overlap <= angle && angle < 225 + overlap,\n up = 225 - overlap <= angle && angle < 315 + overlap,\n\n right = !left && (315 - overlap <= angle || angle < 45 + overlap),\n down = !up && 45 - overlap <= angle && angle < 135 + overlap;\n\n this.swipe = {\n up : up,\n down : down,\n left : left,\n right: right,\n angle: angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY\n }\n };\n }\n }\n\n InteractEvent.prototype = {\n preventDefault: blank,\n stopImmediatePropagation: function () {\n this.immediatePropagationStopped = this.propagationStopped = true;\n },\n stopPropagation: function () {\n this.propagationStopped = true;\n }\n };\n\n function preventOriginalDefault () {\n this.originalEvent.preventDefault();\n }\n\n function getActionCursor (action) {\n var cursor = '';\n\n if (action.name === 'drag') {\n cursor = actionCursors.drag;\n }\n if (action.name === 'resize') {\n if (action.axis) {\n cursor = actionCursors[action.name + action.axis];\n }\n else if (action.edges) {\n var cursorKey = 'resize',\n edgeNames = ['top', 'bottom', 'left', 'right'];\n\n for (var i = 0; i < 4; i++) {\n if (action.edges[edgeNames[i]]) {\n cursorKey += edgeNames[i];\n }\n }\n\n cursor = actionCursors[cursorKey];\n }\n }\n\n return cursor;\n }\n\n function checkResizeEdge (name, value, page, element, interactableElement, rect, margin) {\n // false, '', undefined, null\n if (!value) { return false; }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n var width = isNumber(rect.width)? rect.width : rect.right - rect.left,\n height = isNumber(rect.height)? rect.height : rect.bottom - rect.top;\n\n if (width < 0) {\n if (name === 'left' ) { name = 'right'; }\n else if (name === 'right') { name = 'left' ; }\n }\n if (height < 0) {\n if (name === 'top' ) { name = 'bottom'; }\n else if (name === 'bottom') { name = 'top' ; }\n }\n\n if (name === 'left' ) { return page.x < ((width >= 0? rect.left: rect.right ) + margin); }\n if (name === 'top' ) { return page.y < ((height >= 0? rect.top : rect.bottom) + margin); }\n\n if (name === 'right' ) { return page.x > ((width >= 0? rect.right : rect.left) - margin); }\n if (name === 'bottom') { return page.y > ((height >= 0? rect.bottom: rect.top ) - margin); }\n }\n\n // the remaining checks require an element\n if (!isElement(element)) { return false; }\n\n return isElement(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : matchesUpTo(element, value, interactableElement);\n }\n\n function defaultActionChecker (pointer, interaction, element) {\n var rect = this.getRect(element),\n shouldResize = false,\n action = null,\n resizeAxes = null,\n resizeEdges,\n page = extend({}, interaction.curCoords.page),\n options = this.options;\n\n if (!rect) { return null; }\n\n if (actionIsEnabled.resize && options.resize.enabled) {\n var resizeOptions = options.resize;\n\n resizeEdges = {\n left: false, right: false, top: false, bottom: false\n };\n\n // if using resize.edges\n if (isObject(resizeOptions.edges)) {\n for (var edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._eventTarget,\n element,\n rect,\n resizeOptions.margin || margin);\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right;\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;\n\n shouldResize = resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom;\n }\n else {\n var right = options.resize.axis !== 'y' && page.x > (rect.right - margin),\n bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - margin);\n\n shouldResize = right || bottom;\n resizeAxes = (right? 'x' : '') + (bottom? 'y' : '');\n }\n }\n\n action = shouldResize\n ? 'resize'\n : actionIsEnabled.drag && options.drag.enabled\n ? 'drag'\n : null;\n\n if (actionIsEnabled.gesture\n && interaction.pointerIds.length >=2\n && !(interaction.dragging || interaction.resizing)) {\n action = 'gesture';\n }\n\n if (action) {\n return {\n name: action,\n axis: resizeAxes,\n edges: resizeEdges\n };\n }\n\n return null;\n }\n\n // Check if action is enabled globally and the current target supports it\n // If so, return the validated action. Otherwise, return null\n function validateAction (action, interactable) {\n if (!isObject(action)) { return null; }\n\n var actionName = action.name,\n options = interactable.options;\n\n if (( (actionName === 'resize' && options.resize.enabled )\n || (actionName === 'drag' && options.drag.enabled )\n || (actionName === 'gesture' && options.gesture.enabled))\n && actionIsEnabled[actionName]) {\n\n if (actionName === 'resize' || actionName === 'resizeyx') {\n actionName = 'resizexy';\n }\n\n return action;\n }\n return null;\n }\n\n var listeners = {},\n interactionListeners = [\n 'dragStart', 'dragMove', 'resizeStart', 'resizeMove', 'gestureStart', 'gestureMove',\n 'pointerOver', 'pointerOut', 'pointerHover', 'selectorDown',\n 'pointerDown', 'pointerMove', 'pointerUp', 'pointerCancel', 'pointerEnd',\n 'addPointer', 'removePointer', 'recordPointer', 'autoScrollMove'\n ];\n\n for (var i = 0, len = interactionListeners.length; i < len; i++) {\n var name = interactionListeners[i];\n\n listeners[name] = doOnInteractions(name);\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener (event, useCapture) {\n var fakeEvent = {},\n delegated = delegatedEvents[event.type],\n eventTarget = getActualElement(event.path\n ? event.path[0]\n : event.target),\n element = eventTarget;\n\n useCapture = useCapture? true: false;\n\n // duplicate the event so that currentTarget can be changed\n for (var prop in event) {\n fakeEvent[prop] = event[prop];\n }\n\n fakeEvent.originalEvent = event;\n fakeEvent.preventDefault = preventOriginalDefault;\n\n // climb up document tree looking for selector matches\n while (isElement(element)) {\n for (var i = 0; i < delegated.selectors.length; i++) {\n var selector = delegated.selectors[i],\n context = delegated.contexts[i];\n\n if (matchesSelector(element, selector)\n && nodeContains(context, eventTarget)\n && nodeContains(context, element)) {\n\n var listeners = delegated.listeners[i];\n\n fakeEvent.currentTarget = element;\n\n for (var j = 0; j < listeners.length; j++) {\n if (listeners[j][1] === useCapture) {\n listeners[j][0](fakeEvent);\n }\n }\n }\n }\n\n element = parentElement(element);\n }\n }\n\n function delegateUseCapture (event) {\n return delegateListener.call(this, event, true);\n }\n\n interactables.indexOfElement = function indexOfElement (element, context) {\n context = context || document;\n\n for (var i = 0; i < this.length; i++) {\n var interactable = this[i];\n\n if ((interactable.selector === element\n && (interactable._context === context))\n || (!interactable.selector && interactable._element === element)) {\n\n return i;\n }\n }\n return -1;\n };\n\n interactables.get = function interactableGet (element, options) {\n return this[this.indexOfElement(element, options && options.context)];\n };\n\n interactables.forEachSelector = function (callback) {\n for (var i = 0; i < this.length; i++) {\n var interactable = this[i];\n\n if (!interactable.selector) {\n continue;\n }\n\n var ret = callback(interactable, interactable.selector, interactable._context, i, this);\n\n if (ret !== undefined) {\n return ret;\n }\n }\n };\n\n /*\\\n * interact\n [ method ]\n *\n * The methods of this variable can be used to set elements as\n * interactables and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to\n * configure it.\n *\n - element (Element | string) The HTML or SVG Element to interact with or CSS selector\n = (object) An @Interactable\n *\n > Usage\n | interact(document.getElementById('draggable')).draggable(true);\n |\n | var rectables = interact('rect');\n | rectables\n | .gesturable(true)\n | .on('gesturemove', function (event) {\n | // something cool...\n | })\n | .autoScroll(true);\n \\*/\n function interact (element, options) {\n return interactables.get(element, options) || new Interactable(element, options);\n }\n\n /*\\\n * Interactable\n [ property ]\n **\n * Object type returned by @interact\n \\*/\n function Interactable (element, options) {\n this._element = element;\n this._iEvents = this._iEvents || {};\n\n var _window;\n\n if (trySelector(element)) {\n this.selector = element;\n\n var context = options && options.context;\n\n _window = context? getWindow(context) : window;\n\n if (context && (_window.Node\n ? context instanceof _window.Node\n : (isElement(context) || context === _window.document))) {\n\n this._context = context;\n }\n }\n else {\n _window = getWindow(element);\n\n if (isElement(element, _window)) {\n\n if (supportsPointerEvent) {\n events.add(this._element, pEventTypes.down, listeners.pointerDown );\n events.add(this._element, pEventTypes.move, listeners.pointerHover);\n }\n else {\n events.add(this._element, 'mousedown' , listeners.pointerDown );\n events.add(this._element, 'mousemove' , listeners.pointerHover);\n events.add(this._element, 'touchstart', listeners.pointerDown );\n events.add(this._element, 'touchmove' , listeners.pointerHover);\n }\n }\n }\n\n this._doc = _window.document;\n\n if (!contains(documents, this._doc)) {\n listenToDocument(this._doc);\n }\n\n interactables.push(this);\n\n this.set(options);\n }\n\n Interactable.prototype = {\n setOnEvents: function (action, phases) {\n if (action === 'drop') {\n if (isFunction(phases.ondrop) ) { this.ondrop = phases.ondrop ; }\n if (isFunction(phases.ondropactivate) ) { this.ondropactivate = phases.ondropactivate ; }\n if (isFunction(phases.ondropdeactivate)) { this.ondropdeactivate = phases.ondropdeactivate; }\n if (isFunction(phases.ondragenter) ) { this.ondragenter = phases.ondragenter ; }\n if (isFunction(phases.ondragleave) ) { this.ondragleave = phases.ondragleave ; }\n if (isFunction(phases.ondropmove) ) { this.ondropmove = phases.ondropmove ; }\n }\n else {\n action = 'on' + action;\n\n if (isFunction(phases.onstart) ) { this[action + 'start' ] = phases.onstart ; }\n if (isFunction(phases.onmove) ) { this[action + 'move' ] = phases.onmove ; }\n if (isFunction(phases.onend) ) { this[action + 'end' ] = phases.onend ; }\n if (isFunction(phases.oninertiastart)) { this[action + 'inertiastart' ] = phases.oninertiastart ; }\n }\n\n return this;\n },\n\n /*\\\n * Interactable.draggable\n [ method ]\n *\n * Gets or sets whether drag actions can be performed on the\n * Interactable\n *\n = (boolean) Indicates if this can be the target of drag events\n | var isDraggable = interact('ul li').draggable();\n * or\n - options (boolean | object) #optional true/false or An object with event listeners to be fired on drag events (object makes the Interactable draggable)\n = (object) This Interactable\n | interact(element).draggable({\n | onstart: function (event) {},\n | onmove : function (event) {},\n | onend : function (event) {},\n |\n | // the axis in which the first movement must be\n | // for the drag sequence to start\n | // 'xy' by default - any direction\n | axis: 'x' || 'y' || 'xy',\n |\n | // max number of drags that can happen concurrently\n | // with elements of this Interactable. Infinity by default\n | max: Infinity,\n |\n | // max number of drags that can target the same element+Interactable\n | // 1 by default\n | maxPerElement: 2\n | });\n \\*/\n draggable: function (options) {\n if (isObject(options)) {\n this.options.drag.enabled = options.enabled === false? false: true;\n this.setPerAction('drag', options);\n this.setOnEvents('drag', options);\n\n if (/^x$|^y$|^xy$/.test(options.axis)) {\n this.options.drag.axis = options.axis;\n }\n else if (options.axis === null) {\n delete this.options.drag.axis;\n }\n\n return this;\n }\n\n if (isBool(options)) {\n this.options.drag.enabled = options;\n\n return this;\n }\n\n return this.options.drag;\n },\n\n setPerAction: function (action, options) {\n // for all the default per-action options\n for (var option in options) {\n // if this option exists for this action\n if (option in defaultOptions[action]) {\n // if the option in the options arg is an object value\n if (isObject(options[option])) {\n // duplicate the object\n this.options[action][option] = extend(this.options[action][option] || {}, options[option]);\n\n if (isObject(defaultOptions.perAction[option]) && 'enabled' in defaultOptions.perAction[option]) {\n this.options[action][option].enabled = options[option].enabled === false? false : true;\n }\n }\n else if (isBool(options[option]) && isObject(defaultOptions.perAction[option])) {\n this.options[action][option].enabled = options[option];\n }\n else if (options[option] !== undefined) {\n // or if it's not undefined, do a plain assignment\n this.options[action][option] = options[option];\n }\n }\n }\n },\n\n /*\\\n * Interactable.dropzone\n [ method ]\n *\n * Returns or sets whether elements can be dropped onto this\n * Interactable to trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS selector or element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed values are:\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the\n * draggable is over the dropzone\n *\n - options (boolean | object | null) #optional The new value to be set.\n | interact('.drop').dropzone({\n | accept: '.can-drop' || document.getElementById('single-drop'),\n | overlap: 'pointer' || 'center' || zeroToOne\n | }\n = (boolean | object) The current setting or this Interactable\n \\*/\n dropzone: function (options) {\n if (isObject(options)) {\n this.options.drop.enabled = options.enabled === false? false: true;\n this.setOnEvents('drop', options);\n\n if (/^(pointer|center)$/.test(options.overlap)) {\n this.options.drop.overlap = options.overlap;\n }\n else if (isNumber(options.overlap)) {\n this.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0);\n }\n if ('accept' in options) {\n this.options.drop.accept = options.accept;\n }\n if ('checker' in options) {\n this.options.drop.checker = options.checker;\n }\n\n return this;\n }\n\n if (isBool(options)) {\n this.options.drop.enabled = options;\n\n return this;\n }\n\n return this.options.drop;\n },\n\n dropCheck: function (dragEvent, event, draggable, draggableElement, dropElement, rect) {\n var dropped = false;\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || this.getRect(dropElement))) {\n return (this.options.drop.checker\n ? this.options.drop.checker(dragEvent, event, dropped, this, dropElement, draggable, draggableElement)\n : false);\n }\n\n var dropOverlap = this.options.drop.overlap;\n\n if (dropOverlap === 'pointer') {\n var page = getPageXY(dragEvent),\n origin = getOriginXY(draggable, draggableElement),\n horizontal,\n vertical;\n\n page.x += origin.x;\n page.y += origin.y;\n\n horizontal = (page.x > rect.left) && (page.x < rect.right);\n vertical = (page.y > rect.top ) && (page.y < rect.bottom);\n\n dropped = horizontal && vertical;\n }\n\n var dragRect = draggable.getRect(draggableElement);\n\n if (dropOverlap === 'center') {\n var cx = dragRect.left + dragRect.width / 2,\n cy = dragRect.top + dragRect.height / 2;\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom;\n }\n\n if (isNumber(dropOverlap)) {\n var overlapArea = (Math.max(0, Math.min(rect.right , dragRect.right ) - Math.max(rect.left, dragRect.left))\n * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top , dragRect.top ))),\n overlapRatio = overlapArea / (dragRect.width * dragRect.height);\n\n dropped = overlapRatio >= dropOverlap;\n }\n\n if (this.options.drop.checker) {\n dropped = this.options.drop.checker(dragEvent, event, dropped, this, dropElement, draggable, draggableElement);\n }\n\n return dropped;\n },\n\n /*\\\n * Interactable.dropChecker\n [ method ]\n *\n * DEPRECATED. Use interactable.dropzone({ checker: function... }) instead.\n *\n * Gets or sets the function used to check if a dragged element is\n * over this Interactable.\n *\n - checker (function) #optional The function that will be called when checking for a drop\n = (Function | Interactable) The checker function or this Interactable\n *\n * The checker function takes the following arguments:\n *\n - dragEvent (InteractEvent) The related dragmove or dragend event\n - event (TouchEvent | PointerEvent | MouseEvent) The user move/up/end Event related to the dragEvent\n - dropped (boolean) The value from the default drop checker\n - dropzone (Interactable) The dropzone interactable\n - dropElement (Element) The dropzone element\n - draggable (Interactable) The Interactable being dragged\n - draggableElement (Element) The actual element that's being dragged\n *\n > Usage:\n | interact(target)\n | .dropChecker(function(dragEvent, // related dragmove or dragend event\n | event, // TouchEvent/PointerEvent/MouseEvent\n | dropped, // bool result of the default checker\n | dropzone, // dropzone Interactable\n | dropElement, // dropzone elemnt\n | draggable, // draggable Interactable\n | draggableElement) {// draggable element\n |\n | return dropped && event.target.hasAttribute('allow-drop');\n | }\n \\*/\n dropChecker: function (checker) {\n if (isFunction(checker)) {\n this.options.drop.checker = checker;\n\n return this;\n }\n if (checker === null) {\n delete this.options.getRect;\n\n return this;\n }\n\n return this.options.drop.checker;\n },\n\n /*\\\n * Interactable.accept\n [ method ]\n *\n * Deprecated. add an `accept` property to the options object passed to\n * @Interactable.dropzone instead.\n *\n * Gets or sets the Element or CSS selector match that this\n * Interactable accepts if it is a dropzone.\n *\n - newValue (Element | string | null) #optional\n * If it is an Element, then only that element can be dropped into this dropzone.\n * If it is a string, the element being dragged must match it as a selector.\n * If it is null, the accept options is cleared - it accepts any element.\n *\n = (string | Element | null | Interactable) The current accept option if given `undefined` or this Interactable\n \\*/\n accept: function (newValue) {\n if (isElement(newValue)) {\n this.options.drop.accept = newValue;\n\n return this;\n }\n\n // test if it is a valid CSS selector\n if (trySelector(newValue)) {\n this.options.drop.accept = newValue;\n\n return this;\n }\n\n if (newValue === null) {\n delete this.options.drop.accept;\n\n return this;\n }\n\n return this.options.drop.accept;\n },\n\n /*\\\n * Interactable.resizable\n [ method ]\n *\n * Gets or sets whether resize actions can be performed on the\n * Interactable\n *\n = (boolean) Indicates if this can be the target of resize elements\n | var isResizeable = interact('input[type=text]').resizable();\n * or\n - options (boolean | object) #optional true/false or An object with event listeners to be fired on resize events (object makes the Interactable resizable)\n = (object) This Interactable\n | interact(element).resizable({\n | onstart: function (event) {},\n | onmove : function (event) {},\n | onend : function (event) {},\n |\n | edges: {\n | top : true, // Use pointer coords to check for resize.\n | left : false, // Disable resizing from left edge.\n | bottom: '.resize-s',// Resize if pointer target matches selector\n | right : handleEl // Resize if pointer target is the given Element\n | },\n |\n | // Width and height can be adjusted independently. When `true`, width and\n | // height are adjusted at a 1:1 ratio.\n | square: false,\n |\n | // Width and height can be adjusted independently. When `true`, width and\n | // height maintain the aspect ratio they had when resizing started.\n | preserveAspectRatio: false,\n |\n | // a value of 'none' will limit the resize rect to a minimum of 0x0\n | // 'negate' will allow the rect to have negative width/height\n | // 'reposition' will keep the width/height positive by swapping\n | // the top and bottom edges and/or swapping the left and right edges\n | invert: 'none' || 'negate' || 'reposition'\n |\n | // limit multiple resizes.\n | // See the explanation in the @Interactable.draggable example\n | max: Infinity,\n | maxPerElement: 1,\n | });\n \\*/\n resizable: function (options) {\n if (isObject(options)) {\n this.options.resize.enabled = options.enabled === false? false: true;\n this.setPerAction('resize', options);\n this.setOnEvents('resize', options);\n\n if (/^x$|^y$|^xy$/.test(options.axis)) {\n this.options.resize.axis = options.axis;\n }\n else if (options.axis === null) {\n this.options.resize.axis = defaultOptions.resize.axis;\n }\n\n if (isBool(options.preserveAspectRatio)) {\n this.options.resize.preserveAspectRatio = options.preserveAspectRatio;\n }\n else if (isBool(options.square)) {\n this.options.resize.square = options.square;\n }\n\n return this;\n }\n if (isBool(options)) {\n this.options.resize.enabled = options;\n\n return this;\n }\n return this.options.resize;\n },\n\n /*\\\n * Interactable.squareResize\n [ method ]\n *\n * Deprecated. Add a `square: true || false` property to @Interactable.resizable instead\n *\n * Gets or sets whether resizing is forced 1:1 aspect\n *\n = (boolean) Current setting\n *\n * or\n *\n - newValue (boolean) #optional\n = (object) this Interactable\n \\*/\n squareResize: function (newValue) {\n if (isBool(newValue)) {\n this.options.resize.square = newValue;\n\n return this;\n }\n\n if (newValue === null) {\n delete this.options.resize.square;\n\n return this;\n }\n\n return this.options.resize.square;\n },\n\n /*\\\n * Interactable.gesturable\n [ method ]\n *\n * Gets or sets whether multitouch gestures can be performed on the\n * Interactable's element\n *\n = (boolean) Indicates if this can be the target of gesture events\n | var isGestureable = interact(element).gesturable();\n * or\n - options (boolean | object) #optional true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n = (object) this Interactable\n | interact(element).gesturable({\n | onstart: function (event) {},\n | onmove : function (event) {},\n | onend : function (event) {},\n |\n | // limit multiple gestures.\n | // See the explanation in @Interactable.draggable example\n | max: Infinity,\n | maxPerElement: 1,\n | });\n \\*/\n gesturable: function (options) {\n if (isObject(options)) {\n this.options.gesture.enabled = options.enabled === false? false: true;\n this.setPerAction('gesture', options);\n this.setOnEvents('gesture', options);\n\n return this;\n }\n\n if (isBool(options)) {\n this.options.gesture.enabled = options;\n\n return this;\n }\n\n return this.options.gesture;\n },\n\n /*\\\n * Interactable.autoScroll\n [ method ]\n **\n * Deprecated. Add an `autoscroll` property to the options object\n * passed to @Interactable.draggable or @Interactable.resizable instead.\n *\n * Returns or sets whether dragging and resizing near the edges of the\n * window/container trigger autoScroll for this Interactable\n *\n = (object) Object with autoScroll properties\n *\n * or\n *\n - options (object | boolean) #optional\n * options can be:\n * - an object with margin, distance and interval properties,\n * - true or false to enable or disable autoScroll or\n = (Interactable) this Interactable\n \\*/\n autoScroll: function (options) {\n if (isObject(options)) {\n options = extend({ actions: ['drag', 'resize']}, options);\n }\n else if (isBool(options)) {\n options = { actions: ['drag', 'resize'], enabled: options };\n }\n\n return this.setOptions('autoScroll', options);\n },\n\n /*\\\n * Interactable.snap\n [ method ]\n **\n * Deprecated. Add a `snap` property to the options object passed\n * to @Interactable.draggable or @Interactable.resizable instead.\n *\n * Returns or sets if and how action coordinates are snapped. By\n * default, snapping is relative to the pointer coordinates. You can\n * change this by setting the\n * [`elementOrigin`](https://github.com/taye/interact.js/pull/72).\n **\n = (boolean | object) `false` if snap is disabled; object with snap properties if snap is enabled\n **\n * or\n **\n - options (object | boolean | null) #optional\n = (Interactable) this Interactable\n > Usage\n | interact(document.querySelector('#thing')).snap({\n | targets: [\n | // snap to this specific point\n | {\n | x: 100,\n | y: 100,\n | range: 25\n | },\n | // give this function the x and y page coords and snap to the object returned\n | function (x, y) {\n | return {\n | x: x,\n | y: (75 + 50 * Math.sin(x * 0.04)),\n | range: 40\n | };\n | },\n | // create a function that snaps to a grid\n | interact.createSnapGrid({\n | x: 50,\n | y: 50,\n | range: 10, // optional\n | offset: { x: 5, y: 10 } // optional\n | })\n | ],\n | // do not snap during normal movement.\n | // Instead, trigger only one snapped move event\n | // immediately before the end event.\n | endOnly: true,\n |\n | relativePoints: [\n | { x: 0, y: 0 }, // snap relative to the top left of the element\n | { x: 1, y: 1 }, // and also to the bottom right\n | ], \n |\n | // offset the snap target coordinates\n | // can be an object with x/y or 'startCoords'\n | offset: { x: 50, y: 50 }\n | }\n | });\n \\*/\n snap: function (options) {\n var ret = this.setOptions('snap', options);\n\n if (ret === this) { return this; }\n\n return ret.drag;\n },\n\n setOptions: function (option, options) {\n var actions = options && isArray(options.actions)\n ? options.actions\n : ['drag'];\n\n var i;\n\n if (isObject(options) || isBool(options)) {\n for (i = 0; i < actions.length; i++) {\n var action = /resize/.test(actions[i])? 'resize' : actions[i];\n\n if (!isObject(this.options[action])) { continue; }\n\n var thisOption = this.options[action][option];\n\n if (isObject(options)) {\n extend(thisOption, options);\n thisOption.enabled = options.enabled === false? false: true;\n\n if (option === 'snap') {\n if (thisOption.mode === 'grid') {\n thisOption.targets = [\n interact.createSnapGrid(extend({\n offset: thisOption.gridOffset || { x: 0, y: 0 }\n }, thisOption.grid || {}))\n ];\n }\n else if (thisOption.mode === 'anchor') {\n thisOption.targets = thisOption.anchors;\n }\n else if (thisOption.mode === 'path') {\n thisOption.targets = thisOption.paths;\n }\n\n if ('elementOrigin' in options) {\n thisOption.relativePoints = [options.elementOrigin];\n }\n }\n }\n else if (isBool(options)) {\n thisOption.enabled = options;\n }\n }\n\n return this;\n }\n\n var ret = {},\n allActions = ['drag', 'resize', 'gesture'];\n\n for (i = 0; i < allActions.length; i++) {\n if (option in defaultOptions[allActions[i]]) {\n ret[allActions[i]] = this.options[allActions[i]][option];\n }\n }\n\n return ret;\n },\n\n\n /*\\\n * Interactable.inertia\n [ method ]\n **\n * Deprecated. Add an `inertia` property to the options object passed\n * to @Interactable.draggable or @Interactable.resizable instead.\n *\n * Returns or sets if and how events continue to run after the pointer is released\n **\n = (boolean | object) `false` if inertia is disabled; `object` with inertia properties if inertia is enabled\n **\n * or\n **\n - options (object | boolean | null) #optional\n = (Interactable) this Interactable\n > Usage\n | // enable and use default settings\n | interact(element).inertia(true);\n |\n | // enable and use custom settings\n | interact(element).inertia({\n | // value greater than 0\n | // high values slow the object down more quickly\n | resistance : 16,\n |\n | // the minimum launch speed (pixels per second) that results in inertia start\n | minSpeed : 200,\n |\n | // inertia will stop when the object slows down to this speed\n | endSpeed : 20,\n |\n | // boolean; should actions be resumed when the pointer goes down during inertia\n | allowResume : true,\n |\n | // boolean; should the jump when resuming from inertia be ignored in event.dx/dy\n | zeroResumeDelta: false,\n |\n | // if snap/restrict are set to be endOnly and inertia is enabled, releasing\n | // the pointer without triggering inertia will animate from the release\n | // point to the snaped/restricted point in the given amount of time (ms)\n | smoothEndDuration: 300,\n |\n | // an array of action types that can have inertia (no gesture)\n | actions : ['drag', 'resize']\n | });\n |\n | // reset custom settings and use all defaults\n | interact(element).inertia(null);\n \\*/\n inertia: function (options) {\n var ret = this.setOptions('inertia', options);\n\n if (ret === this) { return this; }\n\n return ret.drag;\n },\n\n getAction: function (pointer, event, interaction, element) {\n var action = this.defaultActionChecker(pointer, interaction, element);\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction);\n }\n\n return action;\n },\n\n defaultActionChecker: defaultActionChecker,\n\n /*\\\n * Interactable.actionChecker\n [ method ]\n *\n * Gets or sets the function used to check action to be performed on\n * pointerDown\n *\n - checker (function | null) #optional A function which takes a pointer event, defaultAction string, interactable, element and interaction as parameters and returns an object with name property 'drag' 'resize' or 'gesture' and optionally an `edges` object with boolean 'top', 'left', 'bottom' and right props.\n = (Function | Interactable) The checker function or this Interactable\n *\n | interact('.resize-drag')\n | .resizable(true)\n | .draggable(true)\n | .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n |\n | if (interact.matchesSelector(event.target, '.drag-handle') {\n | // force drag with handle target\n | action.name = drag;\n | }\n | else {\n | // resize from the top and right edges\n | action.name = 'resize';\n | action.edges = { top: true, right: true };\n | }\n |\n | return action;\n | });\n \\*/\n actionChecker: function (checker) {\n if (isFunction(checker)) {\n this.options.actionChecker = checker;\n\n return this;\n }\n\n if (checker === null) {\n delete this.options.actionChecker;\n\n return this;\n }\n\n return this.options.actionChecker;\n },\n\n /*\\\n * Interactable.getRect\n [ method ]\n *\n * The default function to get an Interactables bounding rect. Can be\n * overridden using @Interactable.rectChecker.\n *\n - element (Element) #optional The element to measure.\n = (object) The object's bounding rectangle.\n o {\n o top : 0,\n o left : 0,\n o bottom: 0,\n o right : 0,\n o width : 0,\n o height: 0\n o }\n \\*/\n getRect: function rectCheck (element) {\n element = element || this._element;\n\n if (this.selector && !(isElement(element))) {\n element = this._context.querySelector(this.selector);\n }\n\n return getElementRect(element);\n },\n\n /*\\\n * Interactable.rectChecker\n [ method ]\n *\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n - checker (function) #optional A function which returns this Interactable's bounding rectangle. See @Interactable.getRect\n = (function | object) The checker function or this Interactable\n \\*/\n rectChecker: function (checker) {\n if (isFunction(checker)) {\n this.getRect = checker;\n\n return this;\n }\n\n if (checker === null) {\n delete this.options.getRect;\n\n return this;\n }\n\n return this.getRect;\n },\n\n /*\\\n * Interactable.styleCursor\n [ method ]\n *\n * Returns or sets whether the action that would be performed when the\n * mouse on the element are checked on `mousemove` so that the cursor\n * may be styled appropriately\n *\n - newValue (boolean) #optional\n = (boolean | Interactable) The current setting or this Interactable\n \\*/\n styleCursor: function (newValue) {\n if (isBool(newValue)) {\n this.options.styleCursor = newValue;\n\n return this;\n }\n\n if (newValue === null) {\n delete this.options.styleCursor;\n\n return this;\n }\n\n return this.options.styleCursor;\n },\n\n /*\\\n * Interactable.preventDefault\n [ method ]\n *\n * Returns or sets whether to prevent the browser's default behaviour\n * in response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n - newValue (string) #optional `true`, `false` or `'auto'`\n = (string | Interactable) The current setting or this Interactable\n \\*/\n preventDefault: function (newValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue;\n return this;\n }\n\n if (isBool(newValue)) {\n this.options.preventDefault = newValue? 'always' : 'never';\n return this;\n }\n\n return this.options.preventDefault;\n },\n\n /*\\\n * Interactable.origin\n [ method ]\n *\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n - origin (object | string) #optional An object eg. { x: 0, y: 0 } or string 'parent', 'self' or any CSS selector\n * OR\n - origin (Element) #optional An HTML or SVG Element whose rect will be used\n **\n = (object) The current origin or this Interactable\n \\*/\n origin: function (newValue) {\n if (trySelector(newValue)) {\n this.options.origin = newValue;\n return this;\n }\n else if (isObject(newValue)) {\n this.options.origin = newValue;\n return this;\n }\n\n return this.options.origin;\n },\n\n /*\\\n * Interactable.deltaSource\n [ method ]\n *\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n - newValue (string) #optional Use 'client' if you will be scrolling while interacting; Use 'page' if you want autoScroll to work\n = (string | object) The current deltaSource or this Interactable\n \\*/\n deltaSource: function (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue;\n\n return this;\n }\n\n return this.options.deltaSource;\n },\n\n /*\\\n * Interactable.restrict\n [ method ]\n **\n * Deprecated. Add a `restrict` property to the options object passed to\n * @Interactable.draggable, @Interactable.resizable or @Interactable.gesturable instead.\n *\n * Returns or sets the rectangles within which actions on this\n * interactable (after snap calculations) are restricted. By default,\n * restricting is relative to the pointer coordinates. You can change\n * this by setting the\n * [`elementRect`](https://github.com/taye/interact.js/pull/72).\n **\n - options (object) #optional an object with keys drag, resize, and/or gesture whose values are rects, Elements, CSS selectors, or 'parent' or 'self'\n = (object) The current restrictions object or this Interactable\n **\n | interact(element).restrict({\n | // the rect will be `interact.getElementRect(element.parentNode)`\n | drag: element.parentNode,\n |\n | // x and y are relative to the the interactable's origin\n | resize: { x: 100, y: 100, width: 200, height: 200 }\n | })\n |\n | interact('.draggable').restrict({\n | // the rect will be the selected element's parent\n | drag: 'parent',\n |\n | // do not restrict during normal movement.\n | // Instead, trigger only one restricted move event\n | // immediately before the end event.\n | endOnly: true,\n |\n | // https://github.com/taye/interact.js/pull/72#issue-41813493\n | elementRect: { top: 0, left: 0, bottom: 1, right: 1 }\n | });\n \\*/\n restrict: function (options) {\n if (!isObject(options)) {\n return this.setOptions('restrict', options);\n }\n\n var actions = ['drag', 'resize', 'gesture'],\n ret;\n\n for (var i = 0; i < actions.length; i++) {\n var action = actions[i];\n\n if (action in options) {\n var perAction = extend({\n actions: [action],\n restriction: options[action]\n }, options);\n\n ret = this.setOptions('restrict', perAction);\n }\n }\n\n return ret;\n },\n\n /*\\\n * Interactable.context\n [ method ]\n *\n * Gets the selector context Node of the Interactable. The default is `window.document`.\n *\n = (Node) The context Node of this Interactable\n **\n \\*/\n context: function () {\n return this._context;\n },\n\n _context: document,\n\n /*\\\n * Interactable.ignoreFrom\n [ method ]\n *\n * If the target of the `mousedown`, `pointerdown` or `touchstart`\n * event or any of it's parents match the given CSS selector or\n * Element, no drag/resize/gesture is started.\n *\n - newValue (string | Element | null) #optional a CSS selector string, an Element or `null` to not ignore any elements\n = (string | Element | object) The current ignoreFrom value or this Interactable\n **\n | interact(element, { ignoreFrom: document.getElementById('no-action') });\n | // or\n | interact(element).ignoreFrom('input, textarea, a');\n \\*/\n ignoreFrom: function (newValue) {\n if (trySelector(newValue)) { // CSS selector to match event.target\n this.options.ignoreFrom = newValue;\n return this;\n }\n\n if (isElement(newValue)) { // specific element\n this.options.ignoreFrom = newValue;\n return this;\n }\n\n return this.options.ignoreFrom;\n },\n\n /*\\\n * Interactable.allowFrom\n [ method ]\n *\n * A drag/resize/gesture is started only If the target of the\n * `mousedown`, `pointerdown` or `touchstart` event or any of it's\n * parents match the given CSS selector or Element.\n *\n - newValue (string | Element | null) #optional a CSS selector string, an Element or `null` to allow from any element\n = (string | Element | object) The current allowFrom value or this Interactable\n **\n | interact(element, { allowFrom: document.getElementById('drag-handle') });\n | // or\n | interact(element).allowFrom('.handle');\n \\*/\n allowFrom: function (newValue) {\n if (trySelector(newValue)) { // CSS selector to match event.target\n this.options.allowFrom = newValue;\n return this;\n }\n\n if (isElement(newValue)) { // specific element\n this.options.allowFrom = newValue;\n return this;\n }\n\n return this.options.allowFrom;\n },\n\n /*\\\n * Interactable.element\n [ method ]\n *\n * If this is not a selector Interactable, it returns the element this\n * interactable represents\n *\n = (Element) HTML / SVG Element\n \\*/\n element: function () {\n return this._element;\n },\n\n /*\\\n * Interactable.fire\n [ method ]\n *\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n - iEvent (InteractEvent) The InteractEvent object to be fired on this Interactable\n = (Interactable) this Interactable\n \\*/\n fire: function (iEvent) {\n if (!(iEvent && iEvent.type) || !contains(eventTypes, iEvent.type)) {\n return this;\n }\n\n var listeners,\n i,\n len,\n onEvent = 'on' + iEvent.type,\n funcName = '';\n\n // Interactable#on() listeners\n if (iEvent.type in this._iEvents) {\n listeners = this._iEvents[iEvent.type];\n\n for (i = 0, len = listeners.length; i < len && !iEvent.immediatePropagationStopped; i++) {\n funcName = listeners[i].name;\n listeners[i](iEvent);\n }\n }\n\n // interactable.onevent listener\n if (isFunction(this[onEvent])) {\n funcName = this[onEvent].name;\n this[onEvent](iEvent);\n }\n\n // interact.on() listeners\n if (iEvent.type in globalEvents && (listeners = globalEvents[iEvent.type])) {\n\n for (i = 0, len = listeners.length; i < len && !iEvent.immediatePropagationStopped; i++) {\n funcName = listeners[i].name;\n listeners[i](iEvent);\n }\n }\n\n return this;\n },\n\n /*\\\n * Interactable.on\n [ method ]\n *\n * Binds a listener for an InteractEvent or DOM event.\n *\n - eventType (string | array | object) The types of events to listen for\n - listener (function) The function to be called on the given event(s)\n - useCapture (boolean) #optional useCapture flag for addEventListener\n = (object) This Interactable\n \\*/\n on: function (eventType, listener, useCapture) {\n var i;\n\n if (isString(eventType) && eventType.search(' ') !== -1) {\n eventType = eventType.trim().split(/ +/);\n }\n\n if (isArray(eventType)) {\n for (i = 0; i < eventType.length; i++) {\n this.on(eventType[i], listener, useCapture);\n }\n\n return this;\n }\n\n if (isObject(eventType)) {\n for (var prop in eventType) {\n this.on(prop, eventType[prop], listener);\n }\n\n return this;\n }\n\n if (eventType === 'wheel') {\n eventType = wheelEvent;\n }\n\n // convert to boolean\n useCapture = useCapture? true: false;\n\n if (contains(eventTypes, eventType)) {\n // if this type of event was never bound to this Interactable\n if (!(eventType in this._iEvents)) {\n this._iEvents[eventType] = [listener];\n }\n else {\n this._iEvents[eventType].push(listener);\n }\n }\n // delegated event for selector\n else if (this.selector) {\n if (!delegatedEvents[eventType]) {\n delegatedEvents[eventType] = {\n selectors: [],\n contexts : [],\n listeners: []\n };\n\n // add delegate listener functions\n for (i = 0; i < documents.length; i++) {\n events.add(documents[i], eventType, delegateListener);\n events.add(documents[i], eventType, delegateUseCapture, true);\n }\n }\n\n var delegated = delegatedEvents[eventType],\n index;\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === this.selector\n && delegated.contexts[index] === this._context) {\n break;\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length;\n\n delegated.selectors.push(this.selector);\n delegated.contexts .push(this._context);\n delegated.listeners.push([]);\n }\n\n // keep listener and useCapture flag\n delegated.listeners[index].push([listener, useCapture]);\n }\n else {\n events.add(this._element, eventType, listener, useCapture);\n }\n\n return this;\n },\n\n /*\\\n * Interactable.off\n [ method ]\n *\n * Removes an InteractEvent or DOM event listener\n *\n - eventType (string | array | object) The types of events that were listened for\n - listener (function) The listener function to be removed\n - useCapture (boolean) #optional useCapture flag for removeEventListener\n = (object) This Interactable\n \\*/\n off: function (eventType, listener, useCapture) {\n var i;\n\n if (isString(eventType) && eventType.search(' ') !== -1) {\n eventType = eventType.trim().split(/ +/);\n }\n\n if (isArray(eventType)) {\n for (i = 0; i < eventType.length; i++) {\n this.off(eventType[i], listener, useCapture);\n }\n\n return this;\n }\n\n if (isObject(eventType)) {\n for (var prop in eventType) {\n this.off(prop, eventType[prop], listener);\n }\n\n return this;\n }\n\n var eventList,\n index = -1;\n\n // convert to boolean\n useCapture = useCapture? true: false;\n\n if (eventType === 'wheel') {\n eventType = wheelEvent;\n }\n\n // if it is an action event type\n if (contains(eventTypes, eventType)) {\n eventList = this._iEvents[eventType];\n\n if (eventList && (index = indexOf(eventList, listener)) !== -1) {\n this._iEvents[eventType].splice(index, 1);\n }\n }\n // delegated event\n else if (this.selector) {\n var delegated = delegatedEvents[eventType],\n matchFound = false;\n\n if (!delegated) { return this; }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === this.selector\n && delegated.contexts[index] === this._context) {\n\n var listeners = delegated.listeners[index];\n\n // each item of the listeners array is an array: [function, useCaptureFlag]\n for (i = listeners.length - 1; i >= 0; i--) {\n var fn = listeners[i][0],\n useCap = listeners[i][1];\n\n // check if the listener functions and useCapture flags match\n if (fn === listener && useCap === useCapture) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1);\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1);\n delegated.contexts .splice(index, 1);\n delegated.listeners.splice(index, 1);\n\n // remove delegate function from context\n events.remove(this._context, eventType, delegateListener);\n events.remove(this._context, eventType, delegateUseCapture, true);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[eventType] = null;\n }\n }\n\n // only remove one listener\n matchFound = true;\n break;\n }\n }\n\n if (matchFound) { break; }\n }\n }\n }\n // remove listener from this Interatable's element\n else {\n events.remove(this._element, eventType, listener, useCapture);\n }\n\n return this;\n },\n\n /*\\\n * Interactable.set\n [ method ]\n *\n * Reset the options of this Interactable\n - options (object) The new settings to apply\n = (object) This Interactable\n \\*/\n set: function (options) {\n if (!isObject(options)) {\n options = {};\n }\n\n this.options = extend({}, defaultOptions.base);\n\n var i,\n actions = ['drag', 'drop', 'resize', 'gesture'],\n methods = ['draggable', 'dropzone', 'resizable', 'gesturable'],\n perActions = extend(extend({}, defaultOptions.perAction), options[action] || {});\n\n for (i = 0; i < actions.length; i++) {\n var action = actions[i];\n\n this.options[action] = extend({}, defaultOptions[action]);\n\n this.setPerAction(action, perActions);\n\n this[methods[i]](options[action]);\n }\n\n var settings = [\n 'accept', 'actionChecker', 'allowFrom', 'deltaSource',\n 'dropChecker', 'ignoreFrom', 'origin', 'preventDefault',\n 'rectChecker', 'styleCursor'\n ];\n\n for (i = 0, len = settings.length; i < len; i++) {\n var setting = settings[i];\n\n this.options[setting] = defaultOptions.base[setting];\n\n if (setting in options) {\n this[setting](options[setting]);\n }\n }\n\n return this;\n },\n\n /*\\\n * Interactable.unset\n [ method ]\n *\n * Remove this interactable from the list of interactables and remove\n * it's drag, drop, resize and gesture capabilities\n *\n = (object) @interact\n \\*/\n unset: function () {\n events.remove(this._element, 'all');\n\n if (!isString(this.selector)) {\n events.remove(this, 'all');\n if (this.options.styleCursor) {\n this._element.style.cursor = '';\n }\n }\n else {\n // remove delegated events\n for (var type in delegatedEvents) {\n var delegated = delegatedEvents[type];\n\n for (var i = 0; i < delegated.selectors.length; i++) {\n if (delegated.selectors[i] === this.selector\n && delegated.contexts[i] === this._context) {\n\n delegated.selectors.splice(i, 1);\n delegated.contexts .splice(i, 1);\n delegated.listeners.splice(i, 1);\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null;\n }\n }\n\n events.remove(this._context, type, delegateListener);\n events.remove(this._context, type, delegateUseCapture, true);\n\n break;\n }\n }\n }\n\n this.dropzone(false);\n\n interactables.splice(indexOf(interactables, this), 1);\n\n return interact;\n }\n };\n\n function warnOnce (method, message) {\n var warned = false;\n\n return function () {\n if (!warned) {\n window.console.warn(message);\n warned = true;\n }\n\n return method.apply(this, arguments);\n };\n }\n\n Interactable.prototype.snap = warnOnce(Interactable.prototype.snap,\n 'Interactable#snap is deprecated. See the new documentation for snapping at http://interactjs.io/docs/snapping');\n Interactable.prototype.restrict = warnOnce(Interactable.prototype.restrict,\n 'Interactable#restrict is deprecated. See the new documentation for resticting at http://interactjs.io/docs/restriction');\n Interactable.prototype.inertia = warnOnce(Interactable.prototype.inertia,\n 'Interactable#inertia is deprecated. See the new documentation for inertia at http://interactjs.io/docs/inertia');\n Interactable.prototype.autoScroll = warnOnce(Interactable.prototype.autoScroll,\n 'Interactable#autoScroll is deprecated. See the new documentation for autoScroll at http://interactjs.io/docs/#autoscroll');\n Interactable.prototype.squareResize = warnOnce(Interactable.prototype.squareResize,\n 'Interactable#squareResize is deprecated. See http://interactjs.io/docs/#resize-square');\n\n Interactable.prototype.accept = warnOnce(Interactable.prototype.accept,\n 'Interactable#accept is deprecated. use Interactable#dropzone({ accept: target }) instead');\n Interactable.prototype.dropChecker = warnOnce(Interactable.prototype.dropChecker,\n 'Interactable#dropChecker is deprecated. use Interactable#dropzone({ dropChecker: checkerFunction }) instead');\n Interactable.prototype.context = warnOnce(Interactable.prototype.context,\n 'Interactable#context as a method is deprecated. It will soon be a DOM Node instead');\n\n /*\\\n * interact.isSet\n [ method ]\n *\n * Check if an element has been set\n - element (Element) The Element being searched for\n = (boolean) Indicates if the element or CSS selector was previously passed to interact\n \\*/\n interact.isSet = function(element, options) {\n return interactables.indexOfElement(element, options && options.context) !== -1;\n };\n\n /*\\\n * interact.on\n [ method ]\n *\n * Adds a global listener for an InteractEvent or adds a DOM event to\n * `document`\n *\n - type (string | array | object) The types of events to listen for\n - listener (function) The function to be called on the given event(s)\n - useCapture (boolean) #optional useCapture flag for addEventListener\n = (object) interact\n \\*/\n interact.on = function (type, listener, useCapture) {\n if (isString(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (isArray(type)) {\n for (var i = 0; i < type.length; i++) {\n interact.on(type[i], listener, useCapture);\n }\n\n return interact;\n }\n\n if (isObject(type)) {\n for (var prop in type) {\n interact.on(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (contains(eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener];\n }\n else {\n globalEvents[type].push(listener);\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(document, type, listener, useCapture);\n }\n\n return interact;\n };\n\n /*\\\n * interact.off\n [ method ]\n *\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n - type (string | array | object) The types of events that were listened for\n - listener (function) The listener function to be removed\n - useCapture (boolean) #optional useCapture flag for removeEventListener\n = (object) interact\n \\*/\n interact.off = function (type, listener, useCapture) {\n if (isString(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/);\n }\n\n if (isArray(type)) {\n for (var i = 0; i < type.length; i++) {\n interact.off(type[i], listener, useCapture);\n }\n\n return interact;\n }\n\n if (isObject(type)) {\n for (var prop in type) {\n interact.off(prop, type[prop], listener);\n }\n\n return interact;\n }\n\n if (!contains(eventTypes, type)) {\n events.remove(document, type, listener, useCapture);\n }\n else {\n var index;\n\n if (type in globalEvents\n && (index = indexOf(globalEvents[type], listener)) !== -1) {\n globalEvents[type].splice(index, 1);\n }\n }\n\n return interact;\n };\n\n /*\\\n * interact.enableDragging\n [ method ]\n *\n * Deprecated.\n *\n * Returns or sets whether dragging is enabled for any Interactables\n *\n - newValue (boolean) #optional `true` to allow the action; `false` to disable action for all Interactables\n = (boolean | object) The current setting or interact\n \\*/\n interact.enableDragging = warnOnce(function (newValue) {\n if (newValue !== null && newValue !== undefined) {\n actionIsEnabled.drag = newValue;\n\n return interact;\n }\n return actionIsEnabled.drag;\n }, 'interact.enableDragging is deprecated and will soon be removed.');\n\n /*\\\n * interact.enableResizing\n [ method ]\n *\n * Deprecated.\n *\n * Returns or sets whether resizing is enabled for any Interactables\n *\n - newValue (boolean) #optional `true` to allow the action; `false` to disable action for all Interactables\n = (boolean | object) The current setting or interact\n \\*/\n interact.enableResizing = warnOnce(function (newValue) {\n if (newValue !== null && newValue !== undefined) {\n actionIsEnabled.resize = newValue;\n\n return interact;\n }\n return actionIsEnabled.resize;\n }, 'interact.enableResizing is deprecated and will soon be removed.');\n\n /*\\\n * interact.enableGesturing\n [ method ]\n *\n * Deprecated.\n *\n * Returns or sets whether gesturing is enabled for any Interactables\n *\n - newValue (boolean) #optional `true` to allow the action; `false` to disable action for all Interactables\n = (boolean | object) The current setting or interact\n \\*/\n interact.enableGesturing = warnOnce(function (newValue) {\n if (newValue !== null && newValue !== undefined) {\n actionIsEnabled.gesture = newValue;\n\n return interact;\n }\n return actionIsEnabled.gesture;\n }, 'interact.enableGesturing is deprecated and will soon be removed.');\n\n interact.eventTypes = eventTypes;\n\n /*\\\n * interact.debug\n [ method ]\n *\n * Returns debugging data\n = (object) An object with properties that outline the current state and expose internal functions and variables\n \\*/\n interact.debug = function () {\n var interaction = interactions[0] || new Interaction();\n\n return {\n interactions : interactions,\n target : interaction.target,\n dragging : interaction.dragging,\n resizing : interaction.resizing,\n gesturing : interaction.gesturing,\n prepared : interaction.prepared,\n matches : interaction.matches,\n matchElements : interaction.matchElements,\n\n prevCoords : interaction.prevCoords,\n startCoords : interaction.startCoords,\n\n pointerIds : interaction.pointerIds,\n pointers : interaction.pointers,\n addPointer : listeners.addPointer,\n removePointer : listeners.removePointer,\n recordPointer : listeners.recordPointer,\n\n snap : interaction.snapStatus,\n restrict : interaction.restrictStatus,\n inertia : interaction.inertiaStatus,\n\n downTime : interaction.downTimes[0],\n downEvent : interaction.downEvent,\n downPointer : interaction.downPointer,\n prevEvent : interaction.prevEvent,\n\n Interactable : Interactable,\n interactables : interactables,\n pointerIsDown : interaction.pointerIsDown,\n defaultOptions : defaultOptions,\n defaultActionChecker : defaultActionChecker,\n\n actionCursors : actionCursors,\n dragMove : listeners.dragMove,\n resizeMove : listeners.resizeMove,\n gestureMove : listeners.gestureMove,\n pointerUp : listeners.pointerUp,\n pointerDown : listeners.pointerDown,\n pointerMove : listeners.pointerMove,\n pointerHover : listeners.pointerHover,\n\n eventTypes : eventTypes,\n\n events : events,\n globalEvents : globalEvents,\n delegatedEvents : delegatedEvents,\n\n prefixedPropREs : prefixedPropREs\n };\n };\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerAverage;\n interact.getTouchBBox = touchBBox;\n interact.getTouchDistance = touchDistance;\n interact.getTouchAngle = touchAngle;\n\n interact.getElementRect = getElementRect;\n interact.getElementClientRect = getElementClientRect;\n interact.matchesSelector = matchesSelector;\n interact.closest = closest;\n\n /*\\\n * interact.margin\n [ method ]\n *\n * Deprecated. Use `interact(target).resizable({ margin: number });` instead.\n * Returns or sets the margin for autocheck resizing used in\n * @Interactable.getAction. That is the distance from the bottom and right\n * edges of an element clicking in which will start resizing\n *\n - newValue (number) #optional\n = (number | interact) The current margin value or interact\n \\*/\n interact.margin = warnOnce(function (newvalue) {\n if (isNumber(newvalue)) {\n margin = newvalue;\n\n return interact;\n }\n return margin;\n },\n 'interact.margin is deprecated. Use interact(target).resizable({ margin: number }); instead.') ;\n\n /*\\\n * interact.supportsTouch\n [ method ]\n *\n = (boolean) Whether or not the browser supports touch input\n \\*/\n interact.supportsTouch = function () {\n return supportsTouch;\n };\n\n /*\\\n * interact.supportsPointerEvent\n [ method ]\n *\n = (boolean) Whether or not the browser supports PointerEvents\n \\*/\n interact.supportsPointerEvent = function () {\n return supportsPointerEvent;\n };\n\n /*\\\n * interact.stop\n [ method ]\n *\n * Cancels all interactions (end events are not fired)\n *\n - event (Event) An event on which to call preventDefault()\n = (object) interact\n \\*/\n interact.stop = function (event) {\n for (var i = interactions.length - 1; i >= 0; i--) {\n interactions[i].stop(event);\n }\n\n return interact;\n };\n\n /*\\\n * interact.dynamicDrop\n [ method ]\n *\n * Returns or sets whether the dimensions of dropzone elements are\n * calculated on every dragmove or only on dragstart for the default\n * dropChecker\n *\n - newValue (boolean) #optional True to check on each move. False to check only before start\n = (boolean | interact) The current setting or interact\n \\*/\n interact.dynamicDrop = function (newValue) {\n if (isBool(newValue)) {\n //if (dragging && dynamicDrop !== newValue && !newValue) {\n //calcRects(dropzones);\n //}\n\n dynamicDrop = newValue;\n\n return interact;\n }\n return dynamicDrop;\n };\n\n /*\\\n * interact.pointerMoveTolerance\n [ method ]\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n - newValue (number) #optional The movement from the start position must be greater than this value\n = (number | Interactable) The current setting or interact\n \\*/\n interact.pointerMoveTolerance = function (newValue) {\n if (isNumber(newValue)) {\n pointerMoveTolerance = newValue;\n\n return this;\n }\n\n return pointerMoveTolerance;\n };\n\n /*\\\n * interact.maxInteractions\n [ method ]\n **\n * Returns or sets the maximum number of concurrent interactions allowed.\n * By default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables\n * and elements, you need to enable it in the draggable, resizable and\n * gesturable `'max'` and `'maxPerElement'` options.\n **\n - newValue (number) #optional Any number. newValue <= 0 means no interactions.\n \\*/\n interact.maxInteractions = function (newValue) {\n if (isNumber(newValue)) {\n maxInteractions = newValue;\n\n return this;\n }\n\n return maxInteractions;\n };\n\n interact.createSnapGrid = function (grid) {\n return function (x, y) {\n var offsetX = 0,\n offsetY = 0;\n\n if (isObject(grid.offset)) {\n offsetX = grid.offset.x;\n offsetY = grid.offset.y;\n }\n\n var gridx = Math.round((x - offsetX) / grid.x),\n gridy = Math.round((y - offsetY) / grid.y),\n\n newX = gridx * grid.x + offsetX,\n newY = gridy * grid.y + offsetY;\n\n return {\n x: newX,\n y: newY,\n range: grid.range\n };\n };\n };\n\n function endAllInteractions (event) {\n for (var i = 0; i < interactions.length; i++) {\n interactions[i].pointerEnd(event, event);\n }\n }\n\n function listenToDocument (doc) {\n if (contains(documents, doc)) { return; }\n\n var win = doc.defaultView || doc.parentWindow;\n\n // add delegate event listener\n for (var eventType in delegatedEvents) {\n events.add(doc, eventType, delegateListener);\n events.add(doc, eventType, delegateUseCapture, true);\n }\n\n if (supportsPointerEvent) {\n if (PointerEvent === win.MSPointerEvent) {\n pEventTypes = {\n up: 'MSPointerUp', down: 'MSPointerDown', over: 'mouseover',\n out: 'mouseout', move: 'MSPointerMove', cancel: 'MSPointerCancel' };\n }\n else {\n pEventTypes = {\n up: 'pointerup', down: 'pointerdown', over: 'pointerover',\n out: 'pointerout', move: 'pointermove', cancel: 'pointercancel' };\n }\n\n events.add(doc, pEventTypes.down , listeners.selectorDown );\n events.add(doc, pEventTypes.move , listeners.pointerMove );\n events.add(doc, pEventTypes.over , listeners.pointerOver );\n events.add(doc, pEventTypes.out , listeners.pointerOut );\n events.add(doc, pEventTypes.up , listeners.pointerUp );\n events.add(doc, pEventTypes.cancel, listeners.pointerCancel);\n\n // autoscroll\n events.add(doc, pEventTypes.move, listeners.autoScrollMove);\n }\n else {\n events.add(doc, 'mousedown', listeners.selectorDown);\n events.add(doc, 'mousemove', listeners.pointerMove );\n events.add(doc, 'mouseup' , listeners.pointerUp );\n events.add(doc, 'mouseover', listeners.pointerOver );\n events.add(doc, 'mouseout' , listeners.pointerOut );\n\n events.add(doc, 'touchstart' , listeners.selectorDown );\n events.add(doc, 'touchmove' , listeners.pointerMove );\n events.add(doc, 'touchend' , listeners.pointerUp );\n events.add(doc, 'touchcancel', listeners.pointerCancel);\n\n // autoscroll\n events.add(doc, 'mousemove', listeners.autoScrollMove);\n events.add(doc, 'touchmove', listeners.autoScrollMove);\n }\n\n events.add(win, 'blur', endAllInteractions);\n\n try {\n if (win.frameElement) {\n var parentDoc = win.frameElement.ownerDocument,\n parentWindow = parentDoc.defaultView;\n\n events.add(parentDoc , 'mouseup' , listeners.pointerEnd);\n events.add(parentDoc , 'touchend' , listeners.pointerEnd);\n events.add(parentDoc , 'touchcancel' , listeners.pointerEnd);\n events.add(parentDoc , 'pointerup' , listeners.pointerEnd);\n events.add(parentDoc , 'MSPointerUp' , listeners.pointerEnd);\n events.add(parentWindow, 'blur' , endAllInteractions );\n }\n }\n catch (error) {\n interact.windowParentError = error;\n }\n\n // prevent native HTML5 drag on interact.js target elements\n events.add(doc, 'dragstart', function (event) {\n for (var i = 0; i < interactions.length; i++) {\n var interaction = interactions[i];\n\n if (interaction.element\n && (interaction.element === event.target\n || nodeContains(interaction.element, event.target))) {\n\n interaction.checkAndPreventDefault(event, interaction.target, interaction.element);\n return;\n }\n }\n });\n\n if (events.useAttachEvent) {\n // For IE's lack of Event#preventDefault\n events.add(doc, 'selectstart', function (event) {\n var interaction = interactions[0];\n\n if (interaction.currentAction()) {\n interaction.checkAndPreventDefault(event);\n }\n });\n\n // For IE's bad dblclick event sequence\n events.add(doc, 'dblclick', doOnInteractions('ie8Dblclick'));\n }\n\n documents.push(doc);\n }\n\n listenToDocument(document);\n\n function indexOf (array, target) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n\n return -1;\n }\n\n function contains (array, target) {\n return indexOf(array, target) !== -1;\n }\n\n function matchesSelector (element, selector, nodeList) {\n if (ie8MatchesSelector) {\n return ie8MatchesSelector(element, selector, nodeList);\n }\n\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (window !== realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ');\n }\n\n return element[prefixedMatchesSelector](selector);\n }\n\n function matchesUpTo (element, selector, limit) {\n while (isElement(element)) {\n if (matchesSelector(element, selector)) {\n return true;\n }\n\n element = parentElement(element);\n\n if (element === limit) {\n return matchesSelector(element, selector);\n }\n }\n\n return false;\n }\n\n // For IE8's lack of an Element#matchesSelector\n // taken from http://tanalin.com/en/blog/2012/12/matches-selector-ie8/ and modified\n if (!(prefixedMatchesSelector in Element.prototype) || !isFunction(Element.prototype[prefixedMatchesSelector])) {\n ie8MatchesSelector = function (element, selector, elems) {\n elems = elems || element.parentNode.querySelectorAll(selector);\n\n for (var i = 0, len = elems.length; i < len; i++) {\n if (elems[i] === element) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n // requestAnimationFrame polyfill\n (function() {\n var lastTime = 0,\n vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for(var x = 0; x < vendors.length && !realWindow.requestAnimationFrame; ++x) {\n reqFrame = realWindow[vendors[x]+'RequestAnimationFrame'];\n cancelFrame = realWindow[vendors[x]+'CancelAnimationFrame'] || realWindow[vendors[x]+'CancelRequestAnimationFrame'];\n }\n\n if (!reqFrame) {\n reqFrame = function(callback) {\n var currTime = new Date().getTime(),\n timeToCall = Math.max(0, 16 - (currTime - lastTime)),\n id = setTimeout(function() { callback(currTime + timeToCall); },\n timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n }\n\n if (!cancelFrame) {\n cancelFrame = function(id) {\n clearTimeout(id);\n };\n }\n }());\n\n /* global exports: true, module, define */\n\n // http://documentcloud.github.io/underscore/docs/underscore.html#section-11\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = interact;\n }\n exports.interact = interact;\n }\n // AMD\n else if (typeof define === 'function' && define.amd) {\n define('interact', function() {\n return interact;\n });\n }\n else {\n realWindow.interact = interact;\n }\n\n} (typeof window === 'undefined'? undefined : window));\n\n/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* global ngTouchClickDirectiveFactory: false,\n */\n\n/**\n * @ngdoc module\n * @name ngTouch\n * @description\n *\n * # ngTouch\n *\n * The `ngTouch` module provides touch events and other helpers for touch-enabled devices.\n * The implementation is based on jQuery Mobile touch event handling\n * ([jquerymobile.com](http://jquerymobile.com/)).\n *\n *\n * See {@link ngTouch.$swipe `$swipe`} for usage.\n *\n *
      \n *\n */\n\n// define ngTouch module\n/* global -ngTouch */\nvar ngTouch = angular.module('ngTouch', []);\n\nngTouch.provider('$touch', $TouchProvider);\n\nfunction nodeName_(element) {\n return angular.lowercase(element.nodeName || (element[0] && element[0].nodeName));\n}\n\n/**\n * @ngdoc provider\n * @name $touchProvider\n *\n * @description\n * The `$touchProvider` allows enabling / disabling {@link ngTouch.ngClick ngTouch's ngClick directive}.\n */\n$TouchProvider.$inject = ['$provide', '$compileProvider'];\nfunction $TouchProvider($provide, $compileProvider) {\n\n /**\n * @ngdoc method\n * @name $touchProvider#ngClickOverrideEnabled\n *\n * @param {boolean=} enabled update the ngClickOverrideEnabled state if provided, otherwise just return the\n * current ngClickOverrideEnabled state\n * @returns {*} current value if used as getter or itself (chaining) if used as setter\n *\n * @kind function\n *\n * @description\n * Call this method to enable/disable {@link ngTouch.ngClick ngTouch's ngClick directive}. If enabled,\n * the default ngClick directive will be replaced by a version that eliminates the 300ms delay for\n * click events on browser for touch-devices.\n *\n * The default is `false`.\n *\n */\n var ngClickOverrideEnabled = false;\n var ngClickDirectiveAdded = false;\n this.ngClickOverrideEnabled = function(enabled) {\n if (angular.isDefined(enabled)) {\n\n if (enabled && !ngClickDirectiveAdded) {\n ngClickDirectiveAdded = true;\n\n // Use this to identify the correct directive in the delegate\n ngTouchClickDirectiveFactory.$$moduleName = 'ngTouch';\n $compileProvider.directive('ngClick', ngTouchClickDirectiveFactory);\n\n $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n if (ngClickOverrideEnabled) {\n // drop the default ngClick directive\n $delegate.shift();\n } else {\n // drop the ngTouch ngClick directive if the override has been re-disabled (because\n // we cannot de-register added directives)\n var i = $delegate.length - 1;\n while (i >= 0) {\n if ($delegate[i].$$moduleName === 'ngTouch') {\n $delegate.splice(i, 1);\n break;\n }\n i--;\n }\n }\n\n return $delegate;\n }]);\n }\n\n ngClickOverrideEnabled = enabled;\n return this;\n }\n\n return ngClickOverrideEnabled;\n };\n\n /**\n * @ngdoc service\n * @name $touch\n * @kind object\n *\n * @description\n * Provides the {@link ngTouch.$touch#ngClickOverrideEnabled `ngClickOverrideEnabled`} method.\n *\n */\n this.$get = function() {\n return {\n /**\n * @ngdoc method\n * @name $touch#ngClickOverrideEnabled\n *\n * @returns {*} current value of `ngClickOverrideEnabled` set in the {@link ngTouch.$touchProvider $touchProvider},\n * i.e. if {@link ngTouch.ngClick ngTouch's ngClick} directive is enabled.\n *\n * @kind function\n */\n ngClickOverrideEnabled: function() {\n return ngClickOverrideEnabled;\n }\n };\n };\n\n}\n\n/* global ngTouch: false */\n\n /**\n * @ngdoc service\n * @name $swipe\n *\n * @description\n * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe\n * behavior, to make implementing swipe-related directives more convenient.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`.\n *\n * # Usage\n * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element\n * which is to be watched for swipes, and an object with four handler functions. See the\n * documentation for `bind` below.\n */\n\nngTouch.factory('$swipe', [function() {\n // The total distance in any direction before we make the call on swipe vs. scroll.\n var MOVE_BUFFER_RADIUS = 10;\n\n var POINTER_EVENTS = {\n 'mouse': {\n start: 'mousedown',\n move: 'mousemove',\n end: 'mouseup'\n },\n 'touch': {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n cancel: 'touchcancel'\n },\n 'pointer': {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n cancel: 'pointercancel'\n }\n };\n\n function getCoordinates(event) {\n var originalEvent = event.originalEvent || event;\n var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0];\n\n return {\n x: e.clientX,\n y: e.clientY\n };\n }\n\n function getEvents(pointerTypes, eventType) {\n var res = [];\n angular.forEach(pointerTypes, function(pointerType) {\n var eventName = POINTER_EVENTS[pointerType][eventType];\n if (eventName) {\n res.push(eventName);\n }\n });\n return res.join(' ');\n }\n\n return {\n /**\n * @ngdoc method\n * @name $swipe#bind\n *\n * @description\n * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an\n * object containing event handlers.\n * The pointer types that should be used can be specified via the optional\n * third argument, which is an array of strings `'mouse'`, `'touch'` and `'pointer'`. By default,\n * `$swipe` will listen for `mouse`, `touch` and `pointer` events.\n *\n * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`\n * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }` and the raw\n * `event`. `cancel` receives the raw `event` as its single parameter.\n *\n * `start` is called on either `mousedown`, `touchstart` or `pointerdown`. After this event, `$swipe` is\n * watching for `touchmove`, `mousemove` or `pointermove` events. These events are ignored until the total\n * distance moved in either dimension exceeds a small threshold.\n *\n * Once this threshold is exceeded, either the horizontal or vertical delta is greater.\n * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.\n * - If the vertical distance is greater, this is a scroll, and we let the browser take over.\n * A `cancel` event is sent.\n *\n * `move` is called on `mousemove`, `touchmove` and `pointermove` after the above logic has determined that\n * a swipe is in progress.\n *\n * `end` is called when a swipe is successfully completed with a `touchend`, `mouseup` or `pointerup`.\n *\n * `cancel` is called either on a `touchcancel` or `pointercancel` from the browser, or when we begin scrolling\n * as described above.\n *\n */\n bind: function(element, eventHandlers, pointerTypes) {\n // Absolute total movement, used to control swipe vs. scroll.\n var totalX, totalY;\n // Coordinates of the start position.\n var startCoords;\n // Last event's position.\n var lastPos;\n // Whether a swipe is active.\n var active = false;\n\n pointerTypes = pointerTypes || ['mouse', 'touch', 'pointer'];\n element.on(getEvents(pointerTypes, 'start'), function(event) {\n startCoords = getCoordinates(event);\n active = true;\n totalX = 0;\n totalY = 0;\n lastPos = startCoords;\n eventHandlers['start'] && eventHandlers['start'](startCoords, event);\n });\n var events = getEvents(pointerTypes, 'cancel');\n if (events) {\n element.on(events, function(event) {\n active = false;\n eventHandlers['cancel'] && eventHandlers['cancel'](event);\n });\n }\n\n element.on(getEvents(pointerTypes, 'move'), function(event) {\n if (!active) return;\n\n // Android will send a touchcancel if it thinks we're starting to scroll.\n // So when the total distance (+ or - or both) exceeds 10px in either direction,\n // we either:\n // - On totalX > totalY, we send preventDefault() and treat this as a swipe.\n // - On totalY > totalX, we let the browser handle it as a scroll.\n\n if (!startCoords) return;\n var coords = getCoordinates(event);\n\n totalX += Math.abs(coords.x - lastPos.x);\n totalY += Math.abs(coords.y - lastPos.y);\n\n lastPos = coords;\n\n if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {\n return;\n }\n\n // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.\n if (totalY > totalX) {\n // Allow native scrolling to take over.\n active = false;\n eventHandlers['cancel'] && eventHandlers['cancel'](event);\n return;\n } else {\n // Prevent the browser from scrolling.\n event.preventDefault();\n eventHandlers['move'] && eventHandlers['move'](coords, event);\n }\n });\n\n element.on(getEvents(pointerTypes, 'end'), function(event) {\n if (!active) return;\n active = false;\n eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);\n });\n }\n };\n}]);\n\n/* global ngTouch: false,\n nodeName_: false\n*/\n\n/**\n * @ngdoc directive\n * @name ngClick\n * @deprecated\n *\n * @description\n *
      \n * **DEPRECATION NOTICE**: Beginning with Angular 1.5, this directive is deprecated and by default **disabled**.\n * The directive will receive no further support and might be removed from future releases.\n * If you need the directive, you can enable it with the {@link ngTouch.$touchProvider $touchProvider#ngClickOverrideEnabled}\n * function. We also recommend that you migrate to [FastClick](https://github.com/ftlabs/fastclick).\n * To learn more about the 300ms delay, this [Telerik article](http://developer.telerik.com/featured/300-ms-click-delay-ios-8/)\n * gives a good overview.\n *
      \n * A more powerful replacement for the default ngClick designed to be used on touchscreen\n * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending\n * the click event. This version handles them immediately, and then prevents the\n * following click event from propagating.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * This directive can fall back to using an ordinary click event, and so works on desktop\n * browsers as well as mobile.\n *\n * This directive also sets the CSS class `ng-click-active` while the element is being held\n * down (by a mouse click or touch) so you can restyle the depressed element if you wish.\n *\n * @element ANY\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate\n * upon tap. (Event object is available as `$event`)\n *\n * @example\n \n \n \n count: {{ count }}\n \n \n angular.module('ngClickExample', ['ngTouch']);\n \n \n */\n\nvar ngTouchClickDirectiveFactory = ['$parse', '$timeout', '$rootElement',\n function($parse, $timeout, $rootElement) {\n var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.\n var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.\n var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click\n var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.\n\n var ACTIVE_CLASS_NAME = 'ng-click-active';\n var lastPreventedTime;\n var touchCoordinates;\n var lastLabelClickCoordinates;\n\n\n // TAP EVENTS AND GHOST CLICKS\n //\n // Why tap events?\n // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're\n // double-tapping, and then fire a click event.\n //\n // This delay sucks and makes mobile apps feel unresponsive.\n // So we detect touchstart, touchcancel and touchend ourselves and determine when\n // the user has tapped on something.\n //\n // What happens when the browser then generates a click event?\n // The browser, of course, also detects the tap and fires a click after a delay. This results in\n // tapping/clicking twice. We do \"clickbusting\" to prevent it.\n //\n // How does it work?\n // We attach global touchstart and click handlers, that run during the capture (early) phase.\n // So the sequence for a tap is:\n // - global touchstart: Sets an \"allowable region\" at the point touched.\n // - element's touchstart: Starts a touch\n // (- touchcancel ends the touch, no click follows)\n // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold\n // too long) and fires the user's tap handler. The touchend also calls preventGhostClick().\n // - preventGhostClick() removes the allowable region the global touchstart created.\n // - The browser generates a click event.\n // - The global click handler catches the click, and checks whether it was in an allowable region.\n // - If preventGhostClick was called, the region will have been removed, the click is busted.\n // - If the region is still there, the click proceeds normally. Therefore clicks on links and\n // other elements without ngTap on them work normally.\n //\n // This is an ugly, terrible hack!\n // Yeah, tell me about it. The alternatives are using the slow click events, or making our users\n // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular\n // encapsulates this ugly logic away from the user.\n //\n // Why not just put click handlers on the element?\n // We do that too, just to be sure. If the tap event caused the DOM to change,\n // it is possible another element is now in that position. To take account for these possibly\n // distinct elements, the handlers are global and care only about coordinates.\n\n // Checks if the coordinates are close enough to be within the region.\n function hit(x1, y1, x2, y2) {\n return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;\n }\n\n // Checks a list of allowable regions against a click location.\n // Returns true if the click should be allowed.\n // Splices out the allowable region from the list after it has been used.\n function checkAllowableRegions(touchCoordinates, x, y) {\n for (var i = 0; i < touchCoordinates.length; i += 2) {\n if (hit(touchCoordinates[i], touchCoordinates[i + 1], x, y)) {\n touchCoordinates.splice(i, i + 2);\n return true; // allowable region\n }\n }\n return false; // No allowable region; bust it.\n }\n\n // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick\n // was called recently.\n function onClick(event) {\n if (Date.now() - lastPreventedTime > PREVENT_DURATION) {\n return; // Too old.\n }\n\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label\n // and on the input element). Depending on the exact browser, this second click we don't want\n // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label\n // click event\n if (x < 1 && y < 1) {\n return; // offscreen\n }\n if (lastLabelClickCoordinates &&\n lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {\n return; // input click triggered by label click\n }\n // reset label click coordinates on first subsequent click\n if (lastLabelClickCoordinates) {\n lastLabelClickCoordinates = null;\n }\n // remember label click coordinates to prevent click busting of trigger click event on input\n if (nodeName_(event.target) === 'label') {\n lastLabelClickCoordinates = [x, y];\n }\n\n // Look for an allowable region containing this click.\n // If we find one, that means it was created by touchstart and not removed by\n // preventGhostClick, so we don't bust it.\n if (checkAllowableRegions(touchCoordinates, x, y)) {\n return;\n }\n\n // If we didn't find an allowable region, bust the click.\n event.stopPropagation();\n event.preventDefault();\n\n // Blur focused form elements\n event.target && event.target.blur && event.target.blur();\n }\n\n\n // Global touchstart handler that creates an allowable region for a click event.\n // This allowable region can be removed by preventGhostClick if we want to bust it.\n function onTouchStart(event) {\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n touchCoordinates.push(x, y);\n\n $timeout(function() {\n // Remove the allowable region.\n for (var i = 0; i < touchCoordinates.length; i += 2) {\n if (touchCoordinates[i] == x && touchCoordinates[i + 1] == y) {\n touchCoordinates.splice(i, i + 2);\n return;\n }\n }\n }, PREVENT_DURATION, false);\n }\n\n // On the first call, attaches some event handlers. Then whenever it gets called, it creates a\n // zone around the touchstart where clicks will get busted.\n function preventGhostClick(x, y) {\n if (!touchCoordinates) {\n $rootElement[0].addEventListener('click', onClick, true);\n $rootElement[0].addEventListener('touchstart', onTouchStart, true);\n touchCoordinates = [];\n }\n\n lastPreventedTime = Date.now();\n\n checkAllowableRegions(touchCoordinates, x, y);\n }\n\n // Actual linking function.\n return function(scope, element, attr) {\n var clickHandler = $parse(attr.ngClick),\n tapping = false,\n tapElement, // Used to blur the element after a tap.\n startTime, // Used to check if the tap was held too long.\n touchStartX,\n touchStartY;\n\n function resetState() {\n tapping = false;\n element.removeClass(ACTIVE_CLASS_NAME);\n }\n\n element.on('touchstart', function(event) {\n tapping = true;\n tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.\n // Hack for Safari, which can target text nodes instead of containers.\n if (tapElement.nodeType == 3) {\n tapElement = tapElement.parentNode;\n }\n\n element.addClass(ACTIVE_CLASS_NAME);\n\n startTime = Date.now();\n\n // Use jQuery originalEvent\n var originalEvent = event.originalEvent || event;\n var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n var e = touches[0];\n touchStartX = e.clientX;\n touchStartY = e.clientY;\n });\n\n element.on('touchcancel', function(event) {\n resetState();\n });\n\n element.on('touchend', function(event) {\n var diff = Date.now() - startTime;\n\n // Use jQuery originalEvent\n var originalEvent = event.originalEvent || event;\n var touches = (originalEvent.changedTouches && originalEvent.changedTouches.length) ?\n originalEvent.changedTouches :\n ((originalEvent.touches && originalEvent.touches.length) ? originalEvent.touches : [originalEvent]);\n var e = touches[0];\n var x = e.clientX;\n var y = e.clientY;\n var dist = Math.sqrt(Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2));\n\n if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {\n // Call preventGhostClick so the clickbuster will catch the corresponding click.\n preventGhostClick(x, y);\n\n // Blur the focused element (the button, probably) before firing the callback.\n // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.\n // I couldn't get anything to work reliably on Android Chrome.\n if (tapElement) {\n tapElement.blur();\n }\n\n if (!angular.isDefined(attr.disabled) || attr.disabled === false) {\n element.triggerHandler('click', [event]);\n }\n }\n\n resetState();\n });\n\n // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n // something else nearby.\n element.onclick = function(event) { };\n\n // Actual click handler.\n // There are three different kinds of clicks, only two of which reach this point.\n // - On desktop browsers without touch events, their clicks will always come here.\n // - On mobile browsers, the simulated \"fast\" click will call this.\n // - But the browser's follow-up slow click will be \"busted\" before it reaches this handler.\n // Therefore it's safe to use this directive on both mobile and desktop.\n element.on('click', function(event, touchend) {\n scope.$apply(function() {\n clickHandler(scope, {$event: (touchend || event)});\n });\n });\n\n element.on('mousedown', function(event) {\n element.addClass(ACTIVE_CLASS_NAME);\n });\n\n element.on('mousemove mouseup', function(event) {\n element.removeClass(ACTIVE_CLASS_NAME);\n });\n\n };\n}];\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngSwipeLeft\n *\n * @description\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\n * A leftward swipe is a quick, right-to-left slide of the finger.\n * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to\n * the `ng-swipe-left` or `ng-swipe-right` DOM Element.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate\n * upon left swipe. (Event object is available as `$event`)\n *\n * @example\n \n \n
      \n Some list content, like an email in the inbox\n
      \n
      \n \n \n
      \n
      \n \n angular.module('ngSwipeLeftExample', ['ngTouch']);\n \n
      \n */\n\n/**\n * @ngdoc directive\n * @name ngSwipeRight\n *\n * @description\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\n * A rightward swipe is a quick, left-to-right slide of the finger.\n * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate\n * upon right swipe. (Event object is available as `$event`)\n *\n * @example\n \n \n
      \n Some list content, like an email in the inbox\n
      \n
      \n \n \n
      \n
      \n \n angular.module('ngSwipeRightExample', ['ngTouch']);\n \n
      \n */\n\nfunction makeSwipeDirective(directiveName, direction, eventName) {\n ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {\n // The maximum vertical delta for a swipe should be less than 75px.\n var MAX_VERTICAL_DISTANCE = 75;\n // Vertical distance should not be more than a fraction of the horizontal distance.\n var MAX_VERTICAL_RATIO = 0.3;\n // At least a 30px lateral motion is necessary for a swipe.\n var MIN_HORIZONTAL_DISTANCE = 30;\n\n return function(scope, element, attr) {\n var swipeHandler = $parse(attr[directiveName]);\n\n var startCoords, valid;\n\n function validSwipe(coords) {\n // Check that it's within the coordinates.\n // Absolute vertical distance must be within tolerances.\n // Horizontal distance, we take the current X - the starting X.\n // This is negative for leftward swipes and positive for rightward swipes.\n // After multiplying by the direction (-1 for left, +1 for right), legal swipes\n // (ie. same direction as the directive wants) will have a positive delta and\n // illegal ones a negative delta.\n // Therefore this delta must be positive, and larger than the minimum.\n if (!startCoords) return false;\n var deltaY = Math.abs(coords.y - startCoords.y);\n var deltaX = (coords.x - startCoords.x) * direction;\n return valid && // Short circuit for already-invalidated swipes.\n deltaY < MAX_VERTICAL_DISTANCE &&\n deltaX > 0 &&\n deltaX > MIN_HORIZONTAL_DISTANCE &&\n deltaY / deltaX < MAX_VERTICAL_RATIO;\n }\n\n var pointerTypes = ['touch'];\n if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {\n pointerTypes.push('mouse');\n }\n $swipe.bind(element, {\n 'start': function(coords, event) {\n startCoords = coords;\n valid = true;\n },\n 'cancel': function(event) {\n valid = false;\n },\n 'end': function(coords, event) {\n if (validSwipe(coords)) {\n scope.$apply(function() {\n element.triggerHandler(eventName);\n swipeHandler(scope, {$event: event});\n });\n }\n }\n }, pointerTypes);\n };\n }]);\n}\n\n// Left is negative X-coordinate, right is positive.\nmakeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');\nmakeSwipeDirective('ngSwipeRight', 1, 'swiperight');\n\n\n\n})(window, window.angular);\n\n/*!\n * ui-select\n * http://github.com/angular-ui/ui-select\n * Version: 0.19.3 - 2016-08-17T06:16:41.345Z\n * License: MIT\n */\n\n\n(function () { \n\"use strict\";\nvar KEY = {\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n HOME: 36,\n END: 35,\n BACKSPACE: 8,\n DELETE: 46,\n COMMAND: 91,\n\n MAP: { 91 : \"COMMAND\", 8 : \"BACKSPACE\" , 9 : \"TAB\" , 13 : \"ENTER\" , 16 : \"SHIFT\" , 17 : \"CTRL\" , 18 : \"ALT\" , 19 : \"PAUSEBREAK\" , 20 : \"CAPSLOCK\" , 27 : \"ESC\" , 32 : \"SPACE\" , 33 : \"PAGE_UP\", 34 : \"PAGE_DOWN\" , 35 : \"END\" , 36 : \"HOME\" , 37 : \"LEFT\" , 38 : \"UP\" , 39 : \"RIGHT\" , 40 : \"DOWN\" , 43 : \"+\" , 44 : \"PRINTSCREEN\" , 45 : \"INSERT\" , 46 : \"DELETE\", 48 : \"0\" , 49 : \"1\" , 50 : \"2\" , 51 : \"3\" , 52 : \"4\" , 53 : \"5\" , 54 : \"6\" , 55 : \"7\" , 56 : \"8\" , 57 : \"9\" , 59 : \";\", 61 : \"=\" , 65 : \"A\" , 66 : \"B\" , 67 : \"C\" , 68 : \"D\" , 69 : \"E\" , 70 : \"F\" , 71 : \"G\" , 72 : \"H\" , 73 : \"I\" , 74 : \"J\" , 75 : \"K\" , 76 : \"L\", 77 : \"M\" , 78 : \"N\" , 79 : \"O\" , 80 : \"P\" , 81 : \"Q\" , 82 : \"R\" , 83 : \"S\" , 84 : \"T\" , 85 : \"U\" , 86 : \"V\" , 87 : \"W\" , 88 : \"X\" , 89 : \"Y\" , 90 : \"Z\", 96 : \"0\" , 97 : \"1\" , 98 : \"2\" , 99 : \"3\" , 100 : \"4\" , 101 : \"5\" , 102 : \"6\" , 103 : \"7\" , 104 : \"8\" , 105 : \"9\", 106 : \"*\" , 107 : \"+\" , 109 : \"-\" , 110 : \".\" , 111 : \"/\", 112 : \"F1\" , 113 : \"F2\" , 114 : \"F3\" , 115 : \"F4\" , 116 : \"F5\" , 117 : \"F6\" , 118 : \"F7\" , 119 : \"F8\" , 120 : \"F9\" , 121 : \"F10\" , 122 : \"F11\" , 123 : \"F12\", 144 : \"NUMLOCK\" , 145 : \"SCROLLLOCK\" , 186 : \";\" , 187 : \"=\" , 188 : \",\" , 189 : \"-\" , 190 : \".\" , 191 : \"/\" , 192 : \"`\" , 219 : \"[\" , 220 : \"\\\\\" , 221 : \"]\" , 222 : \"'\"\n },\n\n isControl: function (e) {\n var k = e.which;\n switch (k) {\n case KEY.COMMAND:\n case KEY.SHIFT:\n case KEY.CTRL:\n case KEY.ALT:\n return true;\n }\n\n if (e.metaKey || e.ctrlKey || e.altKey) return true;\n\n return false;\n },\n isFunctionKey: function (k) {\n k = k.which ? k.which : k;\n return k >= 112 && k <= 123;\n },\n isVerticalMovement: function (k){\n return ~[KEY.UP, KEY.DOWN].indexOf(k);\n },\n isHorizontalMovement: function (k){\n return ~[KEY.LEFT,KEY.RIGHT,KEY.BACKSPACE,KEY.DELETE].indexOf(k);\n },\n toSeparator: function (k) {\n var sep = {ENTER:\"\\n\",TAB:\"\\t\",SPACE:\" \"}[k];\n if (sep) return sep;\n // return undefined for special keys other than enter, tab or space.\n // no way to use them to cut strings.\n return KEY[k] ? undefined : k;\n }\n };\n\n/**\n * Add querySelectorAll() to jqLite.\n *\n * jqLite find() is limited to lookups by tag name.\n * TODO This will change with future versions of AngularJS, to be removed when this happens\n *\n * See jqLite.find - why not use querySelectorAll? https://github.com/angular/angular.js/issues/3586\n * See feat(jqLite): use querySelectorAll instead of getElementsByTagName in jqLite.find https://github.com/angular/angular.js/pull/3598\n */\nif (angular.element.prototype.querySelectorAll === undefined) {\n angular.element.prototype.querySelectorAll = function(selector) {\n return angular.element(this[0].querySelectorAll(selector));\n };\n}\n\n/**\n * Add closest() to jqLite.\n */\nif (angular.element.prototype.closest === undefined) {\n angular.element.prototype.closest = function( selector) {\n var elem = this[0];\n var matchesSelector = elem.matches || elem.webkitMatchesSelector || elem.mozMatchesSelector || elem.msMatchesSelector;\n\n while (elem) {\n if (matchesSelector.bind(elem)(selector)) {\n return elem;\n } else {\n elem = elem.parentElement;\n }\n }\n return false;\n };\n}\n\nvar latestId = 0;\n\nvar uis = angular.module('ui.select', [])\n\n.constant('uiSelectConfig', {\n theme: 'bootstrap',\n searchEnabled: true,\n sortable: false,\n placeholder: '', // Empty by default, like HTML tag \");\n $compile(focusser)(scope);\n $select.focusser = focusser;\n\n //Input that will handle focus\n $select.focusInput = focusser;\n\n element.parent().append(focusser);\n focusser.bind(\"focus\", function(){\n scope.$evalAsync(function(){\n $select.focus = true;\n });\n });\n focusser.bind(\"blur\", function(){\n scope.$evalAsync(function(){\n $select.focus = false;\n });\n });\n focusser.bind(\"keydown\", function(e){\n\n if (e.which === KEY.BACKSPACE) {\n e.preventDefault();\n e.stopPropagation();\n $select.select(undefined);\n scope.$apply();\n return;\n }\n\n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {\n return;\n }\n\n if (e.which == KEY.DOWN || e.which == KEY.UP || e.which == KEY.ENTER || e.which == KEY.SPACE){\n e.preventDefault();\n e.stopPropagation();\n $select.activate();\n }\n\n scope.$digest();\n });\n\n focusser.bind(\"keyup input\", function(e){\n\n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC || e.which == KEY.ENTER || e.which === KEY.BACKSPACE) {\n return;\n }\n\n $select.activate(focusser.val()); //User pressed some regular key, so we pass it to the search input\n focusser.val('');\n scope.$digest();\n\n });\n\n\n }\n };\n}]);\n\n// Make multiple matches sortable\nuis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', function($timeout, uiSelectConfig, uiSelectMinErr) {\n return {\n require: ['^^uiSelect', '^ngModel'],\n link: function(scope, element, attrs, ctrls) {\n if (scope[attrs.uiSelectSort] === null) {\n throw uiSelectMinErr('sort', 'Expected a list to sort');\n }\n\n var $select = ctrls[0];\n var $ngModel = ctrls[1];\n\n var options = angular.extend({\n axis: 'horizontal'\n },\n scope.$eval(attrs.uiSelectSortOptions));\n\n var axis = options.axis;\n var draggingClassName = 'dragging';\n var droppingClassName = 'dropping';\n var droppingBeforeClassName = 'dropping-before';\n var droppingAfterClassName = 'dropping-after';\n\n scope.$watch(function(){\n return $select.sortable;\n }, function(newValue){\n if (newValue) {\n element.attr('draggable', true);\n } else {\n element.removeAttr('draggable');\n }\n });\n\n element.on('dragstart', function(event) {\n element.addClass(draggingClassName);\n\n (event.dataTransfer || event.originalEvent.dataTransfer).setData('text', scope.$index.toString());\n });\n\n element.on('dragend', function() {\n removeClass(draggingClassName);\n });\n\n var move = function(from, to) {\n /*jshint validthis: true */\n this.splice(to, 0, this.splice(from, 1)[0]);\n };\n\n var removeClass = function(className) {\n angular.forEach($select.$element.querySelectorAll('.' + className), function(el){\n angular.element(el).removeClass(className);\n });\n };\n\n var dragOverHandler = function(event) {\n event.preventDefault();\n\n var offset = axis === 'vertical' ? event.offsetY || event.layerY || (event.originalEvent ? event.originalEvent.offsetY : 0) : event.offsetX || event.layerX || (event.originalEvent ? event.originalEvent.offsetX : 0);\n\n if (offset < (this[axis === 'vertical' ? 'offsetHeight' : 'offsetWidth'] / 2)) {\n removeClass(droppingAfterClassName);\n element.addClass(droppingBeforeClassName);\n\n } else {\n removeClass(droppingBeforeClassName);\n element.addClass(droppingAfterClassName);\n }\n };\n\n var dropTimeout;\n\n var dropHandler = function(event) {\n event.preventDefault();\n\n var droppedItemIndex = parseInt((event.dataTransfer || event.originalEvent.dataTransfer).getData('text'), 10);\n\n // prevent event firing multiple times in firefox\n $timeout.cancel(dropTimeout);\n dropTimeout = $timeout(function() {\n _dropHandler(droppedItemIndex);\n }, 20);\n };\n\n var _dropHandler = function(droppedItemIndex) {\n var theList = scope.$eval(attrs.uiSelectSort);\n var itemToMove = theList[droppedItemIndex];\n var newIndex = null;\n\n if (element.hasClass(droppingBeforeClassName)) {\n if (droppedItemIndex < scope.$index) {\n newIndex = scope.$index - 1;\n } else {\n newIndex = scope.$index;\n }\n } else {\n if (droppedItemIndex < scope.$index) {\n newIndex = scope.$index;\n } else {\n newIndex = scope.$index + 1;\n }\n }\n\n move.apply(theList, [droppedItemIndex, newIndex]);\n\n $ngModel.$setViewValue(Date.now());\n\n scope.$apply(function() {\n scope.$emit('uiSelectSort:change', {\n array: theList,\n item: itemToMove,\n from: droppedItemIndex,\n to: newIndex\n });\n });\n\n removeClass(droppingClassName);\n removeClass(droppingBeforeClassName);\n removeClass(droppingAfterClassName);\n\n element.off('drop', dropHandler);\n };\n\n element.on('dragenter', function() {\n if (element.hasClass(draggingClassName)) {\n return;\n }\n\n element.addClass(droppingClassName);\n\n element.on('dragover', dragOverHandler);\n element.on('drop', dropHandler);\n });\n\n element.on('dragleave', function(event) {\n if (event.target != element) {\n return;\n }\n\n removeClass(droppingClassName);\n removeClass(droppingBeforeClassName);\n removeClass(droppingAfterClassName);\n\n element.off('dragover', dragOverHandler);\n element.off('drop', dropHandler);\n });\n }\n };\n}]);\n\n/**\n * Debounces functions\n *\n * Taken from UI Bootstrap $$debounce source code\n * See https://github.com/angular-ui/bootstrap/blob/master/src/debounce/debounce.js\n *\n */\nuis.factory('$$uisDebounce', ['$timeout', function($timeout) {\n return function(callback, debounceTime) {\n var timeoutPromise;\n\n return function() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n\n timeoutPromise = $timeout(function() {\n callback.apply(self, args);\n }, debounceTime);\n };\n };\n}]);\n\nuis.directive('uisOpenClose', ['$parse', '$timeout', function ($parse, $timeout) {\n return {\n restrict: 'A',\n require: 'uiSelect',\n link: function (scope, element, attrs, $select) {\n $select.onOpenCloseCallback = $parse(attrs.uisOpenClose);\n\n scope.$watch('$select.open', function (isOpen, previousState) {\n if (isOpen !== previousState) {\n $timeout(function () {\n $select.onOpenCloseCallback(scope, {\n isOpen: isOpen\n });\n });\n }\n });\n }\n };\n}]);\n\n/**\n * Parses \"repeat\" attribute.\n *\n * Taken from AngularJS ngRepeat source code\n * See https://github.com/angular/angular.js/blob/v1.2.15/src/ng/directive/ngRepeat.js#L211\n *\n * Original discussion about parsing \"repeat\" attribute instead of fully relying on ng-repeat:\n * https://github.com/angular-ui/ui-select/commit/5dd63ad#commitcomment-5504697\n */\n\nuis.service('uisRepeatParser', ['uiSelectMinErr','$parse', function(uiSelectMinErr, $parse) {\n var self = this;\n\n /**\n * Example:\n * expression = \"address in addresses | filter: {street: $select.search} track by $index\"\n * itemName = \"address\",\n * source = \"addresses | filter: {street: $select.search}\",\n * trackByExp = \"$index\",\n */\n self.parse = function(expression) {\n\n\n var match;\n //var isObjectCollection = /\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)/.test(expression);\n // If an array is used as collection\n\n // if (isObjectCollection){\n // 000000000000000000000000000000111111111000000000000000222222222222220033333333333333333333330000444444444444444444000000000000000055555555555000000000000000000000066666666600000000\n match = expression.match(/^\\s*(?:([\\s\\S]+?)\\s+as\\s+)?(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+(\\s*[\\s\\S]+?)?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\n\n // 1 Alias\n // 2 Item\n // 3 Key on (key,value)\n // 4 Value on (key,value)\n // 5 Source expression (including filters)\n // 6 Track by\n\n if (!match) {\n throw uiSelectMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n expression);\n }\n \n var source = match[5], \n filters = '';\n\n // When using (key,value) ui-select requires filters to be extracted, since the object\n // is converted to an array for $select.items \n // (in which case the filters need to be reapplied)\n if (match[3]) {\n // Remove any enclosing parenthesis\n source = match[5].replace(/(^\\()|(\\)$)/g, '');\n // match all after | but not after ||\n var filterMatch = match[5].match(/^\\s*(?:[\\s\\S]+?)(?:[^\\|]|\\|\\|)+([\\s\\S]*)\\s*$/);\n if(filterMatch && filterMatch[1].trim()) {\n filters = filterMatch[1];\n source = source.replace(filters, '');\n } \n }\n\n return {\n itemName: match[4] || match[2], // (lhs) Left-hand side,\n keyName: match[3], //for (key, value) syntax\n source: $parse(source),\n filters: filters,\n trackByExp: match[6],\n modelMapper: $parse(match[1] || match[4] || match[2]),\n repeatExpression: function (grouped) {\n var expression = this.itemName + ' in ' + (grouped ? '$group.items' : '$select.items');\n if (this.trackByExp) {\n expression += ' track by ' + this.trackByExp;\n }\n return expression;\n } \n };\n\n };\n\n self.getGroupNgRepeatExpression = function() {\n return '$group in $select.groups track by $group.name';\n };\n\n}]);\n\n}());\nangular.module(\"ui.select\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"bootstrap/choices.tpl.html\",\"
        0\\\">
      • 0\\\">
      \");\n$templateCache.put(\"bootstrap/match-multiple.tpl.html\",\" × \");\n$templateCache.put(\"bootstrap/match.tpl.html\",\"
      {{$select.placeholder}}
      \");\n$templateCache.put(\"bootstrap/no-choice.tpl.html\",\"
      \");\n$templateCache.put(\"bootstrap/select-multiple.tpl.html\",\"
      \");\n$templateCache.put(\"bootstrap/select.tpl.html\",\"
      \");\n$templateCache.put(\"select2/choices.tpl.html\",\"
      \");\n$templateCache.put(\"select2/match-multiple.tpl.html\",\"
    • \");\n$templateCache.put(\"select2/match.tpl.html\",\"{{$select.placeholder}} \");\n$templateCache.put(\"select2/no-choice.tpl.html\",\"
      \");\n$templateCache.put(\"select2/select-multiple.tpl.html\",\"
      \");\n$templateCache.put(\"select2/select.tpl.html\",\"
      \");\n$templateCache.put(\"selectize/choices.tpl.html\",\"
      \");\n$templateCache.put(\"selectize/match.tpl.html\",\"
      {{$select.placeholder}}
      \");\n$templateCache.put(\"selectize/no-choice.tpl.html\",\"
      \");\n$templateCache.put(\"selectize/select.tpl.html\",\"
      \");}]);\n/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * # ngSanitize\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n *\n *
      \n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are\n * then serialized back to properly escaped html string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The whitelist for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider\n * `$compileProvider`}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n \n \n \n
      \n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      DirectiveHowSourceRendered
      ng-bind-htmlAutomatically uses $sanitize
      <div ng-bind-html=\"snippet\">
      </div>
      ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\n
      <div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div>
      \n
      ng-bindAutomatically escapes
      <div ng-bind=\"snippet\">
      </div>
      \n
      \n
      \n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n toBe('

      an html\\nclick here\\nsnippet

      ');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).\n toBe(\"

      an html\\n\" +\n \"click here\\n\" +\n \"snippet

      \");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getInnerHtml()).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new text');\n expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
      \n
      \n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n *
      \n *

      By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.

      \n *\n *

      To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

      \n *\n *
      \n *\n *
      \n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
      \n *
      \n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isDefined = angular.isDefined;\n lowercase = angular.lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = toMap(\"area,br,col,hr,img,wbr\");\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = toMap(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),\n optionalEndTagInlineElements = toMap(\"rp,rt\"),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, toMap(\"address,article,\" +\n \"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,\" +\n \"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul\"));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, toMap(\"a,abbr,acronym,b,\" +\n \"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,\" +\n \"samp,small,span,strike,strong,sub,sup,time,tt,u,var\"));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = toMap(\"circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,\" +\n \"hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,\" +\n \"radialGradient,rect,stop,svg,switch,text,title,tspan\");\n\n // Blocked Elements (will be stripped)\n var blockedElements = toMap(\"script,style\");\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = toMap(\"background,cite,href,longdesc,src,xlink:href\");\n\n var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function toMap(str, lowercaseKeys) {\n var obj = {}, items = str.split(','), i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n var inertBodyElement;\n (function(window) {\n var doc;\n if (window.document && window.document.implementation) {\n doc = window.document.implementation.createHTMLDocument(\"inert\");\n } else {\n throw $sanitizeMinErr('noinert', \"Can't create an inert html document\");\n }\n var docElement = doc.documentElement || doc.getDocumentElement();\n var bodyElements = docElement.getElementsByTagName('body');\n\n // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one\n if (bodyElements.length === 1) {\n inertBodyElement = bodyElements[0];\n } else {\n var html = doc.createElement('html');\n inertBodyElement = doc.createElement('body');\n html.appendChild(inertBodyElement);\n doc.appendChild(html);\n }\n })(window);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n inertBodyElement.innerHTML = html;\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', \"Failed to sanitize html because the input is unstable\");\n }\n mXSSAttempts--;\n\n // strip custom-namespaced attributes on IE<=11\n if (window.document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n html = inertBodyElement.innerHTML; //trigger mXSS\n inertBodyElement.innerHTML = html;\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType == 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = node.nextSibling;\n if (!nextNode) {\n while (nextNode == null) {\n node = node.parentNode;\n if (node === inertBodyElement) break;\n nextNode = node.nextSibling;\n if (node.nodeType == 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while (node = inertBodyElement.firstChild) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(//g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('');\n }\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n nextNode = node.nextSibling;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \n *\n * @example\n \n \n
      \n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      FilterSourceRendered
      linky filter\n
      <div ng-bind-html=\"snippet | linky\">
      </div>
      \n
      \n
      \n
      linky target\n
      <div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
      </div>
      \n
      \n
      \n
      linky custom attributes\n
      <div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
      </div>
      \n
      \n
      \n
      no filter
      <div ng-bind=\"snippet\">
      </div>
      \n \n \n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n'+\n 'http://angularjs.org/,\\n'+\n 'mailto:us@somewhere.org,\\n'+\n 'another@somewhere.org,\\n'+\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n \n \n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n \n \n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('');\n addText(text);\n html.push('');\n }\n };\n}]);\n\n\n})(window, window.angular);\n\n/*! \n * angular-loading-bar v0.9.0\n * https://chieffancypants.github.io/angular-loading-bar\n * Copyright (c) 2016 Wes Cruver\n * License: MIT\n */\n/*\n * angular-loading-bar\n *\n * intercepts XHR requests and creates a loading bar.\n * Based on the excellent nprogress work by rstacruz (more info in readme)\n *\n * (c) 2013 Wes Cruver\n * License: MIT\n */\n\n\n(function() {\n\n'use strict';\n\n// Alias the loading bar for various backwards compatibilities since the project has matured:\nangular.module('angular-loading-bar', ['cfp.loadingBarInterceptor']);\nangular.module('chieffancypants.loadingBar', ['cfp.loadingBarInterceptor']);\n\n\n/**\n * loadingBarInterceptor service\n *\n * Registers itself as an Angular interceptor and listens for XHR requests.\n */\nangular.module('cfp.loadingBarInterceptor', ['cfp.loadingBar'])\n .config(['$httpProvider', function ($httpProvider) {\n\n var interceptor = ['$q', '$cacheFactory', '$timeout', '$rootScope', '$log', 'cfpLoadingBar', function ($q, $cacheFactory, $timeout, $rootScope, $log, cfpLoadingBar) {\n\n /**\n * The total number of requests made\n */\n var reqsTotal = 0;\n\n /**\n * The number of requests completed (either successfully or not)\n */\n var reqsCompleted = 0;\n\n /**\n * The amount of time spent fetching before showing the loading bar\n */\n var latencyThreshold = cfpLoadingBar.latencyThreshold;\n\n /**\n * $timeout handle for latencyThreshold\n */\n var startTimeout;\n\n\n /**\n * calls cfpLoadingBar.complete() which removes the\n * loading bar from the DOM.\n */\n function setComplete() {\n $timeout.cancel(startTimeout);\n cfpLoadingBar.complete();\n reqsCompleted = 0;\n reqsTotal = 0;\n }\n\n /**\n * Determine if the response has already been cached\n * @param {Object} config the config option from the request\n * @return {Boolean} retrns true if cached, otherwise false\n */\n function isCached(config) {\n var cache;\n var defaultCache = $cacheFactory.get('$http');\n var defaults = $httpProvider.defaults;\n\n // Choose the proper cache source. Borrowed from angular: $http service\n if ((config.cache || defaults.cache) && config.cache !== false &&\n (config.method === 'GET' || config.method === 'JSONP')) {\n cache = angular.isObject(config.cache) ? config.cache\n : angular.isObject(defaults.cache) ? defaults.cache\n : defaultCache;\n }\n\n var cached = cache !== undefined ?\n cache.get(config.url) !== undefined : false;\n\n if (config.cached !== undefined && cached !== config.cached) {\n return config.cached;\n }\n config.cached = cached;\n return cached;\n }\n\n\n return {\n 'request': function(config) {\n // Check to make sure this request hasn't already been cached and that\n // the requester didn't explicitly ask us to ignore this request:\n if (!config.ignoreLoadingBar && !isCached(config)) {\n $rootScope.$broadcast('cfpLoadingBar:loading', {url: config.url});\n if (reqsTotal === 0) {\n startTimeout = $timeout(function() {\n cfpLoadingBar.start();\n }, latencyThreshold);\n }\n reqsTotal++;\n cfpLoadingBar.set(reqsCompleted / reqsTotal);\n }\n return config;\n },\n\n 'response': function(response) {\n if (!response || !response.config) {\n $log.error('Broken interceptor detected: Config object not supplied in response:\\n https://github.com/chieffancypants/angular-loading-bar/pull/50');\n return response;\n }\n\n if (!response.config.ignoreLoadingBar && !isCached(response.config)) {\n reqsCompleted++;\n $rootScope.$broadcast('cfpLoadingBar:loaded', {url: response.config.url, result: response});\n if (reqsCompleted >= reqsTotal) {\n setComplete();\n } else {\n cfpLoadingBar.set(reqsCompleted / reqsTotal);\n }\n }\n return response;\n },\n\n 'responseError': function(rejection) {\n if (!rejection || !rejection.config) {\n $log.error('Broken interceptor detected: Config object not supplied in rejection:\\n https://github.com/chieffancypants/angular-loading-bar/pull/50');\n return $q.reject(rejection);\n }\n\n if (!rejection.config.ignoreLoadingBar && !isCached(rejection.config)) {\n reqsCompleted++;\n $rootScope.$broadcast('cfpLoadingBar:loaded', {url: rejection.config.url, result: rejection});\n if (reqsCompleted >= reqsTotal) {\n setComplete();\n } else {\n cfpLoadingBar.set(reqsCompleted / reqsTotal);\n }\n }\n return $q.reject(rejection);\n }\n };\n }];\n\n $httpProvider.interceptors.push(interceptor);\n }]);\n\n\n/**\n * Loading Bar\n *\n * This service handles adding and removing the actual element in the DOM.\n * Generally, best practices for DOM manipulation is to take place in a\n * directive, but because the element itself is injected in the DOM only upon\n * XHR requests, and it's likely needed on every view, the best option is to\n * use a service.\n */\nangular.module('cfp.loadingBar', [])\n .provider('cfpLoadingBar', function() {\n\n this.autoIncrement = true;\n this.includeSpinner = true;\n this.includeBar = true;\n this.latencyThreshold = 100;\n this.startSize = 0.02;\n this.parentSelector = 'body';\n this.spinnerTemplate = '
      ';\n this.loadingBarTemplate = '
      ';\n\n this.$get = ['$injector', '$document', '$timeout', '$rootScope', function ($injector, $document, $timeout, $rootScope) {\n var $animate;\n var $parentSelector = this.parentSelector,\n loadingBarContainer = angular.element(this.loadingBarTemplate),\n loadingBar = loadingBarContainer.find('div').eq(0),\n spinner = angular.element(this.spinnerTemplate);\n\n var incTimeout,\n completeTimeout,\n started = false,\n status = 0;\n\n var autoIncrement = this.autoIncrement;\n var includeSpinner = this.includeSpinner;\n var includeBar = this.includeBar;\n var startSize = this.startSize;\n\n /**\n * Inserts the loading bar element into the dom, and sets it to 2%\n */\n function _start() {\n if (!$animate) {\n $animate = $injector.get('$animate');\n }\n\n $timeout.cancel(completeTimeout);\n\n // do not continually broadcast the started event:\n if (started) {\n return;\n }\n\n var document = $document[0];\n var parent = document.querySelector ?\n document.querySelector($parentSelector)\n : $document.find($parentSelector)[0]\n ;\n\n if (! parent) {\n parent = document.getElementsByTagName('body')[0];\n }\n\n var $parent = angular.element(parent);\n var $after = parent.lastChild && angular.element(parent.lastChild);\n\n $rootScope.$broadcast('cfpLoadingBar:started');\n started = true;\n\n if (includeBar) {\n $animate.enter(loadingBarContainer, $parent, $after);\n }\n\n if (includeSpinner) {\n $animate.enter(spinner, $parent, loadingBarContainer);\n }\n\n _set(startSize);\n }\n\n /**\n * Set the loading bar's width to a certain percent.\n *\n * @param n any value between 0 and 1\n */\n function _set(n) {\n if (!started) {\n return;\n }\n var pct = (n * 100) + '%';\n loadingBar.css('width', pct);\n status = n;\n\n // increment loadingbar to give the illusion that there is always\n // progress but make sure to cancel the previous timeouts so we don't\n // have multiple incs running at the same time.\n if (autoIncrement) {\n $timeout.cancel(incTimeout);\n incTimeout = $timeout(function() {\n _inc();\n }, 250);\n }\n }\n\n /**\n * Increments the loading bar by a random amount\n * but slows down as it progresses\n */\n function _inc() {\n if (_status() >= 1) {\n return;\n }\n\n var rnd = 0;\n\n // TODO: do this mathmatically instead of through conditions\n\n var stat = _status();\n if (stat >= 0 && stat < 0.25) {\n // Start out between 3 - 6% increments\n rnd = (Math.random() * (5 - 3 + 1) + 3) / 100;\n } else if (stat >= 0.25 && stat < 0.65) {\n // increment between 0 - 3%\n rnd = (Math.random() * 3) / 100;\n } else if (stat >= 0.65 && stat < 0.9) {\n // increment between 0 - 2%\n rnd = (Math.random() * 2) / 100;\n } else if (stat >= 0.9 && stat < 0.99) {\n // finally, increment it .5 %\n rnd = 0.005;\n } else {\n // after 99%, don't increment:\n rnd = 0;\n }\n\n var pct = _status() + rnd;\n _set(pct);\n }\n\n function _status() {\n return status;\n }\n\n function _completeAnimation() {\n status = 0;\n started = false;\n }\n\n function _complete() {\n if (!$animate) {\n $animate = $injector.get('$animate');\n }\n\n $rootScope.$broadcast('cfpLoadingBar:completed');\n _set(1);\n\n $timeout.cancel(completeTimeout);\n\n // Attempt to aggregate any start/complete calls within 500ms:\n completeTimeout = $timeout(function() {\n var promise = $animate.leave(loadingBarContainer, _completeAnimation);\n if (promise && promise.then) {\n promise.then(_completeAnimation);\n }\n $animate.leave(spinner);\n }, 500);\n }\n\n return {\n start : _start,\n set : _set,\n status : _status,\n inc : _inc,\n complete : _complete,\n autoIncrement : this.autoIncrement,\n includeSpinner : this.includeSpinner,\n latencyThreshold : this.latencyThreshold,\n parentSelector : this.parentSelector,\n startSize : this.startSize\n };\n\n\n }]; //\n }); // wtf javascript. srsly\n})(); //\n\n/* global window */\n/* global angular */\n/* global module */\n\n(function (module, window, angular) {\n \"use strict\";\n\n function test(string, regex) {\n if (typeof regex === 'string' || regex instanceof String) {\n regex=new RegExp(regex);\n }\n\n if (regex instanceof RegExp) {\n return regex.test(string);\n }\n else if (regex && Array.isArray(regex.and)) {\n return regex.and.every(function (item) {\n return test(string, item);\n });\n }\n else if (regex && Array.isArray(regex.or)) {\n return regex.or.some(function (item) {\n return test(string, item);\n });\n }\n else if (regex && regex.not) {\n return !test(string, regex.not);\n }\n else {\n return false;\n }\n }\n\n function exec(string, regex) {\n if (typeof regex === 'string' || regex instanceof String) {\n regex=new RegExp(regex);\n }\n\n if (regex instanceof RegExp) {\n return regex.exec(string);\n }\n else if (regex && Array.isArray(regex)) {\n return regex.reduce(function (res, item) {\n return (!!res) ? res : exec(string, item);\n }, null);\n }\n else {\n return null;\n }\n }\n\n if (!!angular) {\n angular.module(\"reTree\", []).factory(\"reTree\", [function () {\n return {\n test: test,\n exec: exec\n };\n }]);\n }\n\n if (!!window) {\n window.reTree = {\n test: test,\n exec: exec\n };\n }\n\n if (!!module) {\n module.exports = {\n test: test,\n exec: exec\n };\n }\n})(typeof module === 'undefined' ? null : module, typeof window === 'undefined' ? null : window, typeof angular === 'undefined' ? null : angular);\n\n(function (angular) {\n \"use strict\";\n angular.module(\"ng.deviceDetector\", [\"reTree\"])\n .constant(\"BROWSERS\", {\n CHROME: \"chrome\",\n FIREFOX: \"firefox\",\n SAFARI: \"safari\",\n OPERA: \"opera\",\n IE: \"ie\",\n MS_EDGE: \"ms-edge\",\n PS4: \"ps4\",\n VITA: \"vita\",\n UNKNOWN: \"unknown\"\n })\n .constant(\"DEVICES\", {\n ANDROID: \"android\",\n I_PAD: \"ipad\",\n IPHONE: \"iphone\",\n I_POD: \"ipod\",\n BLACKBERRY: \"blackberry\",\n FIREFOX_OS: \"firefox-os\",\n CHROME_BOOK: \"chrome-book\",\n WINDOWS_PHONE: \"windows-phone\",\n PS4: \"ps4\",\n VITA: \"vita\",\n UNKNOWN: \"unknown\"\n })\n .constant(\"OS\", {\n WINDOWS: \"windows\",\n MAC: \"mac\",\n IOS: \"ios\",\n ANDROID: \"android\",\n LINUX: \"linux\",\n UNIX: \"unix\",\n FIREFOX_OS: \"firefox-os\",\n CHROME_OS: \"chrome-os\",\n WINDOWS_PHONE: \"windows-phone\",\n PS4: \"ps4\",\n VITA: \"vita\",\n UNKNOWN: \"unknown\"\n })\n .constant(\"OS_VERSIONS\", {\n WINDOWS_3_11: \"windows-3-11\",\n WINDOWS_95: \"windows-95\",\n WINDOWS_ME: \"windows-me\",\n WINDOWS_98: \"windows-98\",\n WINDOWS_CE: \"windows-ce\",\n WINDOWS_2000: \"windows-2000\",\n WINDOWS_XP: \"windows-xp\",\n WINDOWS_SERVER_2003: \"windows-server-2003\",\n WINDOWS_VISTA: \"windows-vista\",\n WINDOWS_7: \"windows-7\",\n WINDOWS_8_1: \"windows-8-1\",\n WINDOWS_8: \"windows-8\",\n WINDOWS_10: \"windows-10\",\n WINDOWS_PHONE_7_5: \"windows-phone-7-5\",\n WINDOWS_PHONE_8_1: \"windows-phone-8-1\",\n WINDOWS_PHONE_10: \"windows-phone-10\",\n WINDOWS_NT_4_0: \"windows-nt-4-0\",\n UNKNOWN: \"unknown\"\n })\n .service(\"detectUtils\", [\"deviceDetector\", \"DEVICES\", \"BROWSERS\", \"OS\",\n function (deviceDetector, DEVICES, BROWSERS, OS) {\n var deviceInfo = deviceDetector;\n\n this.isMobile = function () {\n return deviceInfo.device !== 'unknown';\n };\n\n this.isAndroid = function () {\n return (deviceInfo.device === DEVICES.ANDROID || deviceInfo.OS === OS.ANDROID);\n };\n\n this.isIOS = function () {\n return (deviceInfo.os === OS.IOS || deviceInfo.device === DEVICES.I_POD || deviceInfo.device === DEVICES.IPHONE);\n };\n }\n ])\n .factory(\"deviceDetector\", [\"$window\", \"DEVICES\", \"BROWSERS\", \"OS\", \"OS_VERSIONS\",\"reTree\",\n function ($window, DEVICES, BROWSERS, OS, OS_VERSIONS,reTree) {\n\n var OS_RE = {\n WINDOWS: {and: [{or: [/\\bWindows|(Win\\d\\d)\\b/, /\\bWin 9x\\b/]}, {not: /\\bWindows Phone\\b/}]},\n MAC: {and:[/\\bMac OS\\b/,{not:/Windows Phone/}]},\n IOS: {and: [{or: [/\\biPad\\b/, /\\biPhone\\b/, /\\biPod\\b/]}, {not: /Windows Phone/}]},\n ANDROID: {and:[/\\bAndroid\\b/,{not:/Windows Phone/}]},\n LINUX: /\\bLinux\\b/,\n UNIX: /\\bUNIX\\b/,\n FIREFOX_OS: {and: [/\\bFirefox\\b/, /Mobile\\b/]},\n CHROME_OS: /\\bCrOS\\b/,\n WINDOWS_PHONE: {or:[/\\bIEMobile\\b/,/\\bWindows Phone\\b/]},\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/\n };\n\n var BROWSERS_RE = {\n CHROME: {and:[{or: [/\\bChrome\\b/, /\\bCriOS\\b/]},{not:{or:[/\\bOPR\\b/,/\\bEdge\\b/]}}]},\n FIREFOX: /\\bFirefox\\b/,\n SAFARI: {and:[/^((?!CriOS).)*\\Safari\\b.*$/,{not:{or:[/\\bOPR\\b/,/\\bEdge\\b/,/Windows Phone/]}}]},\n OPERA: {or:[/Opera\\b/,/\\bOPR\\b/]},\n IE: {or: [/\\bMSIE\\b/, /\\bTrident\\b/]},\n MS_EDGE: {or: [/\\bEdge\\b/]},\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/\n };\n\n var DEVICES_RE = {\n ANDROID: {and:[/\\bAndroid\\b/,{not:/Windows Phone/}]},\n I_PAD: /\\biPad\\b/,\n IPHONE: {and: [/\\biPhone\\b/, {not:/Windows Phone/}]},\n I_POD: /\\biPod\\b/,\n BLACKBERRY: /\\bblackberry\\b/,\n FIREFOX_OS: {and: [/\\bFirefox\\b/, /\\bMobile\\b/]},\n CHROME_BOOK: /\\bCrOS\\b/,\n WINDOWS_PHONE: {or:[/\\bIEMobile\\b/,/\\bWindows Phone\\b/]},\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/\n };\n\n var OS_VERSIONS_RE = {\n WINDOWS_3_11: /Win16/,\n WINDOWS_95: /(Windows 95|Win95|Windows_95)/,\n WINDOWS_ME: /(Win 9x 4.90|Windows ME)/,\n WINDOWS_98: /(Windows 98|Win98)/,\n WINDOWS_CE: /Windows CE/,\n WINDOWS_2000: /(Windows NT 5.0|Windows 2000)/,\n WINDOWS_XP: /(Windows NT 5.1|Windows XP)/,\n WINDOWS_SERVER_2003: /Windows NT 5.2/,\n WINDOWS_VISTA: /Windows NT 6.0/,\n WINDOWS_7: /(Windows 7|Windows NT 6.1)/,\n WINDOWS_8_1: /(Windows 8.1|Windows NT 6.3)/,\n WINDOWS_8: /(Windows 8|Windows NT 6.2)/,\n WINDOWS_10: /(Windows NT 10.0)/,\n WINDOWS_PHONE_7_5: /(Windows Phone OS 7.5)/,\n WINDOWS_PHONE_8_1: /(Windows Phone 8.1)/,\n WINDOWS_PHONE_10: /(Windows Phone 10)/,\n WINDOWS_NT_4_0: {and:[/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/,{not:/Windows NT 10.0/}]}\n };\n\n var BROWSER_VERSIONS_RE_MAP = {\n CHROME:[/\\bChrome\\/([\\d\\.]+)\\b/,/\\bCriOS\\/([\\d\\.]+)\\b/],\n FIREFOX:/\\bFirefox\\/([\\d\\.]+)\\b/,\n SAFARI:/\\bVersion\\/([\\d\\.]+)\\b/,\n OPERA:[/\\bVersion\\/([\\d\\.]+)\\b/,/\\bOPR\\/([\\d\\.]+)\\b/],\n IE:[/\\bMSIE ([\\d\\.]+\\w?)\\b/,/\\brv:([\\d\\.]+\\w?)\\b/],\n MS_EDGE:/\\bEdge\\/([\\d\\.]+)\\b/\n };\n\n var BROWSER_VERSIONS_RE = Object.keys(BROWSER_VERSIONS_RE_MAP).reduce(function (obj, key) {\n obj[BROWSERS[key]]=BROWSER_VERSIONS_RE_MAP[key];\n return obj;\n },{});\n\n var ua = $window.navigator.userAgent;\n\n var deviceInfo = {\n raw: {\n userAgent: ua,\n os: {},\n browser: {},\n device: {}\n }\n };\n\n deviceInfo.raw.os = Object.keys(OS).reduce(function (obj, item) {\n obj[OS[item]] = reTree.test(ua, OS_RE[item]);\n return obj;\n }, {});\n\n deviceInfo.raw.browser = Object.keys(BROWSERS).reduce(function (obj, item) {\n obj[BROWSERS[item]] = reTree.test(ua, BROWSERS_RE[item]);\n return obj;\n }, {});\n\n deviceInfo.raw.device = Object.keys(DEVICES).reduce(function (obj, item) {\n obj[DEVICES[item]] = reTree.test(ua, DEVICES_RE[item]);\n return obj;\n }, {});\n\n deviceInfo.raw.os_version = Object.keys(OS_VERSIONS).reduce(function (obj, item) {\n obj[OS_VERSIONS[item]] = reTree.test(ua, OS_VERSIONS_RE[item]);\n return obj;\n }, {});\n\n deviceInfo.os = [\n OS.WINDOWS,\n OS.IOS,\n OS.MAC,\n OS.ANDROID,\n OS.LINUX,\n OS.UNIX,\n OS.FIREFOX_OS,\n OS.CHROME_OS,\n OS.WINDOWS_PHONE,\n OS.PS4,\n OS.VITA\n ].reduce(function (previousValue, currentValue) {\n return (previousValue === OS.UNKNOWN && deviceInfo.raw.os[currentValue]) ? currentValue : previousValue;\n }, OS.UNKNOWN);\n\n deviceInfo.browser = [\n BROWSERS.CHROME,\n BROWSERS.FIREFOX,\n BROWSERS.SAFARI,\n BROWSERS.OPERA,\n BROWSERS.IE,\n BROWSERS.MS_EDGE,\n BROWSERS.PS4,\n BROWSERS.VITA\n ].reduce(function (previousValue, currentValue) {\n return (previousValue === BROWSERS.UNKNOWN && deviceInfo.raw.browser[currentValue]) ? currentValue : previousValue;\n }, BROWSERS.UNKNOWN);\n\n deviceInfo.device = [\n DEVICES.ANDROID,\n DEVICES.I_PAD,\n DEVICES.IPHONE,\n DEVICES.I_POD,\n DEVICES.BLACKBERRY,\n DEVICES.FIREFOX_OS,\n DEVICES.CHROME_BOOK,\n DEVICES.WINDOWS_PHONE,\n DEVICES.PS4,\n DEVICES.VITA\n ].reduce(function (previousValue, currentValue) {\n return (previousValue === DEVICES.UNKNOWN && deviceInfo.raw.device[currentValue]) ? currentValue : previousValue;\n }, DEVICES.UNKNOWN);\n\n deviceInfo.os_version = [\n OS_VERSIONS.WINDOWS_3_11,\n OS_VERSIONS.WINDOWS_95,\n OS_VERSIONS.WINDOWS_ME,\n OS_VERSIONS.WINDOWS_98,\n OS_VERSIONS.WINDOWS_CE,\n OS_VERSIONS.WINDOWS_2000,\n OS_VERSIONS.WINDOWS_XP,\n OS_VERSIONS.WINDOWS_SERVER_2003,\n OS_VERSIONS.WINDOWS_VISTA,\n OS_VERSIONS.WINDOWS_7,\n OS_VERSIONS.WINDOWS_8_1,\n OS_VERSIONS.WINDOWS_8,\n OS_VERSIONS.WINDOWS_10,\n OS_VERSIONS.WINDOWS_PHONE_7_5,\n OS_VERSIONS.WINDOWS_PHONE_8_1,\n OS_VERSIONS.WINDOWS_PHONE_10,\n OS_VERSIONS.WINDOWS_NT_4_0\n ].reduce(function (previousValue, currentValue) {\n return (previousValue === OS_VERSIONS.UNKNOWN && deviceInfo.raw.os_version[currentValue]) ? currentValue : previousValue;\n }, OS_VERSIONS.UNKNOWN);\n\n deviceInfo.browser_version = \"0\";\n if (deviceInfo.browser !== BROWSERS.UNKNOWN) {\n var re = BROWSER_VERSIONS_RE[deviceInfo.browser];\n var res = reTree.exec(ua,re);\n if (!!res) {\n deviceInfo.browser_version = res[1];\n }\n }\n\n deviceInfo.isMobile = function () {\n return [\n DEVICES.ANDROID,\n DEVICES.I_PAD,\n DEVICES.IPHONE,\n DEVICES.I_POD,\n DEVICES.BLACKBERRY,\n DEVICES.FIREFOX_OS,\n DEVICES.WINDOWS_PHONE,\n DEVICES.VITA\n ].some(function (item) {\n return deviceInfo.device == item;\n });\n };\n\n deviceInfo.isTablet = function () {\n return [\n DEVICES.I_PAD,\n DEVICES.FIREFOX_OS\n ].some(function (item) {\n return deviceInfo.device == item;\n });\n };\n\n deviceInfo.isDesktop = function () {\n return [\n DEVICES.PS4,\n DEVICES.CHROME_BOOK,\n DEVICES.UNKNOWN\n ].some(function (item) {\n return deviceInfo.device == item;\n });\n };\n\n return deviceInfo;\n }\n ])\n .directive('deviceDetector', [\"deviceDetector\", function (deviceDetector) {\n return {\n restrict: \"A\",\n link: function (scope, elm/*, attrs*/) {\n elm.addClass('os-' + deviceDetector.os);\n elm.addClass('browser-' + deviceDetector.browser);\n elm.addClass('device-' + deviceDetector.device);\n }\n };\n }]);\n})(angular);\n\n'use strict';\n(function(){\n var lowercase = function(string){return (typeof string === 'string') ? string.toLowerCase() : string;};\n function toBoolean(value) {\n if (typeof value === 'function') {\n value = true;\n } else if (value && value.length !== 0) {\n var v = lowercase('' + value);\n value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');\n } else {\n value = false;\n }\n return value;\n }\n var AngularPrint = angular.module('AngularPrint',[]);\n AngularPrint.directive('printSection', function(){\n return {\n restrict: 'A',\n link: function(scope, element){\n element[0].classList.add('printSection');\n }\n };\n });\n AngularPrint.directive('printHide', function(){\n return {\n restrict: 'A',\n link: function(scope, element){\n element[0].classList.add('printHide');\n }\n };\n });\n AngularPrint.directive('printRemove', function(){\n return {\n restrict: 'A',\n link: function(scope, element){\n element[0].classList.add('printRemove');\n }\n };\n });\n AngularPrint.directive('printOnly', function(){\n return {\n restrict: 'A',\n link: {\n post: function(scope, element){\n element[0].classList.add('printOnly');\n }\n }\n };\n });\n AngularPrint.directive('printAvoidBreak', function(){\n return {\n restrict: 'A',\n link: function(scope, element){\n element[0].classList.add('avoidPageBreak');\n }\n };\n });\n AngularPrint.directive('printBtn',['$window', function($window){\n return {\n restrict: 'A',\n link: function(scope, element){\n element.on('click', function(){\n $window.print();\n });\n }\n };\n }]);\n AngularPrint.directive('printIf', ['$animate', function($animate) {\n return function(scope, element, attr) {\n scope.$watch(attr.printIf, function applyPrint(value){\n if('printOnly' in attr){\n $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'printRemove');\n }\n else{\n $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'printSection');\n }\n });\n };\n }]);\n AngularPrint.directive('printLandscape',function(){\n return {\n restrict: 'A',\n link: function(){\n var sheet = (function() {\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(''));\n document.head.appendChild(style);\n return style.sheet;\n })();\n sheet.insertRule('@page{size:landscape;}', 0);\n }\n };\n });\n AngularPrint.directive('printTable', function(){\n return function(scope, element, attr) {\n scope.$watch(attr.printTable, function makeTable(value){\n setTimeout(function(){\n if(value == null) return;\n var elem = element[0];\n elem.classList.add('printSection');\n elem.id = 'print-table';\n var tds = elem.getElementsByTagName('td');\n for(var i = 0, content, div; i < tds.length; i++){\n content = tds[i].innerHTML;\n tds[i].innerHTML = '';\n div = document.createElement('div');\n div.className = 'avoidPageBreak';\n div.innerHTML = content;\n tds[i].appendChild(div);\n }\n element[0] = elem;\n },1000);\n });\n };\n });\n})();\n\n/*! Angular Moment Picker - v0.5.7 - https://github.com/indrimuska/angular-moment-picker - (c) 2015 Indri Muska - MIT */\n!function(a){\"use strict\";var b,c,d,e,f,g,h=function(){function b(){c={locale:\"en\",format:\"L LTS\",minView:\"decade\",maxView:\"minute\",startView:\"year\",today:!1,autoclose:!0,leftArrow:\"←\",rightArrow:\"→\",yearsFormat:\"YYYY\",monthsFormat:\"MMM\",daysFormat:\"D\",hoursFormat:\"HH:[00]\",secondsFormat:\"ss\",minutesStep:5,secondsStep:1}}var c;return b.prototype.options=function(b){return a.extend(c,b),a.copy(c)},b.prototype.$get=function(){return c},b}(),i=function(){function h(a){var b,c,d,e;if(a)return a.getClientRects().length?(d=a.getBoundingClientRect(),d.width||d.height?(e=a.ownerDocument,c=null!=e&&e===e.window?a:9===e.nodeType&&e.defaultView,b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}}function i(a,h,i,j,k,l){this.restrict=\"A\",this.scope={model:\"=momentPicker\",locale:\"@?\",format:\"@?\",minView:\"@?\",maxView:\"@?\",startView:\"@?\",minDate:\"=?\",maxDate:\"=?\",today:\"=?\",disabled:\"=?disable\",autoclose:\"=?\",change:\"&?\"},b=a,c=h,d=i,e=j,f=k,g=l}return i.prototype.$inject=[\"$timeout\",\"$sce\",\"$compile\",\"$document\",\"$window\",\"momentPicker\"],i.prototype.link=function(i,j,k){i.template='
      ',a.forEach([\"locale\",\"format\",\"minView\",\"maxView\",\"startView\",\"today\",\"leftArrow\",\"rightArrow\",\"autoclose\"],function(b){a.isDefined(i[b])||(i[b]=g[b]),a.isDefined(k[b])||(k[b]=i[b])}),i.momentToDate=function(b){return a.isDefined(b)&&b.isValid()?b.clone().toDate():void 0},i.valueUpdate=function(){i.disabled||(i.value=i.momentToDate(i.valueMoment))},i.limits={isAfterOrEqualMin:function(b,c){return!a.isDefined(i.minDateMoment)||b.isAfter(i.minDateMoment,c)||b.isSame(i.minDateMoment,c)},isBeforeOrEqualMax:function(b,c){return!a.isDefined(i.maxDateMoment)||b.isBefore(i.maxDateMoment,c)||b.isSame(i.maxDateMoment,c)},isSelectable:function(a,b){return i.limits.isAfterOrEqualMin(a,b)&&i.limits.isBeforeOrEqualMax(a,b)},checkValue:function(){a.isDefined(i.valueMoment)&&(i.limits.isAfterOrEqualMin(i.valueMoment)||i.valueUpdate(i.valueMoment=i.minDateMoment.clone()),i.limits.isBeforeOrEqualMax(i.valueMoment)||i.valueUpdate(i.valueMoment=i.maxDateMoment.clone()))},checkView:function(){a.isDefined(i.view.moment)||(i.view.moment=moment().locale(i.locale)),i.limits.isAfterOrEqualMin(i.view.moment)||(i.view.moment=i.minDateMoment.clone()),i.limits.isBeforeOrEqualMax(i.view.moment)||(i.view.moment=i.maxDateMoment.clone()),i.view.update()}},i.views={all:[\"decade\",\"year\",\"month\",\"day\",\"hour\",\"minute\"],formats:{decade:\"Y{1,2}(?!Y)|YYYY|[Ll]{1,4}(?!T)\",year:\"M{1,4}(?![Mo])|Mo|Q\",month:\"[Dd]{1,4}(?![Ddo])|DDDo|[Dd]o|[Ww]{1,2}(?![Wwo])|[Ww]o|[Ee]|L{1,2}(?!T)|l{1,2}\",day:\"[Hh]{1,2}|LTS?\",hour:\"m{1,2}|[Ll]{3,4}|LT(?!S)\",minute:\"s{1,2}|S{1,}|X|LTS\"},detectMinMax:function(){var b,c;a.forEach(i.views.formats,function(d,e){var f=new RegExp(\"(\"+d+\")(?![^[]*])\",\"g\");i.format.match(f)&&(a.isDefined(b)||(b=e),c=e)}),b=a.isDefined(b)?Math.max(0,i.views.all.indexOf(b)):0,c=a.isDefined(c)?Math.min(i.views.all.length-1,i.views.all.indexOf(c)):i.views.all.length-1,b>i.views.all.indexOf(i.minView)&&(i.minView=i.views.all[b]),c0&&c>g/2&&i.picker.addClass(\"top\"),d+a.offsetWidth>e&&i.picker.addClass(\"left\")},unit:function(){return\"decade\"==i.view.selected?10:1},precision:function(){return i.view.selected.replace(\"decade\",\"year\")},title:\"\",previous:{label:c.trustAsHtml(i.leftArrow),selectable:!0,set:function(){i.view.previous.selectable&&i.view.update(i.view.moment.subtract(i.view.unit(),i.view.precision()).toDate())}},next:{selectable:!0,label:c.trustAsHtml(i.rightArrow),set:function(){i.view.next.selectable&&i.view.update(i.view.moment.add(i.view.unit(),i.view.precision()).toDate())}},setParentView:function(){i.view.change(i.views.all[Math.max(0,i.views.all.indexOf(i.view.selected)-1)])},render:function(){var a=i.view.moment.clone().startOf(i.view.precision()).subtract(i.view.unit(),i.view.precision()),b=i.view.moment.clone().endOf(i.view.precision()).add(i.view.unit(),i.view.precision());i.view.previous.selectable=i.limits.isAfterOrEqualMin(a,i.view.precision()),i.view.previous.label=c.trustAsHtml(i.view.previous.selectable?i.leftArrow:\" \"),i.view.next.selectable=i.limits.isBeforeOrEqualMax(b,i.view.precision()),i.view.next.label=c.trustAsHtml(i.view.next.selectable?i.rightArrow:\" \"),i.view.title=i[i.view.selected+\"View\"].render()},change:function(a){var b=i.views.all.indexOf(a),c=i.views.all.indexOf(i.minView),d=i.views.all.indexOf(i.maxView);0>b||b>d?(i.valueUpdate(i.valueMoment=i.view.moment.clone()),i.autoclose&&i.view.close()):b>=c&&(i.view.selected=a)}},i.decadeView={fourYears:{},render:function(){var a=i.view.moment.clone(),b=10*Math.floor(a.year()/10)-1;a.year(b),i.decadeView.fourYears={};for(var c=0;12>c;c++){var d=Math.floor(c/4),e=i.limits.isSelectable(a,\"year\");i.decadeView.fourYears[d]||(i.decadeView.fourYears[d]=[]),i.decadeView.fourYears[d].push({label:a.format(g.yearsFormat),year:a.year(),\"class\":!e||[0,11].indexOf(c)>=0?\"disabled\":a.isSame(i.valueMoment,\"year\")?\"selected\":\"\",selectable:e}),a.add(1,\"years\")}return[a.subtract(2,\"years\").format(\"YYYY\"),a.subtract(9,\"years\").format(\"YYYY\")].reverse().join(\" - \")},setYear:function(a){a.selectable&&(i.view.update(i.view.moment.year(a.year)),i.view.change(\"year\"))}},i.yearView={fourMonths:{},render:function(){var a=i.view.moment.clone().startOf(\"year\"),b=moment.monthsShort();return i.yearView.fourMonths={},b.forEach(function(b,c){var d=Math.floor(c/4),e=i.limits.isSelectable(a,\"month\");i.yearView.fourMonths[d]||(i.yearView.fourMonths[d]=[]),i.yearView.fourMonths[d].push({label:a.format(g.monthsFormat),year:a.year(),month:a.month(),\"class\":e?a.isSame(i.valueMoment,\"month\")?\"selected\":\"\":\"disabled\",selectable:e}),a.add(1,\"months\")}),i.view.moment.format(\"YYYY\")},setMonth:function(a){a.selectable&&(i.view.update(i.view.moment.year(a.year).month(a.month)),i.view.change(\"month\"))}},i.monthView={days:function(){for(var a=[],b=moment().locale(i.locale).startOf(\"week\"),c=0;7>c;c++)a.push(b.format(\"dd\")),b.add(1,\"days\");return a}(),weeks:[],render:function(){var b=i.view.moment.month(),c=i.view.moment.clone().startOf(\"month\").startOf(\"week\"),d={},e=c.week(),f=e+5;i.monthView.weeks=[];for(var h=e;f>=h;h++)d[h]=\"0000000\".split(\"\").map(function(){var a=i.limits.isSelectable(c,\"day\"),d={label:c.format(g.daysFormat),year:c.year(),date:c.date(),month:c.month(),\"class\":[i.today&&c.isSame(new Date,\"day\")?\"today\":\"\",a&&c.month()==b?c.isSame(i.valueMoment,\"day\")?\"selected\":\"\":\"disabled\"].join(\" \").trim(),selectable:a};return c.add(1,\"days\"),d});return a.forEach(d,function(a){i.monthView.weeks.push(a)}),i.view.moment.format(\"MMMM YYYY\")},setDate:function(a){a.selectable&&(i.view.update(i.view.moment.year(a.year).month(a.month).date(a.date)),i.view.change(\"day\"))}},i.dayView={threeHours:[],render:function(){var a=i.view.moment.clone().startOf(\"day\");i.dayView.threeHours=[];for(var b=0;24>b;b++){var c=Math.floor(b/4),d=i.limits.isSelectable(a,\"hour\");i.dayView.threeHours[c]||(i.dayView.threeHours[c]=[]),i.dayView.threeHours[c].push({label:a.format(g.hoursFormat),year:a.year(),month:a.month(),date:a.date(),hour:a.hour(),\"class\":d?a.isSame(i.valueMoment,\"hour\")?\"selected\":\"\":\"disabled\",selectable:d}),a.add(1,\"hours\")}return i.view.moment.format(\"LL\")},setHour:function(a){a.selectable&&(i.view.update(i.view.moment.year(a.year).month(a.month).date(a.date).hour(a.hour)),i.view.change(\"hour\"))}},i.hourView={minutes:[],render:function(){var a=0,b=i.view.moment.clone().startOf(\"hour\"),c=g.minutesFormat||moment.localeData(i.locale).longDateFormat(\"LT\").replace(/[aA]/,\"\");i.hourView.minutes=[];for(var d=0;60>d;d+=g.minutesStep){var e=Math.floor(a/4),f=i.limits.isSelectable(b,\"minute\");i.hourView.minutes[e]||(i.hourView.minutes[e]=[]),i.hourView.minutes[e].push({label:b.format(c),year:b.year(),month:b.month(),date:b.date(),hour:b.hour(),minute:b.minute(),\"class\":f?b.isSame(i.valueMoment,\"minute\")?\"selected\":\"\":\"disabled\",selectable:f}),a++,b.add(g.minutesStep,\"minutes\")}return i.view.moment.clone().startOf(\"hour\").format(\"lll\")},setMinute:function(a){a.selectable&&(i.view.update(i.view.moment.year(a.year).month(a.month).date(a.date).hour(a.hour).minute(a.minute)),i.view.change(\"minute\"))}},i.minuteView={seconds:[],render:function(){var a=0,b=i.view.moment.clone().startOf(\"minute\");i.minuteView.seconds=[];for(var c=0;60>c;c+=g.secondsStep){var d=Math.floor(a/6),e=i.limits.isSelectable(b,\"second\");i.minuteView.seconds[d]||(i.minuteView.seconds[d]=[]),i.minuteView.seconds[d].push({label:b.format(g.secondsFormat),year:b.year(),month:b.month(),date:b.date(),hour:b.hour(),minute:b.minute(),second:b.second(),\"class\":e?b.isSame(i.valueMoment,\"second\")?\"selected\":\"\":\"disabled\",selectable:e}),a++,b.add(g.secondsStep,\"seconds\")}return i.view.moment.clone().startOf(\"minute\").format(\"lll\")},setSecond:function(a){a.selectable&&(i.view.update(i.view.moment.year(a.year).month(a.month).date(a.date).hour(a.hour).minute(a.minute).second(a.second)),i.view.change(\"second\"))}},i.picker=a.element(''),j.after(i.picker),i.contents=j.addClass(\"moment-picker-contents\").removeAttr(\"moment-picker\"),i.container=d(i.template)(i),i.picker.append(i.contents),i.picker.append(i.container),i.views.detectMinMax(),i.limits.checkView(),i.$watch(\"model\",function(b){a.isDefined(b)&&(i.valueMoment=moment(b,i.format,i.locale),i.valueMoment.isValid()?(i.view.moment=i.valueMoment.clone(),i.view.update()):i.valueMoment=void 0),i.valueUpdate(i.valueMoment),i.limits.checkValue()}),i.$watch(\"value\",function(){if(a.isDefined(i.valueMoment)){var c=i.model,d=i.valueMoment.format(i.format);d!=c&&b(function(){i.view.update(i.view.moment=i.valueMoment.clone()),i.model=d,a.isFunction(i.change)&&b(function(){i.change({newValue:d,oldValue:c})},0,!1)})}}),i.$watch(\"[view.selected, view.value]\",i.view.render,!0),i.$watch(\"[minView, maxView]\",function(){i.views.detectMinMax(),i.startView=i.views.all[Math.max(Math.min(i.views.all.indexOf(i.startView),i.views.all.indexOf(i.maxView)),i.views.all.indexOf(i.minView))],i.view.selected=i.startView}),i.$watch(\"[minDate, maxDate]\",function(){a.forEach([\"minDate\",\"maxDate\"],function(b){a.isDefined(i[b])&&(i[b+\"Moment\"]=moment(i[b],i.format,i.locale),i[b+\"Moment\"].isValid()||(i[b+\"Moment\"]=void 0))}),i.limits.checkValue(),i.limits.checkView(),i.view.render()},!0),i.$watch(\"locale\",function(b,c){a.isDefined(c)&&b!=c&&(a.forEach([\"model\",\"minDate\",\"maxDate\"],function(d){a.isDefined(i[d])&&(i[d]=moment(i[d],i.format,c).locale(b).format(i.format))}),i.view.render())}),e.on(\"click\",function(){i.view.isOpen&&b(i.view.close)}),i.container.on(\"click\",function(a){a.stopPropagation()}),i.contents.on(\"click\",function(a){a.stopPropagation(),i.view.isOpen||b(i.view.open)}),a.element(i.contents[0].querySelector(\"input\")).on(\"focus\",function(){i.view.isOpen||b(i.view.open)}),a.element(f).on(\"resize\",i.view.position)},i}();a.module(\"moment-picker\",[]).provider(\"momentPicker\",[function(){return new h}]).directive(\"momentPicker\",[\"$timeout\",\"$sce\",\"$compile\",\"$document\",\"$window\",\"momentPicker\",function(a,b,c,d,e,f){return new i(a,b,c,d,e,f)}])}(window.angular);\n/*\nTrix 0.10.1\nCopyright © 2017 Basecamp, LLC\nhttp://trix-editor.org/\n */\n(function(){}).call(this),function(){var t;null==window.Set&&(window.Set=t=function(){function t(){this.clear()}return t.prototype.clear=function(){return this.values=[]},t.prototype.has=function(t){return-1!==this.values.indexOf(t)},t.prototype.add=function(t){return this.has(t)||this.values.push(t),this},t.prototype[\"delete\"]=function(t){var e;return-1===(e=this.values.indexOf(t))?!1:(this.values.splice(e,1),!0)},t.prototype.forEach=function(){var t;return(t=this.values).forEach.apply(t,arguments)},t}())}.call(this),function(t){function e(){}function n(t,e){return function(){t.apply(e,arguments)}}function o(t){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof t)throw new TypeError(\"not a function\");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],c(t,this)}function i(t,e){for(;3===t._state;)t=t._value;return 0===t._state?void t._deferreds.push(e):(t._handled=!0,void h(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._state?r:s)(e.promise,t._value);var o;try{o=n(t._value)}catch(i){return void s(e.promise,i)}r(e.promise,o)}))}function r(t,e){try{if(e===t)throw new TypeError(\"A promise cannot be resolved with itself.\");if(e&&(\"object\"==typeof e||\"function\"==typeof e)){var i=e.then;if(e instanceof o)return t._state=3,t._value=e,void a(t);if(\"function\"==typeof i)return void c(n(i,e),t)}t._state=1,t._value=e,a(t)}catch(r){s(t,r)}}function s(t,e){t._state=2,t._value=e,a(t)}function a(t){2===t._state&&0===t._deferreds.length&&setTimeout(function(){t._handled||p(t._value)},1);for(var e=0,n=t._deferreds.length;n>e;e++)i(t,t._deferreds[e]);t._deferreds=null}function u(t,e,n){this.onFulfilled=\"function\"==typeof t?t:null,this.onRejected=\"function\"==typeof e?e:null,this.promise=n}function c(t,e){var n=!1;try{t(function(t){n||(n=!0,r(e,t))},function(t){n||(n=!0,s(e,t))})}catch(o){if(n)return;n=!0,s(e,o)}}var l=setTimeout,h=\"function\"==typeof setImmediate&&setImmediate||function(t){l(t,1)},p=function(t){\"undefined\"!=typeof console&&console&&console.warn(\"Possible Unhandled Promise Rejection:\",t)};o.prototype[\"catch\"]=function(t){return this.then(null,t)},o.prototype.then=function(t,n){var r=new o(e);return i(this,new u(t,n,r)),r},o.all=function(t){var e=Array.prototype.slice.call(t);return new o(function(t,n){function o(r,s){try{if(s&&(\"object\"==typeof s||\"function\"==typeof s)){var a=s.then;if(\"function\"==typeof a)return void a.call(s,function(t){o(r,t)},n)}e[r]=s,0===--i&&t(e)}catch(u){n(u)}}if(0===e.length)return t([]);for(var i=e.length,r=0;ro;o++)t[o].then(e,n)})},o._setImmediateFn=function(t){h=t},o._setUnhandledRejectionFn=function(t){p=t},\"undefined\"!=typeof module&&module.exports?module.exports=o:t.Promise||(t.Promise=o)}(this),/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\"undefined\"==typeof WeakMap&&!function(){var t=Object.defineProperty,e=Date.now()%1e9,n=function(){this.name=\"__st\"+(1e9*Math.random()>>>0)+(e++ +\"__\")};n.prototype={set:function(e,n){var o=e[this.name];return o&&o[0]===e?o[1]=n:t(e,this.name,{value:[e,n],writable:!0}),this},get:function(t){var e;return(e=t[this.name])&&e[0]===t?e[1]:void 0},\"delete\":function(t){var e=t[this.name];return e&&e[0]===t?(e[0]=e[1]=void 0,!0):!1},has:function(t){var e=t[this.name];return e?e[0]===t:!1}},window.WeakMap=n}(),function(t){function e(t){A.push(t),b||(b=!0,g(o))}function n(t){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(t)||t}function o(){b=!1;var t=A;A=[],t.sort(function(t,e){return t.uid_-e.uid_});var e=!1;t.forEach(function(t){var n=t.takeRecords();i(t),n.length&&(t.callback_(n,t),e=!0)}),e&&o()}function i(t){t.nodes_.forEach(function(e){var n=m.get(e);n&&n.forEach(function(e){e.observer===t&&e.removeTransientObservers()})})}function r(t,e){for(var n=t;n;n=n.parentNode){var o=m.get(n);if(o)for(var i=0;i0){var i=n[o-1],r=d(i,t);if(r)return void(n[o-1]=r)}else e(this.observer);n[o]=t},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(t){var e=this.options;e.attributes&&t.addEventListener(\"DOMAttrModified\",this,!0),e.characterData&&t.addEventListener(\"DOMCharacterDataModified\",this,!0),e.childList&&t.addEventListener(\"DOMNodeInserted\",this,!0),(e.childList||e.subtree)&&t.addEventListener(\"DOMNodeRemoved\",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(t){var e=this.options;e.attributes&&t.removeEventListener(\"DOMAttrModified\",this,!0),e.characterData&&t.removeEventListener(\"DOMCharacterDataModified\",this,!0),e.childList&&t.removeEventListener(\"DOMNodeInserted\",this,!0),(e.childList||e.subtree)&&t.removeEventListener(\"DOMNodeRemoved\",this,!0)},addTransientObserver:function(t){if(t!==this.target){this.addListeners_(t),this.transientObservedNodes.push(t);var e=m.get(t);e||m.set(t,e=[]),e.push(this)}},removeTransientObservers:function(){var t=this.transientObservedNodes;this.transientObservedNodes=[],t.forEach(function(t){this.removeListeners_(t);for(var e=m.get(t),n=0;n=0)){n.push(t);for(var o,i=t.querySelectorAll(\"link[rel=\"+s+\"]\"),a=0,u=i.length;u>a&&(o=i[a]);a++)o.import&&r(o.import,e,n);e(t)}}var s=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:\"none\";t.forDocumentTree=i,t.forSubtree=e}),window.CustomElements.addModule(function(t){function e(t,e){return n(t,e)||o(t,e)}function n(e,n){return t.upgrade(e,n)?!0:void(n&&s(e))}function o(t,e){b(t,function(t){return n(t,e)?!0:void 0})}function i(t){x.push(t),w||(w=!0,setTimeout(r))}function r(){w=!1;for(var t,e=x,n=0,o=e.length;o>n&&(t=e[n]);n++)t();x=[]}function s(t){C?i(function(){a(t)}):a(t)}function a(t){t.__upgraded__&&!t.__attached&&(t.__attached=!0,t.attachedCallback&&t.attachedCallback())}function u(t){c(t),b(t,function(t){c(t)})}function c(t){C?i(function(){l(t)}):l(t)}function l(t){t.__upgraded__&&t.__attached&&(t.__attached=!1,t.detachedCallback&&t.detachedCallback())}function h(t){for(var e=t,n=window.wrap(document);e;){if(e==n)return!0;e=e.parentNode||e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&e.host}}function p(t){if(t.shadowRoot&&!t.shadowRoot.__watched){v.dom&&console.log(\"watching shadow-root for: \",t.localName);for(var e=t.shadowRoot;e;)g(e),e=e.olderShadowRoot}}function d(t,n){if(v.dom){var o=n[0];if(o&&\"childList\"===o.type&&o.addedNodes&&o.addedNodes){for(var i=o.addedNodes[0];i&&i!==document&&!i.host;)i=i.parentNode;var r=i&&(i.URL||i._URL||i.host&&i.host.localName)||\"\";r=r.split(\"/?\").shift().split(\"/\").pop()}console.group(\"mutations (%d) [%s]\",n.length,r||\"\")}var s=h(t);n.forEach(function(t){\"childList\"===t.type&&(E(t.addedNodes,function(t){t.localName&&e(t,s)}),E(t.removedNodes,function(t){t.localName&&u(t)}))}),v.dom&&console.groupEnd()}function f(t){for(t=window.wrap(t),t||(t=window.wrap(document));t.parentNode;)t=t.parentNode;var e=t.__observer;e&&(d(t,e.takeRecords()),r())}function g(t){if(!t.__observer){var e=new MutationObserver(d.bind(this,t));e.observe(t,{childList:!0,subtree:!0}),t.__observer=e}}function m(t){t=window.wrap(t),v.dom&&console.group(\"upgradeDocument: \",t.baseURI.split(\"/\").pop());var n=t===window.wrap(document);e(t,n),g(t),v.dom&&console.groupEnd()}function y(t){A(t,m)}var v=t.flags,b=t.forSubtree,A=t.forDocumentTree,C=window.MutationObserver._isPolyfilled&&v[\"throttle-attached\"];t.hasPolyfillMutations=C,t.hasThrottledAttached=C;var w=!1,x=[],E=Array.prototype.forEach.call.bind(Array.prototype.forEach),S=Element.prototype.createShadowRoot;S&&(Element.prototype.createShadowRoot=function(){var t=S.call(this);return window.CustomElements.watchShadow(this),t}),t.watchShadow=p,t.upgradeDocumentTree=y,t.upgradeDocument=m,t.upgradeSubtree=o,t.upgradeAll=e,t.attached=s,t.takeRecords=f}),window.CustomElements.addModule(function(t){function e(e,o){if(\"template\"===e.localName&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate&&HTMLTemplateElement.decorate(e),!e.__upgraded__&&e.nodeType===Node.ELEMENT_NODE){var i=e.getAttribute(\"is\"),r=t.getRegisteredDefinition(e.localName)||t.getRegisteredDefinition(i);if(r&&(i&&r.tag==e.localName||!i&&!r.extends))return n(e,r,o)}}function n(e,n,i){return s.upgrade&&console.group(\"upgrade:\",e.localName),n.is&&e.setAttribute(\"is\",n.is),o(e,n),e.__upgraded__=!0,r(e),i&&t.attached(e),t.upgradeSubtree(e,i),s.upgrade&&console.groupEnd(),e}function o(t,e){Object.__proto__?t.__proto__=e.prototype:(i(t,e.prototype,e.native),t.__proto__=e.prototype)}function i(t,e,n){for(var o={},i=e;i!==n&&i!==HTMLElement.prototype;){for(var r,s=Object.getOwnPropertyNames(i),a=0;r=s[a];a++)o[r]||(Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(i,r)),o[r]=1);i=Object.getPrototypeOf(i)}}function r(t){t.createdCallback&&t.createdCallback()}var s=t.flags;t.upgrade=e,t.upgradeWithDefinition=n,t.implementPrototype=o}),window.CustomElements.addModule(function(t){function e(e,o){var u=o||{};if(!e)throw new Error(\"document.registerElement: first argument `name` must not be empty\");if(e.indexOf(\"-\")<0)throw new Error(\"document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '\"+String(e)+\"'.\");if(i(e))throw new Error(\"Failed to execute 'registerElement' on 'Document': Registration failed for type '\"+String(e)+\"'. The type name is invalid.\");if(c(e))throw new Error(\"DuplicateDefinitionError: a type with name '\"+String(e)+\"' is already registered\");return u.prototype||(u.prototype=Object.create(HTMLElement.prototype)),u.__name=e.toLowerCase(),u.extends&&(u.extends=u.extends.toLowerCase()),u.lifecycle=u.lifecycle||{},u.ancestry=r(u.extends),s(u),a(u),n(u.prototype),l(u.__name,u),u.ctor=h(u),u.ctor.prototype=u.prototype,u.prototype.constructor=u.ctor,t.ready&&m(document),u.ctor}function n(t){if(!t.setAttribute._polyfilled){var e=t.setAttribute;t.setAttribute=function(t,n){o.call(this,t,n,e)};var n=t.removeAttribute;t.removeAttribute=function(t){o.call(this,t,null,n)},t.setAttribute._polyfilled=!0}}function o(t,e,n){t=t.toLowerCase();var o=this.getAttribute(t);n.apply(this,arguments);var i=this.getAttribute(t);this.attributeChangedCallback&&i!==o&&this.attributeChangedCallback(t,o,i)}function i(t){for(var e=0;e=0&&b(o,HTMLElement),o)}function f(t,e){var n=t[e];t[e]=function(){var t=n.apply(this,arguments);return y(t),t}}var g,m=(t.isIE,t.upgradeDocumentTree),y=t.upgradeAll,v=t.upgradeWithDefinition,b=t.implementPrototype,A=t.useNative,C=[\"annotation-xml\",\"color-profile\",\"font-face\",\"font-face-src\",\"font-face-uri\",\"font-face-format\",\"font-face-name\",\"missing-glyph\"],w={},x=\"http://www.w3.org/1999/xhtml\",E=document.createElement.bind(document),S=document.createElementNS.bind(document);g=Object.__proto__||A?function(t,e){return t instanceof e}:function(t,e){if(t instanceof e)return!0;for(var n=t;n;){if(n===e.prototype)return!0;n=n.__proto__}return!1},f(Node.prototype,\"cloneNode\"),f(document,\"importNode\"),document.registerElement=e,document.createElement=d,document.createElementNS=p,t.registry=w,t.instanceof=g,t.reservedTagList=C,t.getRegisteredDefinition=c,document.register=document.registerElement}),function(t){function e(){r(window.wrap(document)),window.CustomElements.ready=!0;var t=window.requestAnimationFrame||function(t){setTimeout(t,16)};t(function(){setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent(\"WebComponentsReady\",{bubbles:!0}))})})}{var n=t.useNative,o=t.initializeModules;t.isIE}if(n){var i=function(){};t.watchShadow=i,t.upgrade=i,t.upgradeAll=i,t.upgradeDocumentTree=i,t.upgradeSubtree=i,t.takeRecords=i,t.instanceof=function(t,e){return t instanceof e}}else o();var r=t.upgradeDocumentTree,s=t.upgradeDocument;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(t){return t}),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(t){t.import&&s(wrap(t.import))}),\"complete\"===document.readyState||t.flags.eager)e();else if(\"interactive\"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var a=window.HTMLImports&&!window.HTMLImports.ready?\"HTMLImportsLoaded\":\"DOMContentLoaded\";window.addEventListener(a,e)}else e()}(window.CustomElements),function(){}.call(this),function(){var t=this;(function(){(function(){this.Trix={VERSION:\"0.10.1\",ZERO_WIDTH_SPACE:\"\\ufeff\",NON_BREAKING_SPACE:\"\\xa0\",OBJECT_REPLACEMENT_CHARACTER:\"\\ufffc\",config:{}}}).call(this)}).call(t);var e=t.Trix;(function(){(function(){e.BasicObject=function(){function t(){}var e,n,o;return t.proxyMethod=function(t){var o,i,r,s,a;return r=n(t),o=r.name,s=r.toMethod,a=r.toProperty,i=r.optional,this.prototype[o]=function(){var t,n;return t=null!=s?i?\"function\"==typeof this[s]?this[s]():void 0:this[s]():null!=a?this[a]:void 0,i?(n=null!=t?t[o]:void 0,null!=n?e.call(n,t,arguments):void 0):(n=t[o],e.call(n,t,arguments))}},n=function(t){var e,n;if(!(n=t.match(o)))throw new Error(\"can't parse @proxyMethod expression: \"+t);return e={name:n[4]},null!=n[2]?e.toMethod=n[1]:e.toProperty=n[1],null!=n[3]&&(e.optional=!0),e},e=Function.prototype.apply,o=/^(.+?)(\\(\\))?(\\?)?\\.(.+?)$/,t}()}).call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Object=function(n){function o(){this.id=++i}var i;return t(o,n),i=0,o.fromJSONString=function(t){return this.fromJSON(JSON.parse(t))},o.prototype.hasSameConstructorAs=function(t){return this.constructor===(null!=t?t.constructor:void 0)},o.prototype.isEqualTo=function(t){return this===t},o.prototype.inspect=function(){var t,e,n;return t=function(){var t,o,i;o=null!=(t=this.contentsForInspection())?t:{},i=[];for(e in o)n=o[e],i.push(e+\"=\"+n);return i}.call(this),\"#<\"+this.constructor.name+\":\"+this.id+(t.length?\" \"+t.join(\", \"):\"\")+\">\"},o.prototype.contentsForInspection=function(){},o.prototype.toJSONString=function(){return JSON.stringify(this)},o.prototype.toUTF16String=function(){return e.UTF16String.box(this)},o.prototype.getCacheKey=function(){return this.id.toString()},o}(e.BasicObject)}.call(this),function(){e.extend=function(t){var e,n;for(e in t)n=t[e],this[e]=n;return this}}.call(this),function(){e.extend({defer:function(t){return setTimeout(t,1)}})}.call(this),function(){var t,n;e.extend({normalizeSpaces:function(t){return t.replace(RegExp(\"\"+e.ZERO_WIDTH_SPACE,\"g\"),\"\").replace(RegExp(\"\"+e.NON_BREAKING_SPACE,\"g\"),\" \")},summarizeStringChange:function(t,o){var i,r,s,a;return t=e.UTF16String.box(t),o=e.UTF16String.box(o),o.lengthn&&t.charAt(n).isEqualTo(e.charAt(n));)n++;for(;o>n+1&&t.charAt(o-1).isEqualTo(e.charAt(i-1));)o--,i--;return{utf16String:t.slice(n,o),offset:n}}}.call(this),function(){e.extend({copyObject:function(t){var e,n,o;null==t&&(t={}),n={};for(e in t)o=t[e],n[e]=o;return n},objectsAreEqual:function(t,e){var n,o;if(null==t&&(t={}),null==e&&(e={}),Object.keys(t).length!==Object.keys(e).length)return!1;for(n in t)if(o=t[n],o!==e[n])return!1;return!0}})}.call(this),function(){var t=[].slice;e.extend({arraysAreEqual:function(t,e){var n,o,i,r;if(null==t&&(t=[]),null==e&&(e=[]),t.length!==e.length)return!1;for(o=n=0,i=t.length;i>n;o=++n)if(r=t[o],r!==e[o])return!1;return!0},arrayStartsWith:function(t,n){return null==t&&(t=[]),null==n&&(n=[]),e.arraysAreEqual(t.slice(0,n.length),n)},spliceArray:function(){var e,n,o;return n=arguments[0],e=2<=arguments.length?t.call(arguments,1):[],o=n.slice(0),o.splice.apply(o,e),o},summarizeArrayChange:function(t,e){var n,o,i,r,s,a,u,c,l,h,p;for(null==t&&(t=[]),null==e&&(e=[]),n=[],h=[],i=new Set,r=0,u=t.length;u>r;r++)p=t[r],i.add(p);for(o=new Set,s=0,c=e.length;c>s;s++)p=e[s],o.add(p),i.has(p)||n.push(p);for(a=0,l=t.length;l>a;a++)p=t[a],o.has(p)||h.push(p);return{added:n,removed:h}}})}.call(this),function(){var t,n,o,i;t=null,n=null,i=null,o=null,e.extend({getAllAttributeNames:function(){return null!=t?t:t=e.getTextAttributeNames().concat(e.getBlockAttributeNames())},getBlockConfig:function(t){return e.config.blockAttributes[t]},getBlockAttributeNames:function(){return null!=n?n:n=Object.keys(e.config.blockAttributes)},getTextConfig:function(t){return e.config.textAttributes[t]},getTextAttributeNames:function(){return null!=i?i:i=Object.keys(e.config.textAttributes)},getListAttributeNames:function(){var t,n;return null!=o?o:o=function(){var o,i;o=e.config.blockAttributes,i=[];for(t in o)n=o[t].listAttribute,null!=n&&i.push(n);return i}()}})}.call(this),function(){var t,n,o,i,r,s=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=document.documentElement,n=null!=(o=null!=(i=null!=(r=t.matchesSelector)?r:t.webkitMatchesSelector)?i:t.msMatchesSelector)?o:t.mozMatchesSelector,e.extend({handleEvent:function(n,o){var i,r,s,a,u,c,l,h,p,d,f,g;return h=null!=o?o:{},c=h.onElement,u=h.matchingSelector,g=h.withCallback,a=h.inPhase,l=h.preventDefault,d=h.times,r=null!=c?c:t,p=u,i=g,f=\"capturing\"===a,s=function(t){var n;return null!=d&&0===--d&&s.destroy(),n=e.findClosestElementFromNode(t.target,{matchingSelector:p}),null!=n&&(null!=g&&g.call(n,t,n),l)?t.preventDefault():void 0},s.destroy=function(){return r.removeEventListener(n,s,f)},r.addEventListener(n,s,f),s},handleEventOnce:function(t,n){return null==n&&(n={}),n.times=1,e.handleEvent(t,n)},triggerEvent:function(n,o){var i,r,s,a,u,c,l;return l=null!=o?o:{},c=l.onElement,r=l.bubbles,s=l.cancelable,i=l.attributes,a=null!=c?c:t,r=r!==!1,s=s!==!1,u=document.createEvent(\"Events\"),u.initEvent(n,r,s),null!=i&&e.extend.call(u,i),a.dispatchEvent(u)},elementMatchesSelector:function(t,e){return 1===(null!=t?t.nodeType:void 0)?n.call(t,e):void 0},findClosestElementFromNode:function(t,n){var o,i,r;for(i=null!=n?n:{},o=i.matchingSelector,r=i.untilNode;null!=t&&t.nodeType!==Node.ELEMENT_NODE;)t=t.parentNode;if(null!=t){if(null==o)return t;if(t.closest&&null==r)return t.closest(o);for(;t&&t!==r;){if(e.elementMatchesSelector(t,o))return t;t=t.parentNode}}},findInnerElement:function(t){for(;null!=t?t.firstElementChild:void 0;)t=t.firstElementChild;return t},innerElementIsActive:function(t){return document.activeElement!==t&&e.elementContainsNode(t,document.activeElement)},elementContainsNode:function(t,e){if(t&&e)for(;e;){if(e===t)return!0;e=e.parentNode}},findNodeFromContainerAndOffset:function(t,e){var n;if(t)return t.nodeType===Node.TEXT_NODE?t:0===e?null!=(n=t.firstChild)?n:t:t.childNodes.item(e-1)},findElementFromContainerAndOffset:function(t,n){var o;return o=e.findNodeFromContainerAndOffset(t,n),e.findClosestElementFromNode(o)},findChildIndexOfNode:function(t){var e;if(null!=t?t.parentNode:void 0){for(e=0;t=t.previousSibling;)e++;return e}},walkTree:function(t,e){var n,o,i,r,s;return i=null!=e?e:{},o=i.onlyNodesOfType,r=i.usingFilter,n=i.expandEntityReferences,s=function(){switch(o){case\"element\":return NodeFilter.SHOW_ELEMENT;case\"text\":return NodeFilter.SHOW_TEXT;case\"comment\":return NodeFilter.SHOW_COMMENT;default:return NodeFilter.SHOW_ALL}}(),document.createTreeWalker(t,s,null!=r?r:null,n===!0)},tagName:function(t){var e;return null!=t&&null!=(e=t.tagName)?e.toLowerCase():void 0},makeElement:function(t,e){var n,o,i,r,s,a,u,c,l,h;if(null==e&&(e={}),\"object\"==typeof t?(e=t,t=e.tagName):e={attributes:e},o=document.createElement(t),null!=e.editable&&(null==e.attributes&&(e.attributes={}),e.attributes.contenteditable=e.editable),e.attributes){a=e.attributes;for(r in a)h=a[r],o.setAttribute(r,h)}if(e.style){u=e.style;for(r in u)h=u[r],o.style[r]=h}if(e.data){c=e.data;for(r in c)h=c[r],o.dataset[r]=h}if(e.className)for(l=e.className.split(\" \"),i=0,s=l.length;s>i;i++)n=l[i],o.classList.add(n);return e.textContent&&(o.textContent=e.textContent),o},cloneFragment:function(t){var e,n,o,i,r;for(e=document.createDocumentFragment(),r=t.childNodes,n=0,o=r.length;o>n;n++)i=r[n],e.appendChild(i.cloneNode(!0));return e},makeFragment:function(t){var e,n,o;for(null==t&&(t=\"\"),e=document.createElement(\"div\"),e.innerHTML=t,n=document.createDocumentFragment();o=e.firstChild;)n.appendChild(o);return n},getBlockTagNames:function(){var t,n;return null!=e.blockTagNames?e.blockTagNames:e.blockTagNames=function(){var o,i;o=e.config.blockAttributes,i=[];for(t in o)n=o[t],i.push(n.tagName);return i}()},nodeIsBlockContainer:function(t){return e.nodeIsBlockStartComment(null!=t?t.firstChild:void 0)},nodeProbablyIsBlockContainer:function(t){var n,o;return n=e.tagName(t),s.call(e.getBlockTagNames(),n)>=0&&(o=e.tagName(t.firstChild),s.call(e.getBlockTagNames(),o)<0)},nodeIsBlockStart:function(t,n){var o;return o=(null!=n?n:{strict:!0}).strict,o?e.nodeIsBlockStartComment(t):e.nodeIsBlockStartComment(t)||!e.nodeIsBlockStartComment(t.firstChild)&&e.nodeProbablyIsBlockContainer(t)},nodeIsBlockStartComment:function(t){return e.nodeIsCommentNode(t)&&\"block\"===(null!=t?t.data:void 0)},nodeIsCommentNode:function(t){return(null!=t?t.nodeType:void 0)===Node.COMMENT_NODE},nodeIsCursorTarget:function(t){return t?e.nodeIsTextNode(t)?t.data===e.ZERO_WIDTH_SPACE:e.nodeIsCursorTarget(t.firstChild):void 0},nodeIsAttachmentElement:function(t){return e.elementMatchesSelector(t,e.AttachmentView.attachmentSelector)},nodeIsEmptyTextNode:function(t){return e.nodeIsTextNode(t)&&\"\"===(null!=t?t.data:void 0)},nodeIsTextNode:function(t){return(null!=t?t.nodeType:void 0)===Node.TEXT_NODE}})}.call(this),function(){var t,n,o,i,r;t=e.copyObject,i=e.objectsAreEqual,e.extend({normalizeRange:o=function(t){var e;if(null!=t)return Array.isArray(t)||(t=[t,t]),[n(t[0]),n(null!=(e=t[1])?e:t[0])]},rangeIsCollapsed:function(t){var e,n,i;if(null!=t)return n=o(t),i=n[0],e=n[1],r(i,e)},rangesAreEqual:function(t,e){var n,i,s,a,u,c;if(null!=t&&null!=e)return s=o(t),i=s[0],n=s[1],a=o(e),c=a[0],u=a[1],r(i,c)&&r(n,u)}}),n=function(e){return\"number\"==typeof e?e:t(e)},r=function(t,e){return\"number\"==typeof t?t===e:i(t,e)}}.call(this),function(){var t,n,o,i;t={extendsTagName:\"div\",css:\"%t { display: block; }\"},e.registerElement=function(e,n){var r,s,a,u,c,l,h;return null==n&&(n={}),e=e.toLowerCase(),c=i(n),u=null!=(h=c.extendsTagName)?h:t.extendsTagName,delete c.extendsTagName,s=c.defaultCSS,delete c.defaultCSS,null!=s&&u===t.extendsTagName?s+=\"\\n\"+t.css:s=t.css,o(s,e),a=Object.getPrototypeOf(document.createElement(u)),a.__super__=a,l=Object.create(a,c),r=document.registerElement(e,{prototype:l}),Object.defineProperty(l,\"constructor\",{value:r}),r},o=function(t,e){var o;return o=n(e),o.textContent=t.replace(/%t/g,e)},n=function(t){var e;return e=document.createElement(\"style\"),e.setAttribute(\"type\",\"text/css\"),e.setAttribute(\"data-tag-name\",t.toLowerCase()),document.head.insertBefore(e,document.head.firstChild),e},i=function(t){var e,n,o;n={};for(e in t)o=t[e],n[e]=\"function\"==typeof o?{value:o}:o;return n}}.call(this),function(){var t,n;e.extend({getDOMSelection:function(){var t;return t=window.getSelection(),t.rangeCount>0?t:void 0},getDOMRange:function(){var n,o;return(n=null!=(o=e.getDOMSelection())?o.getRangeAt(0):void 0)&&!t(n)?n:void 0},setDOMRange:function(t){var n;return n=window.getSelection(),n.removeAllRanges(),n.addRange(t),e.selectionChangeObserver.update()}}),t=function(t){return n(t.startContainer)||n(t.endContainer)},n=function(t){return!Object.getPrototypeOf(t)}}.call(this),function(){}.call(this),function(){var t,n=function(t,e){function n(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},o={}.hasOwnProperty;t=e.arraysAreEqual,e.Hash=function(o){function i(t){null==t&&(t={}),this.values=s(t),i.__super__.constructor.apply(this,arguments)}var r,s,a,u,c;return n(i,o),i.fromCommonAttributesOfObjects=function(t){var e,n,o,i,s,a;if(null==t&&(t=[]),!t.length)return new this;for(e=r(t[0]),o=e.getKeys(),a=t.slice(1),n=0,i=a.length;i>n;n++)s=a[n],o=e.getKeysCommonToHash(r(s)),e=e.slice(o);return e},i.box=function(t){return r(t)},i.prototype.add=function(t,e){return this.merge(u(t,e))},i.prototype.remove=function(t){return new e.Hash(s(this.values,t))},i.prototype.get=function(t){return this.values[t]},i.prototype.has=function(t){return t in this.values},i.prototype.merge=function(t){return new e.Hash(a(this.values,c(t)))},i.prototype.slice=function(t){var n,o,i,r;for(r={},n=0,i=t.length;i>n;n++)o=t[n],this.has(o)&&(r[o]=this.values[o]);return new e.Hash(r)},i.prototype.getKeys=function(){return Object.keys(this.values)},i.prototype.getKeysCommonToHash=function(t){var e,n,o,i,s;for(t=r(t),i=this.getKeys(),s=[],e=0,o=i.length;o>e;e++)n=i[e],this.values[n]===t.values[n]&&s.push(n);return s},i.prototype.isEqualTo=function(e){return t(this.toArray(),r(e).toArray())},i.prototype.isEmpty=function(){return 0===this.getKeys().length},i.prototype.toArray=function(){var t,e,n;return(null!=this.array?this.array:this.array=function(){var o;e=[],o=this.values;for(t in o)n=o[t],e.push(t,n);return e}.call(this)).slice(0)},i.prototype.toObject=function(){return s(this.values)},i.prototype.toJSON=function(){return this.toObject()},i.prototype.contentsForInspection=function(){return{values:JSON.stringify(this.values)}},u=function(t,e){var n;return n={},n[t]=e,n},a=function(t,e){var n,o,i;o=s(t);for(n in e)i=e[n],o[n]=i;return o},s=function(t,e){var n,o,i,r,s;for(r={},s=Object.keys(t).sort(),n=0,i=s.length;i>n;n++)o=s[n],o!==e&&(r[o]=t[o]);return r},r=function(t){return t instanceof e.Hash?t:new e.Hash(t)},c=function(t){return t instanceof e.Hash?t.values:t},i}(e.Object)}.call(this),function(){e.ObjectGroup=function(){function t(t,e){var n,o;this.objects=null!=t?t:[],o=e.depth,n=e.asTree,n&&(this.depth=o,this.objects=this.constructor.groupObjects(this.objects,{asTree:n,depth:this.depth+1}))}return t.groupObjects=function(t,e){var n,o,i,r,s,a,u,c,l;for(null==t&&(t=[]),l=null!=e?e:{},i=l.depth,n=l.asTree,n&&null==i&&(i=0),c=[],s=0,a=t.length;a>s;s++){if(u=t[s],r){if((\"function\"==typeof u.canBeGrouped?u.canBeGrouped(i):void 0)&&(\"function\"==typeof(o=r[r.length-1]).canBeGroupedWith?o.canBeGroupedWith(u,i):void 0)){r.push(u);continue}c.push(new this(r,{depth:i,asTree:n})),r=null}(\"function\"==typeof u.canBeGrouped?u.canBeGrouped(i):void 0)?r=[u]:c.push(u)}return r&&c.push(new this(r,{depth:i,asTree:n})),c},t.prototype.getObjects=function(){return this.objects},t.prototype.getDepth=function(){return this.depth},t.prototype.getCacheKey=function(){var t,e,n,o,i;for(e=[\"objectGroup\"],i=this.getObjects(),t=0,n=i.length;n>t;t++)o=i[t],e.push(o.getCacheKey());return e.join(\"/\")},t}()}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.ObjectMap=function(e){function n(t){var e,n,o,i,r;for(null==t&&(t=[]),this.objects={},o=0,i=t.length;i>o;o++)r=t[o],n=JSON.stringify(r),null==(e=this.objects)[n]&&(e[n]=r)}return t(n,e),n.prototype.find=function(t){var e;return e=JSON.stringify(t),this.objects[e]},n}(e.BasicObject)}.call(this),function(){e.ElementStore=function(){function t(t){this.reset(t)}var e;return t.prototype.add=function(t){var n;return n=e(t),this.elements[n]=t},t.prototype.remove=function(t){var n,o;return n=e(t),(o=this.elements[n])?(delete this.elements[n],o):void 0},t.prototype.reset=function(t){var e,n,o;for(null==t&&(t=[]),this.elements={},n=0,o=t.length;o>n;n++)e=t[n],this.add(e);return t},e=function(t){return t.dataset.trixStoreKey},t}()}.call(this),function(){}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Operation=function(e){function n(){return n.__super__.constructor.apply(this,arguments)}return t(n,e),n.prototype.isPerforming=function(){return this.performing===!0},n.prototype.hasPerformed=function(){return this.performed===!0},n.prototype.hasSucceeded=function(){return this.performed&&this.succeeded},n.prototype.hasFailed=function(){return this.performed&&!this.succeeded},n.prototype.getPromise=function(){return null!=this.promise?this.promise:this.promise=new Promise(function(t){return function(e,n){return t.performing=!0,t.perform(function(o,i){return t.succeeded=o,t.performing=!1,t.performed=!0,t.succeeded?e(i):n(i)})}}(this))},n.prototype.perform=function(t){return t(!1)},n.prototype.release=function(){var t;return null!=(t=this.promise)&&\"function\"==typeof t.cancel&&t.cancel(),this.promise=null,this.performing=null,this.performed=null,this.succeeded=null\n},n.proxyMethod(\"getPromise().then\"),n.proxyMethod(\"getPromise().catch\"),n}(e.BasicObject)}.call(this),function(){var t,n,o,i,r,s=function(t,e){function n(){this.constructor=t}for(var o in e)a.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},a={}.hasOwnProperty;e.UTF16String=function(t){function e(t,e){this.ucs2String=t,this.codepoints=e,this.length=this.codepoints.length,this.ucs2Length=this.ucs2String.length}return s(e,t),e.box=function(t){return null==t&&(t=\"\"),t instanceof this?t:this.fromUCS2String(null!=t?t.toString():void 0)},e.fromUCS2String=function(t){return new this(t,i(t))},e.fromCodepoints=function(t){return new this(r(t),t)},e.prototype.offsetToUCS2Offset=function(t){return r(this.codepoints.slice(0,Math.max(0,t))).length},e.prototype.offsetFromUCS2Offset=function(t){return i(this.ucs2String.slice(0,Math.max(0,t))).length},e.prototype.slice=function(){var t;return this.constructor.fromCodepoints((t=this.codepoints).slice.apply(t,arguments))},e.prototype.charAt=function(t){return this.slice(t,t+1)},e.prototype.isEqualTo=function(t){return this.constructor.box(t).ucs2String===this.ucs2String},e.prototype.toJSON=function(){return this.ucs2String},e.prototype.getCacheKey=function(){return this.ucs2String},e.prototype.toString=function(){return this.ucs2String},e}(e.BasicObject),t=1===(\"function\"==typeof Array.from?Array.from(\"\\ud83d\\udc7c\").length:void 0),n=null!=(\"function\"==typeof\" \".codePointAt?\" \".codePointAt(0):void 0),o=\" \\ud83d\\udc7c\"===(\"function\"==typeof String.fromCodePoint?String.fromCodePoint(32,128124):void 0),i=t&&n?function(t){return Array.from(t).map(function(t){return t.codePointAt(0)})}:function(t){var e,n,o,i,r;for(i=[],e=0,o=t.length;o>e;)r=t.charCodeAt(e++),r>=55296&&56319>=r&&o>e&&(n=t.charCodeAt(e++),56320===(64512&n)?r=((1023&r)<<10)+(1023&n)+65536:e--),i.push(r);return i},r=o?function(t){return String.fromCodePoint.apply(String,t)}:function(t){var e,n,o;return e=function(){var e,i,r;for(r=[],e=0,i=t.length;i>e;e++)o=t[e],n=\"\",o>65535&&(o-=65536,n+=String.fromCharCode(o>>>10&1023|55296),o=56320|1023&o),r.push(n+String.fromCharCode(o));return r}(),e.join(\"\")}}.call(this),function(){}.call(this),function(){}.call(this),function(){e.config.lang={bold:\"Bold\",bullets:\"Bullets\",\"byte\":\"Byte\",bytes:\"Bytes\",captionPlaceholder:\"Type a caption here\\u2026\",captionPrompt:\"Add a caption\\u2026\",code:\"Code\",heading1:\"Heading\",indent:\"Increase Level\",italic:\"Italic\",link:\"Link\",numbers:\"Numbers\",outdent:\"Decrease Level\",quote:\"Quote\",redo:\"Redo\",remove:\"Remove\",strike:\"Strikethrough\",undo:\"Undo\",unlink:\"Unlink\",urlPlaceholder:\"Enter a URL\\u2026\",GB:\"GB\",KB:\"KB\",MB:\"MB\",PB:\"PB\",TB:\"TB\"}}.call(this),function(){e.config.css={classNames:{attachment:{container:\"attachment\",typePrefix:\"attachment-\",caption:\"caption\",captionEdited:\"caption-edited\",captionEditor:\"caption-editor\",editingCaption:\"caption-editing\",progressBar:\"progress\",removeButton:\"remove icon\",size:\"size\"}}}}.call(this),function(){var t;e.config.blockAttributes=t={\"default\":{tagName:\"div\",parse:!1},quote:{tagName:\"blockquote\",nestable:!0},heading1:{tagName:\"h1\",terminal:!0,breakOnReturn:!0,group:!1},code:{tagName:\"pre\",terminal:!0,text:{plaintext:!0}},bulletList:{tagName:\"ul\",parse:!1},bullet:{tagName:\"li\",listAttribute:\"bulletList\",group:!1,nestable:!0,test:function(n){return e.tagName(n.parentNode)===t[this.listAttribute].tagName}},numberList:{tagName:\"ol\",parse:!1},number:{tagName:\"li\",listAttribute:\"numberList\",group:!1,nestable:!0,test:function(n){return e.tagName(n.parentNode)===t[this.listAttribute].tagName}}}}.call(this),function(){var t,n;t=e.config.lang,n=[t.bytes,t.KB,t.MB,t.GB,t.TB,t.PB],e.config.fileSize={prefix:\"IEC\",precision:2,formatter:function(e){var o,i,r,s,a;switch(e){case 0:return\"0 \"+t.bytes;case 1:return\"1 \"+t.byte;default:return o=function(){switch(this.prefix){case\"SI\":return 1e3;case\"IEC\":return 1024}}.call(this),i=Math.floor(Math.log(e)/Math.log(o)),r=e/Math.pow(o,i),s=r.toFixed(this.precision),a=s.replace(/0*$/,\"\").replace(/\\.$/,\"\"),a+\" \"+n[i]}}}}.call(this),function(){e.config.textAttributes={bold:{tagName:\"strong\",inheritable:!0,parser:function(t){var e;return e=window.getComputedStyle(t),\"bold\"===e.fontWeight||e.fontWeight>=600}},italic:{tagName:\"em\",inheritable:!0,parser:function(t){var e;return e=window.getComputedStyle(t),\"italic\"===e.fontStyle}},href:{groupTagName:\"a\",parser:function(t){var n,o,i;return n=e.AttachmentView.attachmentSelector,i=\"a:not(\"+n+\")\",(o=e.findClosestElementFromNode(t,{matchingSelector:i}))?o.getAttribute(\"href\"):void 0}},strike:{tagName:\"del\",inheritable:!0},frozen:{style:{backgroundColor:\"highlight\"}}}}.call(this),function(){var t,n,o,i,r;r=\"[data-trix-serialize=false]\",i=[\"contenteditable\",\"data-trix-id\",\"data-trix-store-key\",\"data-trix-mutable\"],n=\"data-trix-serialized-attributes\",o=\"[\"+n+\"]\",t=new RegExp(\"\",\"g\"),e.extend({serializers:{\"application/json\":function(t){var n;if(t instanceof e.Document)n=t;else{if(!(t instanceof HTMLElement))throw new Error(\"unserializable object\");n=e.Document.fromHTML(t.innerHTML)}return n.toSerializableDocument().toJSONString()},\"text/html\":function(s){var a,u,c,l,h,p,d,f,g,m,y,v,b,A,C,w,x;if(s instanceof e.Document)l=e.DocumentView.render(s);else{if(!(s instanceof HTMLElement))throw new Error(\"unserializable object\");l=s.cloneNode(!0)}for(A=l.querySelectorAll(r),h=0,g=A.length;g>h;h++)c=A[h],c.parentNode.removeChild(c);for(p=0,m=i.length;m>p;p++)for(a=i[p],C=l.querySelectorAll(\"[\"+a+\"]\"),d=0,y=C.length;y>d;d++)c=C[d],c.removeAttribute(a);for(w=l.querySelectorAll(o),f=0,v=w.length;v>f;f++){c=w[f];try{u=JSON.parse(c.getAttribute(n)),c.removeAttribute(n);for(b in u)x=u[b],c.setAttribute(b,x)}catch(E){}}return l.innerHTML.replace(t,\"\")}},deserializers:{\"application/json\":function(t){return e.Document.fromJSONString(t)},\"text/html\":function(t){return e.Document.fromHTML(t)}},serializeToContentType:function(t,n){var o;if(o=e.serializers[n])return o(t);throw new Error(\"unknown content type: \"+n)},deserializeFromContentType:function(t,n){var o;if(o=e.deserializers[n])return o(t);throw new Error(\"unknown content type: \"+n)}})}.call(this),function(){var t,n;n=e.makeFragment,t=e.config.lang,e.config.toolbar={content:n('
      \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n
      \\n\\n
      \\n
      \\n \\n
      \\n
      ')}}.call(this),function(){e.config.undoInterval=5e3}.call(this),function(){var t,n;t=e.makeElement,n={cursorTarget:t({tagName:\"span\",textContent:e.ZERO_WIDTH_SPACE,data:{trixSelection:!0,trixCursorTarget:!0,trixSerialize:!1}})},e.extend({selectionElements:{selector:\"[data-trix-selection]\",cssText:\"font-size: 0 !important;\\npadding: 0 !important;\\nmargin: 0 !important;\\nborder: none !important;\\nline-height: 0 !important;\",create:function(t){return n[t].cloneNode(!0)}}})}.call(this),function(){}.call(this),function(){var t;t=e.cloneFragment,e.registerElement(\"trix-toolbar\",{defaultCSS:\"%t {\\n white-space: collapse;\\n}\\n\\n%t .dialog {\\n display: none;\\n}\\n\\n%t .dialog.active {\\n display: block;\\n}\\n\\n%t .dialog input.validate:invalid {\\n background-color: #ffdddd;\\n}\\n\\n%t[native] {\\n display: none;\\n}\",createdCallback:function(){return\"\"===this.innerHTML?this.appendChild(t(e.config.toolbar.content)):void 0}})}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty,o=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};e.ObjectView=function(n){function i(t,e){this.object=t,this.options=null!=e?e:{},this.childViews=[],this.rootView=this}return t(i,n),i.prototype.getNodes=function(){var t,e,n,o,i;for(null==this.nodes&&(this.nodes=this.createNodes()),o=this.nodes,i=[],t=0,e=o.length;e>t;t++)n=o[t],i.push(n.cloneNode(!0));return i},i.prototype.invalidate=function(){var t;return this.nodes=null,null!=(t=this.parentView)?t.invalidate():void 0},i.prototype.invalidateViewForObject=function(t){var e;return null!=(e=this.findViewForObject(t))?e.invalidate():void 0},i.prototype.findOrCreateCachedChildView=function(t,e){var n;return(n=this.getCachedViewForObject(e))?this.recordChildView(n):(n=this.createChildView.apply(this,arguments),this.cacheViewForObject(n,e)),n},i.prototype.createChildView=function(t,n,o){var i;return null==o&&(o={}),n instanceof e.ObjectGroup&&(o.viewClass=t,t=e.ObjectGroupView),i=new t(n,o),this.recordChildView(i)},i.prototype.recordChildView=function(t){return t.parentView=this,t.rootView=this.rootView,o.call(this.childViews,t)<0&&this.childViews.push(t),t},i.prototype.getAllChildViews=function(){var t,e,n,o,i;for(i=[],o=this.childViews,e=0,n=o.length;n>e;e++)t=o[e],i.push(t),i=i.concat(t.getAllChildViews());return i},i.prototype.findElement=function(){return this.findElementForObject(this.object)},i.prototype.findElementForObject=function(t){var e;return(e=null!=t?t.id:void 0)?this.rootView.element.querySelector(\"[data-trix-id='\"+e+\"']\"):void 0},i.prototype.findViewForObject=function(t){var e,n,o,i;for(o=this.getAllChildViews(),e=0,n=o.length;n>e;e++)if(i=o[e],i.object===t)return i},i.prototype.getViewCache=function(){return this.rootView!==this?this.rootView.getViewCache():this.isViewCachingEnabled()?null!=this.viewCache?this.viewCache:this.viewCache={}:void 0},i.prototype.isViewCachingEnabled=function(){return this.shouldCacheViews!==!1},i.prototype.enableViewCaching=function(){return this.shouldCacheViews=!0},i.prototype.disableViewCaching=function(){return this.shouldCacheViews=!1},i.prototype.getCachedViewForObject=function(t){var e;return null!=(e=this.getViewCache())?e[t.getCacheKey()]:void 0},i.prototype.cacheViewForObject=function(t,e){var n;return null!=(n=this.getViewCache())?n[e.getCacheKey()]=t:void 0},i.prototype.garbageCollectCachedViews=function(){var t,e,n,i,r,s;if(t=this.getViewCache()){s=this.getAllChildViews().concat(this),n=function(){var t,e,n;for(n=[],t=0,e=s.length;e>t;t++)r=s[t],n.push(r.object.getCacheKey());return n}(),i=[];for(e in t)o.call(n,e)<0&&i.push(delete t[e]);return i}},i}(e.BasicObject)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.ObjectGroupView=function(e){function n(){n.__super__.constructor.apply(this,arguments),this.objectGroup=this.object,this.viewClass=this.options.viewClass,delete this.options.viewClass}return t(n,e),n.prototype.getChildViews=function(){var t,e,n,o;if(!this.childViews.length)for(o=this.objectGroup.getObjects(),t=0,e=o.length;e>t;t++)n=o[t],this.findOrCreateCachedChildView(this.viewClass,n,this.options);return this.childViews},n.prototype.createNodes=function(){var t,e,n,o,i,r,s,a,u;for(t=this.createContainerElement(),s=this.getChildViews(),e=0,o=s.length;o>e;e++)for(u=s[e],a=u.getNodes(),n=0,i=a.length;i>n;n++)r=a[n],t.appendChild(r);return[t]},n.prototype.createContainerElement=function(t){return null==t&&(t=this.objectGroup.getDepth()),this.getChildViews()[0].createContainerElement(t)},n}(e.ObjectView)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Controller=function(e){function n(){return n.__super__.constructor.apply(this,arguments)}return t(n,e),n}(e.BasicObject)}.call(this),function(){var t,n,o,i,r,s,a=function(t,e){return function(){return t.apply(e,arguments)}},u=function(t,e){function n(){this.constructor=t}for(var o in e)c.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},c={}.hasOwnProperty,l=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=e.findClosestElementFromNode,o=e.nodeIsEmptyTextNode,n=e.nodeIsBlockStartComment,i=e.normalizeSpaces,r=e.summarizeStringChange,s=e.tagName,e.MutationObserver=function(e){function c(t){this.element=t,this.didMutate=a(this.didMutate,this),this.observer=new window.MutationObserver(this.didMutate),this.start()}var h,p,d,f;return u(c,e),p=\"data-trix-mutable\",d=\"[\"+p+\"]\",f={attributes:!0,childList:!0,characterData:!0,characterDataOldValue:!0,subtree:!0},c.prototype.start=function(){return this.reset(),this.observer.observe(this.element,f)},c.prototype.stop=function(){return this.observer.disconnect()},c.prototype.didMutate=function(t){var e,n;return(e=this.mutations).push.apply(e,this.findSignificantMutations(t)),this.mutations.length?(null!=(n=this.delegate)&&\"function\"==typeof n.elementDidMutate&&n.elementDidMutate(this.getMutationSummary()),this.reset()):void 0},c.prototype.reset=function(){return this.mutations=[]},c.prototype.findSignificantMutations=function(t){var e,n,o,i;for(i=[],e=0,n=t.length;n>e;e++)o=t[e],this.mutationIsSignificant(o)&&i.push(o);return i},c.prototype.mutationIsSignificant=function(t){var e,n,o,i;for(i=this.nodesModifiedByMutation(t),e=0,n=i.length;n>e;e++)if(o=i[e],this.nodeIsSignificant(o))return!0;return!1},c.prototype.nodeIsSignificant=function(t){return t!==this.element&&!this.nodeIsMutable(t)&&!o(t)},c.prototype.nodeIsMutable=function(e){return t(e,{matchingSelector:d})},c.prototype.nodesModifiedByMutation=function(t){var e;switch(e=[],t.type){case\"attributes\":t.attributeName!==p&&e.push(t.target);break;case\"characterData\":e.push(t.target.parentNode),e.push(t.target);break;case\"childList\":e.push.apply(e,t.addedNodes),e.push.apply(e,t.removedNodes)}return e},c.prototype.getMutationSummary=function(){return this.getTextMutationSummary()},c.prototype.getTextMutationSummary=function(){var t,e,n,o,i,r,s,a,u,c,h;for(a=this.getTextChangesFromCharacterData(),n=a.additions,i=a.deletions,h=this.getTextChangesFromChildList(),u=h.additions,r=0,s=u.length;s>r;r++)e=u[r],l.call(n,e)<0&&n.push(e);return i.push.apply(i,h.deletions),c={},(t=n.join(\"\"))&&(c.textAdded=t),(o=i.join(\"\"))&&(c.textDeleted=o),c},c.prototype.getMutationsByType=function(t){var e,n,o,i,r;for(i=this.mutations,r=[],e=0,n=i.length;n>e;e++)o=i[e],o.type===t&&r.push(o);return r},c.prototype.getTextChangesFromChildList=function(){var t,e,o,r,s,a,u,c,l,p,d;for(t=[],u=[],a=this.getMutationsByType(\"childList\"),e=0,r=a.length;r>e;e++)s=a[e],t.push.apply(t,s.addedNodes),u.push.apply(u,s.removedNodes);return c=0===t.length&&1===u.length&&n(u[0]),c?(p=[],d=[\"\\n\"]):(p=h(t),d=h(u)),{additions:function(){var t,e,n;for(n=[],o=t=0,e=p.length;e>t;o=++t)l=p[o],l!==d[o]&&n.push(i(l));return n}(),deletions:function(){var t,e,n;for(n=[],o=t=0,e=d.length;e>t;o=++t)l=d[o],l!==p[o]&&n.push(i(l));return n}()}},c.prototype.getTextChangesFromCharacterData=function(){var t,e,n,o,s,a,u,c;return e=this.getMutationsByType(\"characterData\"),e.length&&(c=e[0],n=e[e.length-1],s=i(c.oldValue),o=i(n.target.data),a=r(s,o),t=a.added,u=a.removed),{additions:t?[t]:[],deletions:u?[u]:[]}},h=function(t){var e,n,o,i;for(null==t&&(t=[]),i=[],e=0,n=t.length;n>e;e++)switch(o=t[e],o.nodeType){case Node.TEXT_NODE:i.push(o.data);break;case Node.ELEMENT_NODE:\"br\"===s(o)?i.push(\"\\n\"):i.push.apply(i,h(o.childNodes))}return i},c}(e.BasicObject)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.FileVerificationOperation=function(e){function n(t){this.file=t}return t(n,e),n.prototype.perform=function(t){var e;return e=new FileReader,e.onerror=function(){return t(!1)},e.onload=function(n){return function(){e.onerror=null;try{e.abort()}catch(o){}return t(!0,n.file)}}(this),e.readAsArrayBuffer(this.file)},n}(e.Operation)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.CompositionInput=function(e){function n(t){var e;this.inputController=t,e=this.inputController,this.responder=e.responder,this.delegate=e.delegate,this.inputSummary=e.inputSummary,this.data={}}return t(n,e),n.prototype.start=function(t){var e,n;return this.data.start=t,\"keypress\"===this.inputSummary.eventName&&this.inputSummary.textAdded&&null!=(e=this.responder)&&e.deleteInDirection(\"left\"),this.selectionIsExpanded()||(this.insertPlaceholder(),this.requestRender()),this.range=null!=(n=this.responder)?n.getSelectedRange():void 0},n.prototype.update=function(t){var e;return this.data.update=t,(e=this.selectPlaceholder())?(this.forgetPlaceholder(),this.range=e):void 0},n.prototype.end=function(t){var e,n,o,i;return this.data.end=t,this.forgetPlaceholder(),this.canApplyToDocument()?(this.setInputSummary({preferDocument:!0}),null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),null!=(n=this.responder)&&n.setSelectedRange(this.range),null!=(o=this.responder)&&o.insertString(this.data.end),null!=(i=this.responder)?i.setSelectedRange(this.range[0]+this.data.end.length):void 0):null!=this.data.start||null!=this.data.update?(this.requestReparse(),this.inputController.reset()):void 0},n.prototype.getEndData=function(){return this.data.end},n.prototype.isEnded=function(){return null!=this.getEndData()},n.prototype.canApplyToDocument=function(){var t,e;return 0===(null!=(t=this.data.start)?t.length:void 0)&&(null!=(e=this.data.end)?e.length:void 0)>0&&null!=this.range},n.proxyMethod(\"inputController.setInputSummary\"),n.proxyMethod(\"inputController.requestRender\"),n.proxyMethod(\"inputController.requestReparse\"),n.proxyMethod(\"responder?.selectionIsExpanded\"),n.proxyMethod(\"responder?.insertPlaceholder\"),n.proxyMethod(\"responder?.selectPlaceholder\"),n.proxyMethod(\"responder?.forgetPlaceholder\"),n}(e.BasicObject)}.call(this),function(){var t,n,o,i,r,s,a,u,c,l,h,p,d,f=function(t,e){function n(){this.constructor=t}for(var o in e)g.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},g={}.hasOwnProperty,m=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};i=e.handleEvent,c=e.makeElement,r=e.innerElementIsActive,l=e.objectsAreEqual,p=e.tagName,e.InputController=function(p){function d(t){var n;this.element=t,this.resetInputSummary(),this.mutationObserver=new e.MutationObserver(this.element),this.mutationObserver.delegate=this;for(n in this.events)i(n,{onElement:this.element,withCallback:this.handlerFor(n),inPhase:\"capturing\"})}var g;return f(d,p),g=0,d.keyNames={8:\"backspace\",9:\"tab\",13:\"return\",37:\"left\",39:\"right\",46:\"delete\",68:\"d\",72:\"h\",79:\"o\"},d.prototype.handlerFor=function(t){return function(e){return function(n){return e.handleInput(function(){return r(this.element)?void 0:(this.eventName=t,this.events[t].call(this,n))})}}(this)},d.prototype.setInputSummary=function(t){var e,n;null==t&&(t={}),this.inputSummary.eventName=this.eventName;for(e in t)n=t[e],this.inputSummary[e]=n;return this.inputSummary},d.prototype.resetInputSummary=function(){return this.inputSummary={}},d.prototype.reset=function(){return this.resetInputSummary(),e.selectionChangeObserver.reset()},d.prototype.editorWillSyncDocumentView=function(){return this.mutationObserver.stop()},d.prototype.editorDidSyncDocumentView=function(){return this.mutationObserver.start()},d.prototype.requestRender=function(){var t;return null!=(t=this.delegate)&&\"function\"==typeof t.inputControllerDidRequestRender?t.inputControllerDidRequestRender():void 0},d.prototype.requestReparse=function(){var t;return null!=(t=this.delegate)&&\"function\"==typeof t.inputControllerDidRequestReparse&&t.inputControllerDidRequestReparse(),this.requestRender()},d.prototype.elementDidMutate=function(t){var e;return this.isComposing()?null!=(e=this.delegate)&&\"function\"==typeof e.inputControllerDidAllowUnhandledInput?e.inputControllerDidAllowUnhandledInput():void 0:this.handleInput(function(){return this.mutationIsSignificant(t)&&(this.mutationIsExpected(t)?this.requestRender():this.requestReparse()),this.reset()})},d.prototype.mutationIsExpected=function(t){var e,n,o,i,r,s,a,u,c,l;return a=t.textAdded,u=t.textDeleted,this.inputSummary.preferDocument?!0:(e=null!=a?a===this.inputSummary.textAdded:!this.inputSummary.textAdded,n=null!=u?this.inputSummary.didDelete:!this.inputSummary.didDelete,c=\"\\n\"===a&&!e,l=\"\\n\"===u&&!n,s=c&&!l||l&&!c,s&&(i=this.getSelectedRange())&&(o=c?-1:1,null!=(r=this.responder)?r.positionIsBlockBreak(i[1]+o):void 0)?!0:e&&n)},d.prototype.mutationIsSignificant=function(t){var e,n,o;return o=Object.keys(t).length>0,e=\"\"===(null!=(n=this.compositionInput)?n.getEndData():void 0),o||!e},d.prototype.attachFiles=function(t){var n,o;return o=function(){var o,i,r;for(r=[],o=0,i=t.length;i>o;o++)n=t[o],r.push(new e.FileVerificationOperation(n));return r}(),Promise.all(o).then(function(t){return function(e){return t.handleInput(function(){var t,n;return null!=(t=this.delegate)&&t.inputControllerWillAttachFiles(),null!=(n=this.responder)&&n.insertFiles(e),this.requestRender()})}}(this))},d.prototype.events={keydown:function(t){var n,o,i,r,a,u,c,l,h;if(this.isComposing()||this.resetInputSummary(),r=this.constructor.keyNames[t.keyCode]){for(o=this.keys,l=[\"ctrl\",\"alt\",\"shift\",\"meta\"],i=0,u=l.length;u>i;i++)c=l[i],t[c+\"Key\"]&&(\"ctrl\"===c&&(c=\"control\"),o=null!=o?o[c]:void 0);null!=(null!=o?o[r]:void 0)&&(this.setInputSummary({keyName:r}),e.selectionChangeObserver.reset(),o[r].call(this,t))}return s(t)&&(n=String.fromCharCode(t.keyCode).toLowerCase())&&(a=function(){var e,n,o,i;for(o=[\"alt\",\"shift\"],i=[],e=0,n=o.length;n>e;e++)c=o[e],t[c+\"Key\"]&&i.push(c);return i}(),a.push(n),null!=(h=this.delegate)?h.inputControllerDidReceiveKeyboardCommand(a):void 0)?t.preventDefault():void 0},keypress:function(t){var e,n,o;if(null==this.inputSummary.eventName&&(!t.metaKey&&!t.ctrlKey||t.altKey)&&!u(t)&&!a(t))return null===t.which?e=String.fromCharCode(t.keyCode):0!==t.which&&0!==t.charCode&&(e=String.fromCharCode(t.charCode)),null!=e?(null!=(n=this.delegate)&&n.inputControllerWillPerformTyping(),null!=(o=this.responder)&&o.insertString(e),this.setInputSummary({textAdded:e,didDelete:this.selectionIsExpanded()})):void 0},textInput:function(t){var e,n,o,i;return e=t.data,i=this.inputSummary.textAdded,i&&i!==e&&i.toUpperCase()===e?(n=this.getSelectedRange(),this.setSelectedRange([n[0],n[1]+i.length]),null!=(o=this.responder)&&o.insertString(e),this.setInputSummary({textAdded:e}),this.setSelectedRange(n)):void 0},dragenter:function(t){return t.preventDefault()},dragstart:function(t){var e,n;return n=t.target,this.serializeSelectionToDataTransfer(t.dataTransfer),this.draggedRange=this.getSelectedRange(),null!=(e=this.delegate)&&\"function\"==typeof e.inputControllerDidStartDrag?e.inputControllerDidStartDrag():void 0},dragover:function(t){var e,n;return!this.draggedRange&&!this.canAcceptDataTransfer(t.dataTransfer)||(t.preventDefault(),e={x:t.clientX,y:t.clientY},l(e,this.draggingPoint))?void 0:(this.draggingPoint=e,null!=(n=this.delegate)&&\"function\"==typeof n.inputControllerDidReceiveDragOverPoint?n.inputControllerDidReceiveDragOverPoint(this.draggingPoint):void 0)},dragend:function(){var t;return null!=(t=this.delegate)&&\"function\"==typeof t.inputControllerDidCancelDrag&&t.inputControllerDidCancelDrag(),this.draggedRange=null,this.draggingPoint=null},drop:function(t){var n,o,i,r,s,a,u,c,l;return t.preventDefault(),i=null!=(s=t.dataTransfer)?s.files:void 0,r={x:t.clientX,y:t.clientY},null!=(a=this.responder)&&a.setLocationRangeFromPointRange(r),(null!=i?i.length:void 0)?this.attachFiles(i):this.draggedRange?(null!=(u=this.delegate)&&u.inputControllerWillMoveText(),null!=(c=this.responder)&&c.moveTextFromRange(this.draggedRange),this.draggedRange=null,this.requestRender()):(o=t.dataTransfer.getData(\"application/x-trix-document\"))&&(n=e.Document.fromJSONString(o),null!=(l=this.responder)&&l.insertDocument(n),this.requestRender()),this.draggedRange=null,this.draggingPoint=null},cut:function(t){var e;return this.serializeSelectionToDataTransfer(t.clipboardData)&&t.preventDefault(),null!=(e=this.delegate)&&e.inputControllerWillCutText(),this.deleteInDirection(\"backward\"),t.defaultPrevented?this.requestRender():void 0},copy:function(t){return this.serializeSelectionToDataTransfer(t.clipboardData)?t.preventDefault():void 0},paste:function(n){var i,r,s,a,u,c,l,p,d,f,y,v,b,A,C,w,x,E,S,k,R,L;return u=null!=(l=n.clipboardData)?l:n.testClipboardData,c={paste:u},null==u||h(n)?void this.getPastedHTMLUsingHiddenElement(function(t){return function(e){var n,o,i;return c.html=e,null!=(n=t.delegate)&&n.inputControllerWillPasteText(c),null!=(o=t.responder)&&o.insertHTML(e),t.requestRender(),null!=(i=t.delegate)?i.inputControllerDidPaste(c):void 0}}(this)):((s=u.getData(\"URL\"))?(L=u.getData(\"public.url-name\")||s,c.string=L,this.setInputSummary({textAdded:L,didDelete:this.selectionIsExpanded()}),null!=(p=this.delegate)&&p.inputControllerWillPasteText(c),null!=(A=this.responder)&&A.insertText(e.Text.textForStringWithAttributes(L,{href:s})),this.requestRender(),null!=(C=this.delegate)&&C.inputControllerDidPaste(c)):t(u)?(L=u.getData(\"text/plain\"),c.string=L,this.setInputSummary({textAdded:L,didDelete:this.selectionIsExpanded()}),null!=(w=this.delegate)&&w.inputControllerWillPasteText(c),null!=(x=this.responder)&&x.insertString(L),this.requestRender(),null!=(E=this.delegate)&&E.inputControllerDidPaste(c)):(a=u.getData(\"text/html\"))?(c.html=a,null!=(S=this.delegate)&&S.inputControllerWillPasteText(c),null!=(k=this.responder)&&k.insertHTML(a),this.requestRender(),null!=(R=this.delegate)&&R.inputControllerDidPaste(c)):m.call(u.types,\"Files\")>=0&&(r=null!=(d=u.items)&&null!=(f=d[0])&&\"function\"==typeof f.getAsFile?f.getAsFile():void 0)&&(!r.name&&(i=o(r))&&(r.name=\"pasted-file-\"+ ++g+\".\"+i),c.file=r,null!=(y=this.delegate)&&y.inputControllerWillAttachFiles(),null!=(v=this.responder)&&v.insertFile(r),this.requestRender(),null!=(b=this.delegate)&&b.inputControllerDidPaste(c)),n.preventDefault())},compositionstart:function(t){return this.getCompositionInput().start(t.data)},compositionupdate:function(t){return this.getCompositionInput().update(t.data)},compositionend:function(t){return this.getCompositionInput().end(t.data)},input:function(t){return t.stopPropagation()}},d.prototype.keys={backspace:function(t){var e;return null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),this.deleteInDirection(\"backward\",t)},\"delete\":function(t){var e;return null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),this.deleteInDirection(\"forward\",t)},\"return\":function(){var t,e;return this.setInputSummary({preferDocument:!0}),null!=(t=this.delegate)&&t.inputControllerWillPerformTyping(),null!=(e=this.responder)?e.insertLineBreak():void 0},tab:function(t){var e,n;return(null!=(e=this.responder)?e.canIncreaseNestingLevel():void 0)?(null!=(n=this.responder)&&n.increaseNestingLevel(),this.requestRender(),t.preventDefault()):void 0},left:function(t){var e;return this.selectionIsInCursorTarget()?(t.preventDefault(),null!=(e=this.responder)?e.moveCursorInDirection(\"backward\"):void 0):void 0},right:function(t){var e;return this.selectionIsInCursorTarget()?(t.preventDefault(),null!=(e=this.responder)?e.moveCursorInDirection(\"forward\"):void 0):void 0},control:{d:function(t){var e;return null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),this.deleteInDirection(\"forward\",t)},h:function(t){var e;return null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),this.deleteInDirection(\"backward\",t)},o:function(t){var e,n;return t.preventDefault(),null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),null!=(n=this.responder)&&n.insertString(\"\\n\",{updatePosition:!1}),this.requestRender()}},shift:{\"return\":function(t){var e,n;return null!=(e=this.delegate)&&e.inputControllerWillPerformTyping(),null!=(n=this.responder)&&n.insertString(\"\\n\"),this.requestRender(),t.preventDefault()},tab:function(t){var e,n;return(null!=(e=this.responder)?e.canDecreaseNestingLevel():void 0)?(null!=(n=this.responder)&&n.decreaseNestingLevel(),this.requestRender(),t.preventDefault()):void 0},left:function(t){return this.selectionIsInCursorTarget()?(t.preventDefault(),this.expandSelectionInDirection(\"backward\")):void 0},right:function(t){return this.selectionIsInCursorTarget()?(t.preventDefault(),this.expandSelectionInDirection(\"forward\")):void 0}},alt:{backspace:function(){var t;return this.setInputSummary({preferDocument:!1}),null!=(t=this.delegate)?t.inputControllerWillPerformTyping():void 0}},meta:{backspace:function(){var t;return this.setInputSummary({preferDocument:!1}),null!=(t=this.delegate)?t.inputControllerWillPerformTyping():void 0}}},d.prototype.handleInput=function(t){var e,n;try{return null!=(e=this.delegate)&&e.inputControllerWillHandleInput(),t.call(this)}finally{null!=(n=this.delegate)&&n.inputControllerDidHandleInput()}},d.prototype.getCompositionInput=function(){return this.isComposing()?this.compositionInput:this.compositionInput=new e.CompositionInput(this)},d.prototype.isComposing=function(){return null!=this.compositionInput&&!this.compositionInput.isEnded()},d.prototype.deleteInDirection=function(t,e){var n;return(null!=(n=this.responder)?n.deleteInDirection(t):void 0)!==!1?this.setInputSummary({didDelete:!0}):e?(e.preventDefault(),this.requestRender()):void 0},d.prototype.serializeSelectionToDataTransfer=function(t){var o,i;if(n(t))return o=null!=(i=this.responder)?i.getSelectedDocument().toSerializableDocument():void 0,t.setData(\"application/x-trix-document\",JSON.stringify(o)),t.setData(\"text/html\",e.DocumentView.render(o).innerHTML),t.setData(\"text/plain\",o.toString().replace(/\\n$/,\"\")),!0},d.prototype.canAcceptDataTransfer=function(t){var e,n,o,i,r,s;for(s={},i=null!=(o=null!=t?t.types:void 0)?o:[],e=0,n=i.length;n>e;e++)r=i[e],s[r]=!0;return s.Files||s[\"application/x-trix-document\"]||s[\"text/html\"]||s[\"text/plain\"]},d.prototype.getPastedHTMLUsingHiddenElement=function(t){var e,n,o;return n=this.getSelectedRange(),o={position:\"absolute\",left:window.pageXOffset+\"px\",top:window.pageYOffset+\"px\",opacity:0},e=c({style:o,tagName:\"div\",editable:!0}),document.body.appendChild(e),e.focus(),requestAnimationFrame(function(o){return function(){var i;return i=e.innerHTML,document.body.removeChild(e),o.setSelectedRange(n),t(i)}}(this))},d.proxyMethod(\"responder?.getSelectedRange\"),d.proxyMethod(\"responder?.setSelectedRange\"),d.proxyMethod(\"responder?.expandSelectionInDirection\"),d.proxyMethod(\"responder?.selectionIsInCursorTarget\"),d.proxyMethod(\"responder?.selectionIsExpanded\"),d\n}(e.BasicObject),o=function(t){var e,n;return null!=(e=t.type)&&null!=(n=e.match(/\\/(\\w+)$/))?n[1]:void 0},u=function(t){return t.metaKey&&t.altKey&&!t.shiftKey&&94===t.keyCode},a=function(t){return t.metaKey&&t.altKey&&t.shiftKey&&9674===t.keyCode},s=function(t){return/Mac|^iP/.test(navigator.platform)?t.metaKey:t.ctrlKey},h=function(t){var e,n;return(n=null!=(e=t.clipboardData)?e.types:void 0)?m.call(n,\"text/html\")<0&&(m.call(n,\"com.apple.webarchive\")>=0||m.call(n,\"com.apple.flat-rtfd\")>=0):void 0},t=function(t){var e,n,o;return o=t.getData(\"text/plain\"),n=t.getData(\"text/html\"),o&&n?(e=c(\"div\"),e.innerHTML=n,e.textContent===o?!e.querySelector(\":not(meta)\"):void 0):null!=o?o.length:void 0},d={\"application/x-trix-feature-detection\":\"test\"},n=function(t){var e,n;if(null!=(null!=t?t.setData:void 0)){for(e in d)if(n=d[e],t.setData(e,n),t.getData(e)!==n)return;return!0}}}.call(this),function(){var t,n,o,i,r,s,a=function(t,e){return function(){return t.apply(e,arguments)}},u=function(t,e){function n(){this.constructor=t}for(var o in e)c.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},c={}.hasOwnProperty;n=e.handleEvent,r=e.makeElement,s=e.tagName,o=e.InputController.keyNames,i=e.config.lang,t=e.config.css.classNames,e.AttachmentEditorController=function(e){function c(t,e,n){this.attachmentPiece=t,this.element=e,this.container=n,this.uninstall=a(this.uninstall,this),this.didKeyDownCaption=a(this.didKeyDownCaption,this),this.didChangeCaption=a(this.didChangeCaption,this),this.didClickCaption=a(this.didClickCaption,this),this.didClickRemoveButton=a(this.didClickRemoveButton,this),this.attachment=this.attachmentPiece.attachment,\"a\"===s(this.element)&&(this.element=this.element.firstChild),this.install()}var l;return u(c,e),l=function(t){return function(){var e;return e=t.apply(this,arguments),e[\"do\"](),null==this.undos&&(this.undos=[]),this.undos.push(e.undo)}},c.prototype.install=function(){return this.makeElementMutable(),this.attachment.isPreviewable()&&this.makeCaptionEditable(),this.addRemoveButton()},c.prototype.makeElementMutable=l(function(){return{\"do\":function(t){return function(){return t.element.dataset.trixMutable=!0}}(this),undo:function(t){return function(){return delete t.element.dataset.trixMutable}}(this)}}),c.prototype.makeCaptionEditable=l(function(){var t,e;return t=this.element.querySelector(\"figcaption\"),e=null,{\"do\":function(o){return function(){return e=n(\"click\",{onElement:t,withCallback:o.didClickCaption,inPhase:\"capturing\"})}}(this),undo:function(){return function(){return e.destroy()}}(this)}}),c.prototype.addRemoveButton=l(function(){var e;return e=r({tagName:\"button\",textContent:i.remove,className:t.attachment.removeButton,attributes:{type:\"button\",title:i.remove},data:{trixMutable:!0}}),n(\"click\",{onElement:e,withCallback:this.didClickRemoveButton}),{\"do\":function(t){return function(){return t.element.appendChild(e)}}(this),undo:function(t){return function(){return t.element.removeChild(e)}}(this)}}),c.prototype.editCaption=l(function(){var e,o,s,a,u;return a=r({tagName:\"textarea\",className:t.attachment.captionEditor,attributes:{placeholder:i.captionPlaceholder}}),a.value=this.attachmentPiece.getCaption(),u=a.cloneNode(),u.classList.add(\"trix-autoresize-clone\"),e=function(){return u.value=a.value,a.style.height=u.scrollHeight+\"px\"},n(\"input\",{onElement:a,withCallback:e}),n(\"keydown\",{onElement:a,withCallback:this.didKeyDownCaption}),n(\"change\",{onElement:a,withCallback:this.didChangeCaption}),n(\"blur\",{onElement:a,withCallback:this.uninstall}),s=this.element.querySelector(\"figcaption\"),o=s.cloneNode(),{\"do\":function(){return s.style.display=\"none\",o.appendChild(a),o.appendChild(u),o.classList.add(t.attachment.editingCaption),s.parentElement.insertBefore(o,s),e(),a.focus()},undo:function(){return o.parentNode.removeChild(o),s.style.display=null}}}),c.prototype.didClickRemoveButton=function(t){var e;return t.preventDefault(),t.stopPropagation(),null!=(e=this.delegate)?e.attachmentEditorDidRequestRemovalOfAttachment(this.attachment):void 0},c.prototype.didClickCaption=function(t){return t.preventDefault(),this.editCaption()},c.prototype.didChangeCaption=function(t){var e,n,o;return e=t.target.value.replace(/\\s/g,\" \").trim(),e?null!=(n=this.delegate)&&\"function\"==typeof n.attachmentEditorDidRequestUpdatingAttributesForAttachment?n.attachmentEditorDidRequestUpdatingAttributesForAttachment({caption:e},this.attachment):void 0:null!=(o=this.delegate)&&\"function\"==typeof o.attachmentEditorDidRequestRemovingAttributeForAttachment?o.attachmentEditorDidRequestRemovingAttributeForAttachment(\"caption\",this.attachment):void 0},c.prototype.didKeyDownCaption=function(t){var e;return\"return\"===o[t.keyCode]?(t.preventDefault(),this.didChangeCaption(t),null!=(e=this.delegate)&&\"function\"==typeof e.attachmentEditorDidRequestDeselectingAttachment?e.attachmentEditorDidRequestDeselectingAttachment(this.attachment):void 0):void 0},c.prototype.uninstall=function(){for(var t,e;e=this.undos.pop();)e();return null!=(t=this.delegate)?t.didUninstallAttachmentEditor(this):void 0},c}(e.BasicObject)}.call(this),function(){var t,n,o,i,r=function(t,e){function n(){this.constructor=t}for(var o in e)s.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},s={}.hasOwnProperty;o=e.makeElement,i=e.selectionElements,t=e.config.css.classNames,e.AttachmentView=function(e){function s(){s.__super__.constructor.apply(this,arguments),this.attachment=this.object,this.attachment.uploadProgressDelegate=this,this.attachmentPiece=this.options.piece}return r(s,e),s.attachmentSelector=\"[data-trix-attachment]\",s.prototype.createContentNodes=function(){return[]},s.prototype.createNodes=function(){var e,n,r,s,a,u,c,l,h,p,d;if(s=o({tagName:\"figure\",className:this.getClassName()}),this.attachment.hasContent())s.innerHTML=this.attachment.getContent();else for(p=this.createContentNodes(),u=0,l=p.length;l>u;u++)h=p[u],s.appendChild(h);s.appendChild(this.createCaptionElement()),n={trixAttachment:JSON.stringify(this.attachment),trixContentType:this.attachment.getContentType(),trixId:this.attachment.id},e=this.attachmentPiece.getAttributesForAttachment(),e.isEmpty()||(n.trixAttributes=JSON.stringify(e)),this.attachment.isPending()&&(this.progressElement=o({tagName:\"progress\",attributes:{\"class\":t.attachment.progressBar,value:this.attachment.getUploadProgress(),max:100},data:{trixMutable:!0,trixStoreKey:[\"progressElement\",this.attachment.id].join(\"/\")}}),s.appendChild(this.progressElement),n.trixSerialize=!1),(a=this.getHref())?(r=o(\"a\",{href:a}),r.appendChild(s)):r=s;for(c in n)d=n[c],r.dataset[c]=d;return r.setAttribute(\"contenteditable\",!1),[i.create(\"cursorTarget\"),r,i.create(\"cursorTarget\")]},s.prototype.createCaptionElement=function(){var e,n,i,r,s;return n=o({tagName:\"figcaption\",className:t.attachment.caption}),(e=this.attachmentPiece.getCaption())?(n.classList.add(t.attachment.captionEdited),n.textContent=e):(i=this.attachment.getFilename())&&(n.textContent=i,(r=this.attachment.getFormattedFilesize())&&(n.appendChild(document.createTextNode(\" \")),s=o({tagName:\"span\",className:t.attachment.size,textContent:r}),n.appendChild(s))),n},s.prototype.getClassName=function(){var e,n;return n=[t.attachment.container,\"\"+t.attachment.typePrefix+this.attachment.getType()],(e=this.attachment.getExtension())&&n.push(e),n.join(\" \")},s.prototype.getHref=function(){return n(this.attachment.getContent(),\"a\")?void 0:this.attachment.getHref()},s.prototype.findProgressElement=function(){var t;return null!=(t=this.findElement())?t.querySelector(\"progress\"):void 0},s.prototype.attachmentDidChangeUploadProgress=function(){var t,e;return e=this.attachment.getUploadProgress(),null!=(t=this.findProgressElement())?t.value=e:void 0},s}(e.ObjectView),n=function(t,e){var n;return n=o(\"div\"),n.innerHTML=null!=t?t:\"\",n.querySelector(e)}}.call(this),function(){var t,n=function(t,e){function n(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},o={}.hasOwnProperty;t=e.makeElement,e.PreviewableAttachmentView=function(e){function o(){o.__super__.constructor.apply(this,arguments),this.attachment.previewDelegate=this}return n(o,e),o.prototype.createContentNodes=function(){return this.image=t({tagName:\"img\",attributes:{src:\"\"},data:{trixMutable:!0}}),this.refresh(this.image),[this.image]},o.prototype.refresh=function(t){var e;return null==t&&(t=null!=(e=this.findElement())?e.querySelector(\"img\"):void 0),t?this.updateAttributesForImage(t):void 0},o.prototype.updateAttributesForImage=function(t){var e,n,o,i,r,s;return r=this.attachment.getURL(),n=this.attachment.getPreviewURL(),t.src=n||r,n===r?t.removeAttribute(\"data-trix-serialized-attributes\"):(o=JSON.stringify({src:r}),t.setAttribute(\"data-trix-serialized-attributes\",o)),s=this.attachment.getWidth(),e=this.attachment.getHeight(),null!=s&&(t.width=s),null!=e&&(t.height=e),i=[\"imageElement\",this.attachment.id,t.src,t.width,t.height].join(\"/\"),t.dataset.trixStoreKey=i},o.prototype.attachmentDidChangePreviewURL=function(){return this.refresh(this.image),this.refresh()},o}(e.AttachmentView)}.call(this),function(){var t,n,o,i=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;o=e.makeElement,t=e.findInnerElement,n=e.getTextConfig,e.PieceView=function(r){function s(){var t;s.__super__.constructor.apply(this,arguments),this.piece=this.object,this.attributes=this.piece.getAttributes(),t=this.options,this.textConfig=t.textConfig,this.context=t.context,this.piece.attachment?this.attachment=this.piece.attachment:this.string=this.piece.toString()}var a;return i(s,r),s.prototype.createNodes=function(){var e,n,o,i,r,s;if(s=this.attachment?this.createAttachmentNodes():this.createStringNodes(),e=this.createElement()){for(o=t(e),n=0,i=s.length;i>n;n++)r=s[n],o.appendChild(r);s=[e]}return s},s.prototype.createAttachmentNodes=function(){var t,n;return t=this.attachment.isPreviewable()?e.PreviewableAttachmentView:e.AttachmentView,n=this.createChildView(t,this.piece.attachment,{piece:this.piece}),n.getNodes()},s.prototype.createStringNodes=function(){var t,e,n,i,r,s,a,u,c,l;if(null!=(u=this.textConfig)?u.plaintext:void 0)return[document.createTextNode(this.string)];for(a=[],c=this.string.split(\"\\n\"),n=e=0,i=c.length;i>e;n=++e)l=c[n],n>0&&(t=o(\"br\"),a.push(t)),(r=l.length)&&(s=document.createTextNode(this.preserveSpaces(l)),a.push(s));return a},s.prototype.createElement=function(){var t,e,i,r,s,a,u,c;for(r in this.attributes)if((t=n(r))&&(t.tagName&&(s=o(t.tagName),i?(i.appendChild(s),i=s):e=i=s),t.style))if(u){a=t.style;for(r in a)c=a[r],u[r]=c}else u=t.style;if(u){null==e&&(e=o(\"span\"));for(r in u)c=u[r],e.style[r]=c}return e},s.prototype.createContainerElement=function(){var t,e,i,r,s;r=this.attributes;for(i in r)if(s=r[i],(e=n(i))&&e.groupTagName)return t={},t[i]=s,o(e.groupTagName,t)},a=e.NON_BREAKING_SPACE,s.prototype.preserveSpaces=function(t){return this.context.isLast&&(t=t.replace(/\\ $/,a)),t=t.replace(/(\\S)\\ {3}(\\S)/g,\"$1 \"+a+\" $2\").replace(/\\ {2}/g,a+\" \").replace(/\\ {2}/g,\" \"+a),(this.context.isFirst||this.context.followsWhitespace)&&(t=t.replace(/^\\ /,a)),t},s}(e.ObjectView)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.TextView=function(n){function o(){o.__super__.constructor.apply(this,arguments),this.text=this.object,this.textConfig=this.options.textConfig}var i;return t(o,n),o.prototype.createNodes=function(){var t,n,o,r,s,a,u,c,l,h;for(a=[],c=e.ObjectGroup.groupObjects(this.getPieces()),r=c.length-1,o=n=0,s=c.length;s>n;o=++n)u=c[o],t={},0===o&&(t.isFirst=!0),o===r&&(t.isLast=!0),i(l)&&(t.followsWhitespace=!0),h=this.findOrCreateCachedChildView(e.PieceView,u,{textConfig:this.textConfig,context:t}),a.push.apply(a,h.getNodes()),l=u;return a},o.prototype.getPieces=function(){var t,e,n,o,i;for(o=this.text.getPieces(),i=[],t=0,e=o.length;e>t;t++)n=o[t],n.hasAttribute(\"blockBreak\")||i.push(n);return i},i=function(t){return/\\s$/.test(null!=t?t.toString():void 0)},o}(e.ObjectView)}.call(this),function(){var t,n,o=function(t,e){function n(){this.constructor=t}for(var o in e)i.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},i={}.hasOwnProperty;n=e.makeElement,t=e.getBlockConfig,e.BlockView=function(i){function r(){r.__super__.constructor.apply(this,arguments),this.block=this.object,this.attributes=this.block.getAttributes()}return o(r,i),r.prototype.createNodes=function(){var o,i,r,s,a,u,c,l,h;if(o=document.createComment(\"block\"),u=[o],this.block.isEmpty()?u.push(n(\"br\")):(l=null!=(c=t(this.block.getLastAttribute()))?c.text:void 0,h=this.findOrCreateCachedChildView(e.TextView,this.block.text,{textConfig:l}),u.push.apply(u,h.getNodes()),this.shouldAddExtraNewlineElement()&&u.push(n(\"br\"))),this.attributes.length)return u;for(i=n(e.config.blockAttributes[\"default\"].tagName),r=0,s=u.length;s>r;r++)a=u[r],i.appendChild(a);return[i]},r.prototype.createContainerElement=function(e){var o,i;return o=this.attributes[e],i=t(o),n(i.tagName)},r.prototype.shouldAddExtraNewlineElement=function(){return/\\n\\n$/.test(this.block.toString())},r}(e.ObjectView)}.call(this),function(){var t,n,o=function(t,e){function n(){this.constructor=t}for(var o in e)i.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},i={}.hasOwnProperty;t=e.defer,n=e.makeElement,e.DocumentView=function(i){function r(){r.__super__.constructor.apply(this,arguments),this.element=this.options.element,this.elementStore=new e.ElementStore,this.setDocument(this.object)}var s,a,u;return o(r,i),r.render=function(t){var e,o;return e=n(\"div\"),o=new this(t,{element:e}),o.render(),o.sync(),e},r.prototype.setDocument=function(t){return t.isEqualTo(this.document)?void 0:this.document=this.object=t},r.prototype.render=function(){var t,o,i,r,s,a,u;if(this.childViews=[],this.shadowElement=n(\"div\"),!this.document.isEmpty()){for(s=e.ObjectGroup.groupObjects(this.document.getBlocks(),{asTree:!0}),a=[],t=0,o=s.length;o>t;t++)r=s[t],u=this.findOrCreateCachedChildView(e.BlockView,r),a.push(function(){var t,e,n,o;for(n=u.getNodes(),o=[],t=0,e=n.length;e>t;t++)i=n[t],o.push(this.shadowElement.appendChild(i));return o}.call(this));return a}},r.prototype.isSynced=function(){return s(this.shadowElement,this.element)},r.prototype.sync=function(){var t;for(t=this.createDocumentFragmentForSync();this.element.lastChild;)this.element.removeChild(this.element.lastChild);return this.element.appendChild(t),this.didSync()},r.prototype.didSync=function(){return this.elementStore.reset(a(this.element)),t(function(t){return function(){return t.garbageCollectCachedViews()}}(this))},r.prototype.createDocumentFragmentForSync=function(){var t,e,n,o,i,r,s,u,c,l;for(e=document.createDocumentFragment(),u=this.shadowElement.childNodes,n=0,i=u.length;i>n;n++)s=u[n],e.appendChild(s.cloneNode(!0));for(c=a(e),o=0,r=c.length;r>o;o++)t=c[o],(l=this.elementStore.remove(t))&&t.parentNode.replaceChild(l,t);return e},a=function(t){return t.querySelectorAll(\"[data-trix-store-key]\")},s=function(t,e){return u(t.innerHTML)===u(e.innerHTML)},u=function(t){return t.replace(/ /g,\" \")},r}(e.ObjectView)}.call(this),function(){var t,n,o,i,r=function(t,e){return function(){return t.apply(e,arguments)}},s=function(t,e){function n(){this.constructor=t}for(var o in e)a.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},a={}.hasOwnProperty;o=e.handleEvent,i=e.innerElementIsActive,n=e.defer,t=e.AttachmentView.attachmentSelector,e.CompositionController=function(a){function u(n,i){this.element=n,this.composition=i,this.didClickAttachment=r(this.didClickAttachment,this),this.didBlur=r(this.didBlur,this),this.didFocus=r(this.didFocus,this),this.documentView=new e.DocumentView(this.composition.document,{element:this.element}),o(\"focus\",{onElement:this.element,withCallback:this.didFocus}),o(\"blur\",{onElement:this.element,withCallback:this.didBlur}),o(\"click\",{onElement:this.element,matchingSelector:\"a[contenteditable=false]\",preventDefault:!0}),o(\"mousedown\",{onElement:this.element,matchingSelector:t,withCallback:this.didClickAttachment}),o(\"click\",{onElement:this.element,matchingSelector:\"a\"+t,preventDefault:!0})}return s(u,a),u.prototype.didFocus=function(){var t,e,n;return t=function(t){return function(){var e;return t.focused?void 0:(t.focused=!0,null!=(e=t.delegate)&&\"function\"==typeof e.compositionControllerDidFocus?e.compositionControllerDidFocus():void 0)}}(this),null!=(e=null!=(n=this.blurPromise)?n.then(t):void 0)?e:t()},u.prototype.didBlur=function(){return this.blurPromise=new Promise(function(t){return function(e){return n(function(){var n;return i(t.element)||(t.focused=null,null!=(n=t.delegate)&&\"function\"==typeof n.compositionControllerDidBlur&&n.compositionControllerDidBlur()),t.blurPromise=null,e()})}}(this))},u.prototype.didClickAttachment=function(t,e){var n,o;return n=this.findAttachmentForElement(e),null!=(o=this.delegate)&&\"function\"==typeof o.compositionControllerDidSelectAttachment?o.compositionControllerDidSelectAttachment(n):void 0},u.prototype.render=function(){var t,e,n;return this.revision!==this.composition.revision&&(this.documentView.setDocument(this.composition.document),this.documentView.render(),this.revision=this.composition.revision),this.documentView.isSynced()||(null!=(t=this.delegate)&&\"function\"==typeof t.compositionControllerWillSyncDocumentView&&t.compositionControllerWillSyncDocumentView(),this.documentView.sync(),this.reinstallAttachmentEditor(),null!=(e=this.delegate)&&\"function\"==typeof e.compositionControllerDidSyncDocumentView&&e.compositionControllerDidSyncDocumentView()),null!=(n=this.delegate)&&\"function\"==typeof n.compositionControllerDidRender?n.compositionControllerDidRender():void 0},u.prototype.rerenderViewForObject=function(t){return this.invalidateViewForObject(t),this.render()},u.prototype.invalidateViewForObject=function(t){return this.documentView.invalidateViewForObject(t)},u.prototype.isViewCachingEnabled=function(){return this.documentView.isViewCachingEnabled()},u.prototype.enableViewCaching=function(){return this.documentView.enableViewCaching()},u.prototype.disableViewCaching=function(){return this.documentView.disableViewCaching()},u.prototype.refreshViewCache=function(){return this.documentView.garbageCollectCachedViews()},u.prototype.installAttachmentEditorForAttachment=function(t){var n,o,i;if((null!=(i=this.attachmentEditor)?i.attachment:void 0)!==t&&(o=this.documentView.findElementForObject(t)))return this.uninstallAttachmentEditor(),n=this.composition.document.getAttachmentPieceForAttachment(t),this.attachmentEditor=new e.AttachmentEditorController(n,o,this.element),this.attachmentEditor.delegate=this},u.prototype.uninstallAttachmentEditor=function(){var t;return null!=(t=this.attachmentEditor)?t.uninstall():void 0},u.prototype.reinstallAttachmentEditor=function(){var t;return this.attachmentEditor?(t=this.attachmentEditor.attachment,this.uninstallAttachmentEditor(),this.installAttachmentEditorForAttachment(t)):void 0},u.prototype.editAttachmentCaption=function(){var t;return null!=(t=this.attachmentEditor)?t.editCaption():void 0},u.prototype.didUninstallAttachmentEditor=function(){return this.attachmentEditor=null,this.render()},u.prototype.attachmentEditorDidRequestUpdatingAttributesForAttachment=function(t,e){var n;return null!=(n=this.delegate)&&\"function\"==typeof n.compositionControllerWillUpdateAttachment&&n.compositionControllerWillUpdateAttachment(e),this.composition.updateAttributesForAttachment(t,e)},u.prototype.attachmentEditorDidRequestRemovingAttributeForAttachment=function(t,e){var n;return null!=(n=this.delegate)&&\"function\"==typeof n.compositionControllerWillUpdateAttachment&&n.compositionControllerWillUpdateAttachment(e),this.composition.removeAttributeForAttachment(t,e)},u.prototype.attachmentEditorDidRequestRemovalOfAttachment=function(t){var e;return null!=(e=this.delegate)&&\"function\"==typeof e.compositionControllerDidRequestRemovalOfAttachment?e.compositionControllerDidRequestRemovalOfAttachment(t):void 0},u.prototype.attachmentEditorDidRequestDeselectingAttachment=function(t){var e;return null!=(e=this.delegate)&&\"function\"==typeof e.compositionControllerDidRequestDeselectingAttachment?e.compositionControllerDidRequestDeselectingAttachment(t):void 0},u.prototype.findAttachmentForElement=function(t){return this.composition.document.getAttachmentById(parseInt(t.dataset.trixId,10))},u}(e.BasicObject)}.call(this),function(){var t,n,o,i=function(t,e){return function(){return t.apply(e,arguments)}},r=function(t,e){function n(){this.constructor=t}for(var o in e)s.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},s={}.hasOwnProperty;n=e.handleEvent,o=e.triggerEvent,t=e.findClosestElementFromNode,e.ToolbarController=function(e){function s(t){this.element=t,this.didKeyDownDialogInput=i(this.didKeyDownDialogInput,this),this.didClickDialogButton=i(this.didClickDialogButton,this),this.didClickAttributeButton=i(this.didClickAttributeButton,this),this.didClickActionButton=i(this.didClickActionButton,this),this.attributes={},this.actions={},this.resetDialogInputs(),n(\"mousedown\",{onElement:this.element,matchingSelector:a,withCallback:this.didClickActionButton}),n(\"mousedown\",{onElement:this.element,matchingSelector:c,withCallback:this.didClickAttributeButton}),n(\"click\",{onElement:this.element,matchingSelector:y,preventDefault:!0}),n(\"click\",{onElement:this.element,matchingSelector:l,withCallback:this.didClickDialogButton}),n(\"keydown\",{onElement:this.element,matchingSelector:h,withCallback:this.didKeyDownDialogInput})}var a,u,c,l,h,p,d,f,g,m,y;return r(s,e),a=\"button[data-trix-action]\",c=\"button[data-trix-attribute]\",y=[a,c].join(\", \"),p=\".dialog[data-trix-dialog]\",u=p+\".active\",l=p+\" input[data-trix-method]\",h=p+\" input[type=text], \"+p+\" input[type=url]\",s.prototype.didClickActionButton=function(t,e){var n,o,i;return null!=(o=this.delegate)&&o.toolbarDidClickButton(),t.preventDefault(),n=d(e),this.getDialog(n)?this.toggleDialog(n):null!=(i=this.delegate)?i.toolbarDidInvokeAction(n):void 0},s.prototype.didClickAttributeButton=function(t,e){var n,o,i;return null!=(o=this.delegate)&&o.toolbarDidClickButton(),t.preventDefault(),n=f(e),this.getDialog(n)?this.toggleDialog(n):null!=(i=this.delegate)&&i.toolbarDidToggleAttribute(n),this.refreshAttributeButtons()},s.prototype.didClickDialogButton=function(e,n){var o,i;return o=t(n,{matchingSelector:p}),i=n.getAttribute(\"data-trix-method\"),this[i].call(this,o)},s.prototype.didKeyDownDialogInput=function(t,e){var n,o;return 13===t.keyCode&&(t.preventDefault(),n=e.getAttribute(\"name\"),o=this.getDialog(n),this.setAttribute(o)),27===t.keyCode?(t.preventDefault(),this.hideDialog()):void 0},s.prototype.updateActions=function(t){return this.actions=t,this.refreshActionButtons()},s.prototype.refreshActionButtons=function(){return this.eachActionButton(function(t){return function(e,n){return e.disabled=t.actions[n]===!1}}(this))},s.prototype.eachActionButton=function(t){var e,n,o,i,r;for(i=this.element.querySelectorAll(a),r=[],n=0,o=i.length;o>n;n++)e=i[n],r.push(t(e,d(e)));return r},s.prototype.updateAttributes=function(t){return this.attributes=t,this.refreshAttributeButtons()},s.prototype.refreshAttributeButtons=function(){return this.eachAttributeButton(function(t){return function(e,n){return e.disabled=t.attributes[n]===!1,t.attributes[n]||t.dialogIsVisible(n)?e.classList.add(\"active\"):e.classList.remove(\"active\")}}(this))},s.prototype.eachAttributeButton=function(t){var e,n,o,i,r;for(i=this.element.querySelectorAll(c),r=[],n=0,o=i.length;o>n;n++)e=i[n],r.push(t(e,f(e)));return r},s.prototype.applyKeyboardCommand=function(t){var e,n,i,r,s,a,u;for(s=JSON.stringify(t.sort()),u=this.element.querySelectorAll(\"[data-trix-key]\"),r=0,a=u.length;a>r;r++)if(e=u[r],i=e.getAttribute(\"data-trix-key\").split(\"+\"),n=JSON.stringify(i.sort()),n===s)return o(\"mousedown\",{onElement:e}),!0;return!1},s.prototype.dialogIsVisible=function(t){var e;return(e=this.getDialog(t))?e.classList.contains(\"active\"):void 0},s.prototype.toggleDialog=function(t){return this.dialogIsVisible(t)?this.hideDialog():this.showDialog(t)},s.prototype.showDialog=function(t){var e,n,o,i,r,s,a,u,c,l;for(this.hideDialog(),null!=(a=this.delegate)&&a.toolbarWillShowDialog(),o=this.getDialog(t),o.classList.add(\"active\"),u=o.querySelectorAll(\"input[disabled]\"),i=0,s=u.length;s>i;i++)n=u[i],n.removeAttribute(\"disabled\");return(e=f(o))&&(r=m(o,t))&&(r.value=null!=(c=this.attributes[e])?c:\"\",r.select()),null!=(l=this.delegate)?l.toolbarDidShowDialog(t):void 0},s.prototype.setAttribute=function(t){var e,n,o;return e=f(t),n=m(t,e),n.willValidate&&!n.checkValidity()?(n.classList.add(\"validate\"),n.focus()):(null!=(o=this.delegate)&&o.toolbarDidUpdateAttribute(e,n.value),this.hideDialog())},s.prototype.removeAttribute=function(t){var e,n;return e=f(t),null!=(n=this.delegate)&&n.toolbarDidRemoveAttribute(e),this.hideDialog()},s.prototype.hideDialog=function(){var t,e;return(t=this.element.querySelector(u))?(t.classList.remove(\"active\"),this.resetDialogInputs(),null!=(e=this.delegate)?e.toolbarDidHideDialog(g(t)):void 0):void 0},s.prototype.resetDialogInputs=function(){var t,e,n,o,i;for(o=this.element.querySelectorAll(h),i=[],t=0,n=o.length;n>t;t++)e=o[t],e.setAttribute(\"disabled\",\"disabled\"),i.push(e.classList.remove(\"validate\"));return i},s.prototype.getDialog=function(t){return this.element.querySelector(\".dialog[data-trix-dialog=\"+t+\"]\")},m=function(t,e){return null==e&&(e=f(t)),t.querySelector(\"input[name='\"+e+\"']\")},d=function(t){return t.getAttribute(\"data-trix-action\")},f=function(t){return t.getAttribute(\"data-trix-attribute\")},g=function(t){return t.getAttribute(\"data-trix-dialog\")},s}(e.BasicObject)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.ImagePreloadOperation=function(e){function n(t){this.url=t}return t(n,e),n.prototype.perform=function(t){var e;return e=new Image,e.onload=function(n){return function(){return e.width=n.width=e.naturalWidth,e.height=n.height=e.naturalHeight,t(!0,e)}}(this),e.onerror=function(){return t(!1)},e.src=this.url},n}(e.Operation)}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}},n=function(t,e){function n(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},o={}.hasOwnProperty;e.Attachment=function(o){function i(n){null==n&&(n={}),this.releaseFile=t(this.releaseFile,this),i.__super__.constructor.apply(this,arguments),this.attributes=e.Hash.box(n),this.didChangeAttributes()}return n(i,o),i.previewablePattern=/^image(\\/(gif|png|jpe?g)|$)/,i.attachmentForFile=function(t){var e,n;return n=this.attributesForFile(t),e=new this(n),e.setFile(t),e},i.attributesForFile=function(t){return new e.Hash({filename:t.name,filesize:t.size,contentType:t.type})},i.fromJSON=function(t){return new this(t)},i.prototype.getAttribute=function(t){return this.attributes.get(t)},i.prototype.hasAttribute=function(t){return this.attributes.has(t)},i.prototype.getAttributes=function(){return this.attributes.toObject()},i.prototype.setAttributes=function(t){var e,n;return null==t&&(t={}),e=this.attributes.merge(t),this.attributes.isEqualTo(e)?void 0:(this.attributes=e,this.didChangeAttributes(),null!=(n=this.delegate)&&\"function\"==typeof n.attachmentDidChangeAttributes?n.attachmentDidChangeAttributes(this):void 0)},i.prototype.didChangeAttributes=function(){return this.isPreviewable()?this.preloadURL():void 0},i.prototype.isPending=function(){return null!=this.file&&!(this.getURL()||this.getHref())},i.prototype.isPreviewable=function(){return this.attributes.has(\"previewable\")?this.attributes.get(\"previewable\"):this.constructor.previewablePattern.test(this.getContentType())},i.prototype.getType=function(){return this.hasContent()?\"content\":this.isPreviewable()?\"preview\":\"file\"},i.prototype.getURL=function(){return this.attributes.get(\"url\")},i.prototype.getHref=function(){return this.attributes.get(\"href\")},i.prototype.getFilename=function(){var t;return null!=(t=this.attributes.get(\"filename\"))?t:\"\"},i.prototype.getFilesize=function(){return this.attributes.get(\"filesize\")},i.prototype.getFormattedFilesize=function(){var t;return t=this.attributes.get(\"filesize\"),\"number\"==typeof t?e.config.fileSize.formatter(t):\"\"},i.prototype.getExtension=function(){var t;return null!=(t=this.getFilename().match(/\\.(\\w+)$/))?t[1].toLowerCase():void 0},i.prototype.getContentType=function(){return this.attributes.get(\"contentType\")},i.prototype.hasContent=function(){return this.attributes.has(\"content\")},i.prototype.getContent=function(){return this.attributes.get(\"content\")},i.prototype.getWidth=function(){return this.attributes.get(\"width\")},i.prototype.getHeight=function(){return this.attributes.get(\"height\")},i.prototype.getFile=function(){return this.file},i.prototype.setFile=function(t){return this.file=t,this.isPreviewable()?this.preloadFile():void 0},i.prototype.releaseFile=function(){return this.releasePreloadedFile(),this.file=null},i.prototype.getUploadProgress=function(){var t;return null!=(t=this.uploadProgress)?t:0},i.prototype.setUploadProgress=function(t){var e;return this.uploadProgress!==t?(this.uploadProgress=t,null!=(e=this.uploadProgressDelegate)&&\"function\"==typeof e.attachmentDidChangeUploadProgress?e.attachmentDidChangeUploadProgress(this):void 0):void 0},i.prototype.toJSON=function(){return this.getAttributes()},i.prototype.getCacheKey=function(){return[i.__super__.getCacheKey.apply(this,arguments),this.attributes.getCacheKey(),this.getPreviewURL()].join(\"/\")},i.prototype.getPreviewURL=function(){return this.previewURL||this.preloadingURL},i.prototype.setPreviewURL=function(t){var e,n;return t!==this.getPreviewURL()?(this.previewURL=t,null!=(e=this.previewDelegate)&&\"function\"==typeof e.attachmentDidChangePreviewURL&&e.attachmentDidChangePreviewURL(this),null!=(n=this.delegate)&&\"function\"==typeof n.attachmentDidChangePreviewURL?n.attachmentDidChangePreviewURL(this):void 0):void 0},i.prototype.preloadURL=function(){return this.preload(this.getURL(),this.releaseFile)},i.prototype.preloadFile=function(){return this.file?(this.fileObjectURL=URL.createObjectURL(this.file),this.preload(this.fileObjectURL)):void 0},i.prototype.releasePreloadedFile=function(){return this.fileObjectURL?(URL.revokeObjectURL(this.fileObjectURL),this.fileObjectURL=null):void 0},i.prototype.preload=function(t,n){var o;return t&&t!==this.getPreviewURL()?(this.preloadingURL=t,o=new e.ImagePreloadOperation(t),o.then(function(e){return function(o){var i,r;return r=o.width,i=o.height,e.setAttributes({width:r,height:i}),e.preloadingURL=null,e.setPreviewURL(t),\"function\"==typeof n?n():void 0}}(this))):void 0},i}(e.Object)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Piece=function(n){function o(t,n){null==n&&(n={}),o.__super__.constructor.apply(this,arguments),this.attributes=e.Hash.box(n)}return t(o,n),o.types={},o.registerType=function(t,e){return e.type=t,this.types[t]=e},o.fromJSON=function(t){var e;return(e=this.types[t.type])?e.fromJSON(t):void 0},o.prototype.copyWithAttributes=function(t){return new this.constructor(this.getValue(),t)},o.prototype.copyWithAdditionalAttributes=function(t){return this.copyWithAttributes(this.attributes.merge(t))},o.prototype.copyWithoutAttribute=function(t){return this.copyWithAttributes(this.attributes.remove(t))},o.prototype.copy=function(){return this.copyWithAttributes(this.attributes)},o.prototype.getAttribute=function(t){return this.attributes.get(t)},o.prototype.getAttributesHash=function(){return this.attributes},o.prototype.getAttributes=function(){return this.attributes.toObject()},o.prototype.getCommonAttributes=function(){var t,e,n;return(n=pieceList.getPieceAtIndex(0))?(t=n.attributes,e=t.getKeys(),pieceList.eachPiece(function(n){return e=t.getKeysCommonToHash(n.attributes),t=t.slice(e)}),t.toObject()):{}},o.prototype.hasAttribute=function(t){return this.attributes.has(t)},o.prototype.hasSameStringValueAsPiece=function(t){return null!=t&&this.toString()===t.toString()\n},o.prototype.hasSameAttributesAsPiece=function(t){return null!=t&&(this.attributes===t.attributes||this.attributes.isEqualTo(t.attributes))},o.prototype.isBlockBreak=function(){return!1},o.prototype.isEqualTo=function(t){return o.__super__.isEqualTo.apply(this,arguments)||this.hasSameConstructorAs(t)&&this.hasSameStringValueAsPiece(t)&&this.hasSameAttributesAsPiece(t)},o.prototype.isEmpty=function(){return 0===this.length},o.prototype.isSerializable=function(){return!0},o.prototype.toJSON=function(){return{type:this.constructor.type,attributes:this.getAttributes()}},o.prototype.contentsForInspection=function(){return{type:this.constructor.type,attributes:this.attributes.inspect()}},o.prototype.canBeGrouped=function(){return this.hasAttribute(\"href\")},o.prototype.canBeGroupedWith=function(t){return this.getAttribute(\"href\")===t.getAttribute(\"href\")},o.prototype.getLength=function(){return this.length},o.prototype.canBeConsolidatedWith=function(){return!1},o}(e.Object)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Piece.registerType(\"attachment\",e.AttachmentPiece=function(n){function o(t){this.attachment=t,o.__super__.constructor.apply(this,arguments),this.length=1,this.ensureAttachmentExclusivelyHasAttribute(\"href\")}return t(o,n),o.fromJSON=function(t){return new this(e.Attachment.fromJSON(t.attachment),t.attributes)},o.prototype.ensureAttachmentExclusivelyHasAttribute=function(t){return this.hasAttribute(t)&&this.attachment.hasAttribute(t)?this.attributes=this.attributes.remove(t):void 0},o.prototype.getValue=function(){return this.attachment},o.prototype.isSerializable=function(){return!this.attachment.isPending()},o.prototype.getCaption=function(){var t;return null!=(t=this.attributes.get(\"caption\"))?t:\"\"},o.prototype.getAttributesForAttachment=function(){return this.attributes.slice([\"caption\"])},o.prototype.canBeGrouped=function(){return o.__super__.canBeGrouped.apply(this,arguments)&&!this.attachment.hasAttribute(\"href\")},o.prototype.isEqualTo=function(t){var e;return o.__super__.isEqualTo.apply(this,arguments)&&this.attachment.id===(null!=t&&null!=(e=t.attachment)?e.id:void 0)},o.prototype.toString=function(){return e.OBJECT_REPLACEMENT_CHARACTER},o.prototype.toJSON=function(){var t;return t=o.__super__.toJSON.apply(this,arguments),t.attachment=this.attachment,t},o.prototype.getCacheKey=function(){return[o.__super__.getCacheKey.apply(this,arguments),this.attachment.getCacheKey()].join(\"/\")},o.prototype.toConsole=function(){return JSON.stringify(this.toString())},o}(e.Piece))}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Piece.registerType(\"string\",e.StringPiece=function(e){function n(t){n.__super__.constructor.apply(this,arguments),this.string=t,this.length=this.string.length}return t(n,e),n.fromJSON=function(t){return new this(t.string,t.attributes)},n.prototype.getValue=function(){return this.string},n.prototype.toString=function(){return this.string.toString()},n.prototype.isBlockBreak=function(){return\"\\n\"===this.toString()&&this.getAttribute(\"blockBreak\")===!0},n.prototype.toJSON=function(){var t;return t=n.__super__.toJSON.apply(this,arguments),t.string=this.string,t},n.prototype.canBeConsolidatedWith=function(t){return null!=t&&this.hasSameConstructorAs(t)&&this.hasSameAttributesAsPiece(t)},n.prototype.consolidateWith=function(t){return new this.constructor(this.toString()+t.toString(),this.attributes)},n.prototype.splitAtOffset=function(t){var e,n;return 0===t?(e=null,n=this):t===this.length?(e=this,n=null):(e=new this.constructor(this.string.slice(0,t),this.attributes),n=new this.constructor(this.string.slice(t),this.attributes)),[e,n]},n.prototype.toConsole=function(){var t;return t=this.string,t.length>15&&(t=t.slice(0,14)+\"\\u2026\"),JSON.stringify(t.toString())},n}(e.Piece))}.call(this),function(){var t,n=function(t,e){function n(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},o={}.hasOwnProperty,i=[].slice;t=e.spliceArray,e.SplittableList=function(e){function o(t){null==t&&(t=[]),o.__super__.constructor.apply(this,arguments),this.objects=t.slice(0),this.length=this.objects.length}var r,s,a;return n(o,e),o.box=function(t){return t instanceof this?t:new this(t)},o.prototype.indexOf=function(t){return this.objects.indexOf(t)},o.prototype.splice=function(){var e;return e=1<=arguments.length?i.call(arguments,0):[],new this.constructor(t.apply(null,[this.objects].concat(i.call(e))))},o.prototype.eachObject=function(t){var e,n,o,i,r,s;for(r=this.objects,s=[],n=e=0,o=r.length;o>e;n=++e)i=r[n],s.push(t(i,n));return s},o.prototype.insertObjectAtIndex=function(t,e){return this.splice(e,0,t)},o.prototype.insertSplittableListAtIndex=function(t,e){return this.splice.apply(this,[e,0].concat(i.call(t.objects)))},o.prototype.insertSplittableListAtPosition=function(t,e){var n,o,i;return i=this.splitObjectAtPosition(e),o=i[0],n=i[1],new this.constructor(o).insertSplittableListAtIndex(t,n)},o.prototype.editObjectAtIndex=function(t,e){return this.replaceObjectAtIndex(e(this.objects[t]),t)},o.prototype.replaceObjectAtIndex=function(t,e){return this.splice(e,1,t)},o.prototype.removeObjectAtIndex=function(t){return this.splice(t,1)},o.prototype.getObjectAtIndex=function(t){return this.objects[t]},o.prototype.getSplittableListInRange=function(t){var e,n,o,i;return o=this.splitObjectsAtRange(t),n=o[0],e=o[1],i=o[2],new this.constructor(n.slice(e,i+1))},o.prototype.selectSplittableList=function(t){var e,n;return n=function(){var n,o,i,r;for(i=this.objects,r=[],n=0,o=i.length;o>n;n++)e=i[n],t(e)&&r.push(e);return r}.call(this),new this.constructor(n)},o.prototype.removeObjectsInRange=function(t){var e,n,o,i;return o=this.splitObjectsAtRange(t),n=o[0],e=o[1],i=o[2],new this.constructor(n).splice(e,i-e+1)},o.prototype.transformObjectsInRange=function(t,e){var n,o,i,r,s,a,u;return s=this.splitObjectsAtRange(t),r=s[0],o=s[1],a=s[2],u=function(){var t,s,u;for(u=[],n=t=0,s=r.length;s>t;n=++t)i=r[n],u.push(n>=o&&a>=n?e(i):i);return u}(),new this.constructor(u)},o.prototype.splitObjectsAtRange=function(t){var e,n,o,i,s,u;return i=this.splitObjectAtPosition(a(t)),n=i[0],e=i[1],o=i[2],s=new this.constructor(n).splitObjectAtPosition(r(t)+o),n=s[0],u=s[1],[n,e,u-1]},o.prototype.getObjectAtPosition=function(t){var e,n,o;return o=this.findIndexAndOffsetAtPosition(t),e=o.index,n=o.offset,this.objects[e]},o.prototype.splitObjectAtPosition=function(t){var e,n,o,i,r,s,a,u,c,l;return s=this.findIndexAndOffsetAtPosition(t),e=s.index,r=s.offset,i=this.objects.slice(0),null!=e?0===r?(c=e,l=0):(o=this.getObjectAtIndex(e),a=o.splitAtOffset(r),n=a[0],u=a[1],i.splice(e,1,n,u),c=e+1,l=n.getLength()-r):(c=i.length,l=0),[i,c,l]},o.prototype.consolidate=function(){var t,e,n,o,i,r;for(o=[],i=this.objects[0],r=this.objects.slice(1),t=0,e=r.length;e>t;t++)n=r[t],(\"function\"==typeof i.canBeConsolidatedWith?i.canBeConsolidatedWith(n):void 0)?i=i.consolidateWith(n):(o.push(i),i=n);return null!=i&&o.push(i),new this.constructor(o)},o.prototype.consolidateFromIndexToIndex=function(t,e){var n,o,r;return o=this.objects.slice(0),r=o.slice(t,e+1),n=new this.constructor(r).consolidate().toArray(),this.splice.apply(this,[t,r.length].concat(i.call(n)))},o.prototype.findIndexAndOffsetAtPosition=function(t){var e,n,o,i,r,s,a;for(e=0,a=this.objects,o=n=0,i=a.length;i>n;o=++n){if(s=a[o],r=e+s.getLength(),t>=e&&r>t)return{index:o,offset:t-e};e=r}return{index:null,offset:null}},o.prototype.findPositionAtIndexAndOffset=function(t,e){var n,o,i,r,s,a;for(s=0,a=this.objects,n=o=0,i=a.length;i>o;n=++o)if(r=a[n],t>n)s+=r.getLength();else if(n===t){s+=e;break}return s},o.prototype.getEndPosition=function(){var t,e;return null!=this.endPosition?this.endPosition:this.endPosition=function(){var n,o,i;for(e=0,i=this.objects,n=0,o=i.length;o>n;n++)t=i[n],e+=t.getLength();return e}.call(this)},o.prototype.toString=function(){return this.objects.join(\"\")},o.prototype.toArray=function(){return this.objects.slice(0)},o.prototype.toJSON=function(){return this.toArray()},o.prototype.isEqualTo=function(t){return o.__super__.isEqualTo.apply(this,arguments)||s(this.objects,null!=t?t.objects:void 0)},s=function(t,e){var n,o,i,r,s;if(null==e&&(e=[]),t.length!==e.length)return!1;for(s=!0,o=n=0,i=t.length;i>n;o=++n)r=t[o],s&&!r.isEqualTo(e[o])&&(s=!1);return s},o.prototype.contentsForInspection=function(){var t;return{objects:\"[\"+function(){var e,n,o,i;for(o=this.objects,i=[],e=0,n=o.length;n>e;e++)t=o[e],i.push(t.inspect());return i}.call(this).join(\", \")+\"]\"}},a=function(t){return t[0]},r=function(t){return t[1]},o}(e.Object)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.Text=function(n){function o(t){var n;null==t&&(t=[]),o.__super__.constructor.apply(this,arguments),this.pieceList=new e.SplittableList(function(){var e,o,i;for(i=[],e=0,o=t.length;o>e;e++)n=t[e],n.isEmpty()||i.push(n);return i}())}return t(o,n),o.textForAttachmentWithAttributes=function(t,n){var o;return o=new e.AttachmentPiece(t,n),new this([o])},o.textForStringWithAttributes=function(t,n){var o;return o=new e.StringPiece(t,n),new this([o])},o.fromJSON=function(t){var n,o;return o=function(){var o,i,r;for(r=[],o=0,i=t.length;i>o;o++)n=t[o],r.push(e.Piece.fromJSON(n));return r}(),new this(o)},o.prototype.copy=function(){return this.copyWithPieceList(this.pieceList)},o.prototype.copyWithPieceList=function(t){return new this.constructor(t.consolidate().toArray())},o.prototype.copyUsingObjectMap=function(t){var e,n;return n=function(){var n,o,i,r,s;for(i=this.getPieces(),s=[],n=0,o=i.length;o>n;n++)e=i[n],s.push(null!=(r=t.find(e))?r:e);return s}.call(this),new this.constructor(n)},o.prototype.appendText=function(t){return this.insertTextAtPosition(t,this.getLength())},o.prototype.insertTextAtPosition=function(t,e){return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t.pieceList,e))},o.prototype.removeTextAtRange=function(t){return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t))},o.prototype.replaceTextAtRange=function(t,e){return this.removeTextAtRange(e).insertTextAtPosition(t,e[0])},o.prototype.moveTextFromRangeToPosition=function(t,e){var n,o;if(!(t[0]<=e&&e<=t[1]))return o=this.getTextAtRange(t),n=o.getLength(),t[0]t;t++)n=o[t],i.push(n.getAttributes());return i}.call(this),e.Hash.fromCommonAttributesOfObjects(t).toObject()},o.prototype.getCommonAttributesAtRange=function(t){var e;return null!=(e=this.getTextAtRange(t).getCommonAttributes())?e:{}},o.prototype.getExpandedRangeForAttributeAtOffset=function(t,e){var n,o,i;for(n=i=e,o=this.getLength();n>0&&this.getCommonAttributesAtRange([n-1,i])[t];)n--;for(;o>i&&this.getCommonAttributesAtRange([e,i+1])[t];)i++;return[n,i]},o.prototype.getTextAtRange=function(t){return this.copyWithPieceList(this.pieceList.getSplittableListInRange(t))},o.prototype.getStringAtRange=function(t){return this.pieceList.getSplittableListInRange(t).toString()},o.prototype.getStringAtPosition=function(t){return this.getStringAtRange([t,t+1])},o.prototype.startsWithString=function(t){return this.getStringAtRange([0,t.length])===t},o.prototype.endsWithString=function(t){var e;return e=this.getLength(),this.getStringAtRange([e-t.length,e])===t},o.prototype.getAttachmentPieces=function(){var t,e,n,o,i;for(o=this.pieceList.toArray(),i=[],t=0,e=o.length;e>t;t++)n=o[t],null!=n.attachment&&i.push(n);return i},o.prototype.getAttachments=function(){var t,e,n,o,i;for(o=this.getAttachmentPieces(),i=[],t=0,e=o.length;e>t;t++)n=o[t],i.push(n.attachment);return i},o.prototype.getAttachmentAndPositionById=function(t){var e,n,o,i,r,s;for(i=0,r=this.pieceList.toArray(),e=0,n=r.length;n>e;e++){if(o=r[e],(null!=(s=o.attachment)?s.id:void 0)===t)return{attachment:o.attachment,position:i};i+=o.length}return{attachment:null,position:null}},o.prototype.getAttachmentById=function(t){var e,n,o;return o=this.getAttachmentAndPositionById(t),e=o.attachment,n=o.position,e},o.prototype.getRangeOfAttachment=function(t){var e,n;return n=this.getAttachmentAndPositionById(t.id),t=n.attachment,e=n.position,null!=t?[e,e+1]:void 0},o.prototype.updateAttributesForAttachment=function(t,e){var n;return(n=this.getRangeOfAttachment(e))?this.addAttributesAtRange(t,n):this},o.prototype.getLength=function(){return this.pieceList.getEndPosition()},o.prototype.isEmpty=function(){return 0===this.getLength()},o.prototype.isEqualTo=function(t){var e;return o.__super__.isEqualTo.apply(this,arguments)||(null!=t&&null!=(e=t.pieceList)?e.isEqualTo(this.pieceList):void 0)},o.prototype.isBlockBreak=function(){return 1===this.getLength()&&this.pieceList.getObjectAtIndex(0).isBlockBreak()},o.prototype.eachPiece=function(t){return this.pieceList.eachObject(t)},o.prototype.getPieces=function(){return this.pieceList.toArray()},o.prototype.getPieceAtPosition=function(t){return this.pieceList.getObjectAtPosition(t)},o.prototype.contentsForInspection=function(){return{pieceList:this.pieceList.inspect()}},o.prototype.toSerializableText=function(){var t;return t=this.pieceList.selectSplittableList(function(t){return t.isSerializable()}),this.copyWithPieceList(t)},o.prototype.toString=function(){return this.pieceList.toString()},o.prototype.toJSON=function(){return this.pieceList.toJSON()},o.prototype.toConsole=function(){var t;return JSON.stringify(function(){var e,n,o,i;for(o=this.pieceList.toArray(),i=[],e=0,n=o.length;n>e;e++)t=o[e],i.push(JSON.parse(t.toConsole()));return i}.call(this))},o}(e.Object)}.call(this),function(){var t,n,o,i,r,s=function(t,e){function n(){this.constructor=t}for(var o in e)a.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},a={}.hasOwnProperty,u=[].slice,c=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=e.arraysAreEqual,r=e.spliceArray,o=e.getBlockConfig,n=e.getBlockAttributeNames,i=e.getListAttributeNames,e.Block=function(n){function a(t,n){null==t&&(t=new e.Text),null==n&&(n=[]),a.__super__.constructor.apply(this,arguments),this.text=h(t),this.attributes=n}var l,h,p,d,f,g,m,y,v;return s(a,n),a.fromJSON=function(t){var n;return n=e.Text.fromJSON(t.text),new this(n,t.attributes)},a.prototype.isEmpty=function(){return this.text.isBlockBreak()},a.prototype.isEqualTo=function(e){return a.__super__.isEqualTo.apply(this,arguments)||this.text.isEqualTo(null!=e?e.text:void 0)&&t(this.attributes,null!=e?e.attributes:void 0)},a.prototype.copyWithText=function(t){return new this.constructor(t,this.attributes)},a.prototype.copyWithoutText=function(){return this.copyWithText(null)},a.prototype.copyWithAttributes=function(t){return new this.constructor(this.text,t)},a.prototype.copyUsingObjectMap=function(t){var e;return this.copyWithText((e=t.find(this.text))?e:this.text.copyUsingObjectMap(t))},a.prototype.addAttribute=function(t){var e;return e=this.attributes.concat(d(t)),this.copyWithAttributes(e)},a.prototype.removeAttribute=function(t){var e,n;return n=o(t).listAttribute,e=g(g(this.attributes,t),n),this.copyWithAttributes(e)},a.prototype.removeLastAttribute=function(){return this.removeAttribute(this.getLastAttribute())},a.prototype.getLastAttribute=function(){return f(this.attributes)},a.prototype.getAttributes=function(){return this.attributes.slice(0)},a.prototype.getAttributeLevel=function(){return this.attributes.length},a.prototype.getAttributeAtLevel=function(t){return this.attributes[t-1]},a.prototype.hasAttributes=function(){return this.getAttributeLevel()>0},a.prototype.getLastNestableAttribute=function(){return f(this.getNestableAttributes())},a.prototype.getNestableAttributes=function(){var t,e,n,i,r;for(i=this.attributes,r=[],e=0,n=i.length;n>e;e++)t=i[e],o(t).nestable&&r.push(t);return r},a.prototype.getNestingLevel=function(){return this.getNestableAttributes().length},a.prototype.decreaseNestingLevel=function(){var t;return(t=this.getLastNestableAttribute())?this.removeAttribute(t):this},a.prototype.increaseNestingLevel=function(){var t,e,n;return(t=this.getLastNestableAttribute())?(n=this.attributes.lastIndexOf(t),e=r.apply(null,[this.attributes,n+1,0].concat(u.call(d(t)))),this.copyWithAttributes(e)):this},a.prototype.getListItemAttributes=function(){var t,e,n,i,r;for(i=this.attributes,r=[],e=0,n=i.length;n>e;e++)t=i[e],o(t).listAttribute&&r.push(t);return r},a.prototype.isListItem=function(){var t;return null!=(t=o(this.getLastAttribute()))?t.listAttribute:void 0},a.prototype.isTerminalBlock=function(){var t;return null!=(t=o(this.getLastAttribute()))?t.terminal:void 0},a.prototype.breaksOnReturn=function(){var t;return null!=(t=o(this.getLastAttribute()))?t.breakOnReturn:void 0},a.prototype.findLineBreakInDirectionFromPosition=function(t,e){var n,o;return o=this.toString(),n=function(){switch(t){case\"forward\":return o.indexOf(\"\\n\",e);case\"backward\":return o.slice(0,e).lastIndexOf(\"\\n\")}}(),-1!==n?n:void 0},a.prototype.contentsForInspection=function(){return{text:this.text.inspect(),attributes:this.attributes}},a.prototype.toString=function(){return this.text.toString()},a.prototype.toJSON=function(){return{text:this.text,attributes:this.attributes}},a.prototype.getLength=function(){return this.text.getLength()},a.prototype.canBeConsolidatedWith=function(t){return!this.hasAttributes()&&!t.hasAttributes()},a.prototype.consolidateWith=function(t){var n,o;return n=e.Text.textForStringWithAttributes(\"\\n\"),o=this.getTextWithoutBlockBreak().appendText(n),this.copyWithText(o.appendText(t.text))},a.prototype.splitAtOffset=function(t){var e,n;return 0===t?(e=null,n=this):t===this.getLength()?(e=this,n=null):(e=this.copyWithText(this.text.getTextAtRange([0,t])),n=this.copyWithText(this.text.getTextAtRange([t,this.getLength()]))),[e,n]},a.prototype.getBlockBreakPosition=function(){return this.text.getLength()-1},a.prototype.getTextWithoutBlockBreak=function(){return m(this.text)?this.text.getTextAtRange([0,this.getBlockBreakPosition()]):this.text.copy()},a.prototype.canBeGrouped=function(t){return this.attributes[t]},a.prototype.canBeGroupedWith=function(t,e){var n,r,s,a;return s=t.getAttributes(),r=s[e],n=this.attributes[e],n===r&&!(o(n).group===!1&&(a=s[e+1],c.call(i(),a)<0))},h=function(t){return t=v(t),t=l(t)},v=function(t){var n,o,i,r,s,a;return r=!1,a=t.getPieces(),o=2<=a.length?u.call(a,0,n=a.length-1):(n=0,[]),i=a[n++],null==i?t:(o=function(){var t,e,n;for(n=[],t=0,e=o.length;e>t;t++)s=o[t],s.isBlockBreak()?(r=!0,n.push(y(s))):n.push(s);return n}(),r?new e.Text(u.call(o).concat([i])):t)},p=e.Text.textForStringWithAttributes(\"\\n\",{blockBreak:!0}),l=function(t){return m(t)?t:t.appendText(p)},m=function(t){var e,n;return n=t.getLength(),0===n?!1:(e=t.getTextAtRange([n-1,n]),e.isBlockBreak())},y=function(t){return t.copyWithoutAttribute(\"blockBreak\")},d=function(t){var e;return e=o(t).listAttribute,null!=e?[e,t]:[t]},f=function(t){return t.slice(-1)[0]},g=function(t,e){var n;return n=t.lastIndexOf(e),-1===n?t:r(t,n,1)},a}(e.Object)}.call(this),function(){var t,n,o,i,r,s,a,u,c,l=function(t,e){function n(){this.constructor=t}for(var o in e)h.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},h={}.hasOwnProperty,p=[].slice,d=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=e.arraysAreEqual,a=e.normalizeSpaces,r=e.makeElement,u=e.tagName,i=e.getBlockTagNames,c=e.walkTree,o=e.findClosestElementFromNode,n=e.elementContainsNode,s=e.nodeIsAttachmentElement,e.HTMLParser=function(h){function f(t,e){this.html=t,this.referenceElement=(null!=e?e:{}).referenceElement,this.blocks=[],this.blockElements=[],this.processedElements=[]}var g,m,y,v,b,A,C,w,x,E,S,k,R,L,D,O;return l(f,h),g=\"style href src width height class\".split(\" \"),f.parse=function(t,e){var n;return n=new this(t,e),n.parse(),n},f.prototype.getDocument=function(){return e.Document.fromJSON(this.blocks)},f.prototype.parse=function(){var t,e;try{for(this.createHiddenContainer(),t=R(this.html),this.containerElement.innerHTML=t,e=c(this.containerElement,{usingFilter:E});e.nextNode();)this.processNode(e.currentNode);return this.translateBlockElementMarginsToNewlines()}finally{this.removeHiddenContainer()}},f.prototype.createHiddenContainer=function(){return this.referenceElement?(this.containerElement=this.referenceElement.cloneNode(!1),this.containerElement.removeAttribute(\"id\"),this.containerElement.setAttribute(\"data-trix-internal\",\"\"),this.containerElement.style.display=\"none\",this.referenceElement.parentNode.insertBefore(this.containerElement,this.referenceElement.nextSibling)):(this.containerElement=r({tagName:\"div\",style:{display:\"none\"}}),document.body.appendChild(this.containerElement))},f.prototype.removeHiddenContainer=function(){return this.containerElement.parentNode.removeChild(this.containerElement)},R=function(t){var e,n,o,i,r,s,a,u,l,h,f,m,y,v,A,C;for(t=t.replace(/<\\/html[^>]*>[^]*$/i,\"\"),n=document.implementation.createHTMLDocument(\"\"),n.documentElement.innerHTML=t,e=n.body,o=n.head,y=o.querySelectorAll(\"style\"),i=0,a=y.length;a>i;i++)A=y[i],e.appendChild(A);for(m=[],C=c(e);C.nextNode();)switch(f=C.currentNode,f.nodeType){case Node.ELEMENT_NODE:if(b(f))m.push(f);else for(v=p.call(f.attributes),r=0,u=v.length;u>r;r++)h=v[r].name,d.call(g,h)>=0||0===h.indexOf(\"data-trix\")||f.removeAttribute(h);break;case Node.COMMENT_NODE:m.push(f)}for(s=0,l=m.length;l>s;s++)f=m[s],f.parentNode.removeChild(f);return e.innerHTML},b=function(t){return(null!=t?t.nodeType:void 0)!==Node.ELEMENT_NODE||s(t)?void 0:\"script\"===u(t)||\"false\"===t.getAttribute(\"data-trix-serialize\")},E=function(t){return\"style\"===u(t)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},f.prototype.processNode=function(t){switch(t.nodeType){case Node.TEXT_NODE:return this.processTextNode(t);case Node.ELEMENT_NODE:return this.appendBlockForElement(t),this.processElement(t)}},f.prototype.appendBlockForElement=function(e){var o,i,r,s;if(r=this.isBlockElement(e),i=n(this.currentBlockElement,e),r&&!this.isBlockElement(e.firstChild)){if(!(this.isInsignificantTextNode(e.firstChild)&&this.isBlockElement(e.firstElementChild)||(o=this.getBlockAttributes(e),i&&t(o,this.currentBlock.attributes))))return this.currentBlock=this.appendBlockForAttributesWithElement(o,e),this.currentBlockElement=e}else if(this.currentBlockElement&&!i&&!r)return(s=this.findParentBlockElement(e))?this.appendBlockForElement(s):(this.currentBlock=this.appendEmptyBlock(),this.currentBlockElement=null)},f.prototype.findParentBlockElement=function(t){var e;for(e=t.parentElement;e&&e!==this.containerElement;){if(this.isBlockElement(e)&&d.call(this.blockElements,e)>=0)return e;e=e.parentElement}return null},f.prototype.processTextNode=function(t){var e,n;return this.isInsignificantTextNode(t)?void 0:(n=t.data,v(t.parentNode)||(n=L(n),D(null!=(e=t.previousSibling)?e.textContent:void 0)&&(n=x(n))),this.appendStringWithAttributes(n,this.getTextAttributes(t.parentNode)))},f.prototype.processElement=function(t){var e,n,o,i,r;if(s(t))return e=A(t),Object.keys(e).length&&(i=this.getTextAttributes(t),this.appendAttachmentWithAttributes(e,i),t.innerHTML=\"\"),this.processedElements.push(t);switch(u(t)){case\"br\":return this.isExtraBR(t)||this.isBlockElement(t.nextSibling)||this.appendStringWithAttributes(\"\\n\",this.getTextAttributes(t)),this.processedElements.push(t);case\"img\":e={url:t.getAttribute(\"src\"),contentType:\"image\"},o=w(t);for(n in o)r=o[n],e[n]=r;return this.appendAttachmentWithAttributes(e,this.getTextAttributes(t)),this.processedElements.push(t);case\"tr\":if(t.parentNode.firstChild!==t)return this.appendStringWithAttributes(\"\\n\");break;case\"td\":if(t.parentNode.firstChild!==t)return this.appendStringWithAttributes(\" | \")}},f.prototype.appendBlockForAttributesWithElement=function(t,e){var n;return this.blockElements.push(e),n=m(t),this.blocks.push(n),n},f.prototype.appendEmptyBlock=function(){return this.appendBlockForAttributesWithElement([],null)},f.prototype.appendStringWithAttributes=function(t,e){return this.appendPiece(k(t,e))},f.prototype.appendAttachmentWithAttributes=function(t,e){return this.appendPiece(S(t,e))},f.prototype.appendPiece=function(t){return 0===this.blocks.length&&this.appendEmptyBlock(),this.blocks[this.blocks.length-1].text.push(t)},f.prototype.appendStringToTextAtIndex=function(t,e){var n,o;return o=this.blocks[e].text,n=o[o.length-1],\"string\"===(null!=n?n.type:void 0)?n.string+=t:o.push(k(t))},f.prototype.prependStringToTextAtIndex=function(t,e){var n,o;return o=this.blocks[e].text,n=o[0],\"string\"===(null!=n?n.type:void 0)?n.string=t+n.string:o.unshift(k(t))},k=function(t,e){var n;return null==e&&(e={}),n=\"string\",t=a(t),{string:t,attributes:e,type:n}},S=function(t,e){var n;return null==e&&(e={}),n=\"attachment\",{attachment:t,attributes:e,type:n}},m=function(t){var e;return null==t&&(t={}),e=[],{text:e,attributes:t}},f.prototype.getTextAttributes=function(t){var n,i,r,a,u,c,l,h,p,d,f,g,m;r={},d=e.config.textAttributes;for(n in d)if(u=d[n],u.tagName&&o(t,{matchingSelector:u.tagName,untilNode:this.containerElement}))r[n]=!0;else if(u.parser&&(m=u.parser(t))){for(i=!1,f=this.findBlockElementAncestors(t),c=0,p=f.length;p>c;c++)if(a=f[c],u.parser(a)===m){i=!0;break}i||(r[n]=m)}if(s(t)&&(l=t.getAttribute(\"data-trix-attributes\"))){g=JSON.parse(l);for(h in g)m=g[h],r[h]=m}return r},f.prototype.getBlockAttributes=function(t){var n,o,i,r;for(o=[];t&&t!==this.containerElement;){r=e.config.blockAttributes;for(n in r)i=r[n],i.parse!==!1&&u(t)===i.tagName&&((\"function\"==typeof i.test?i.test(t):void 0)||!i.test)&&(o.push(n),i.listAttribute&&o.push(i.listAttribute));t=t.parentNode}return o.reverse()},f.prototype.findBlockElementAncestors=function(t){var e,n;for(e=[];t&&t!==this.containerElement;)n=u(t),d.call(i(),n)>=0&&e.push(t),t=t.parentNode;return e},A=function(t){return JSON.parse(t.getAttribute(\"data-trix-attachment\"))},w=function(t){var e,n,o;return o=t.getAttribute(\"width\"),n=t.getAttribute(\"height\"),e={},o&&(e.width=parseInt(o,10)),n&&(e.height=parseInt(n,10)),e},f.prototype.isBlockElement=function(t){var e;if((null!=t?t.nodeType:void 0)===Node.ELEMENT_NODE&&!o(t,{matchingSelector:\"td\",untilNode:this.containerElement}))return e=u(t),d.call(i(),e)>=0||\"block\"===window.getComputedStyle(t).display},f.prototype.isInsignificantTextNode=function(t){return(null!=t?t.nodeType:void 0)===Node.TEXT_NODE&&O(t.data)&&!v(t.parentNode)?!t.previousSibling||this.isBlockElement(t.previousSibling)||!t.nextSibling||this.isBlockElement(t.nextSibling):void 0},f.prototype.isExtraBR=function(t){return\"br\"===u(t)&&this.isBlockElement(t.parentNode)&&t.parentNode.lastChild===t},v=function(t){var e;return e=window.getComputedStyle(t).whiteSpace,\"pre\"===e||\"pre-wrap\"===e||\"pre-line\"===e},f.prototype.translateBlockElementMarginsToNewlines=function(){var t,e,n,o,i,r,s,a;for(e=this.getMarginOfDefaultBlockElement(),s=this.blocks,a=[],o=n=0,i=s.length;i>n;o=++n)t=s[o],(r=this.getMarginOfBlockElementAtIndex(o))&&(r.top>2*e.top&&this.prependStringToTextAtIndex(\"\\n\",o),a.push(r.bottom>2*e.bottom?this.appendStringToTextAtIndex(\"\\n\",o):void 0));return a},f.prototype.getMarginOfBlockElementAtIndex=function(t){var e,n;return!(e=this.blockElements[t])||(n=u(e),d.call(i(),n)>=0||d.call(this.processedElements,e)>=0)?void 0:C(e)},f.prototype.getMarginOfDefaultBlockElement=function(){var t;return t=r(e.config.blockAttributes[\"default\"].tagName),this.containerElement.appendChild(t),C(t)},C=function(t){var e;return e=window.getComputedStyle(t),\"block\"===e.display?{top:parseInt(e.marginTop),bottom:parseInt(e.marginBottom)}:void 0},y=RegExp(\"[^\\\\S\"+e.NON_BREAKING_SPACE+\"]\"),L=function(t){return t.replace(RegExp(\"\"+y.source,\"g\"),\" \").replace(/\\ {2,}/g,\" \")},x=function(t){return t.replace(RegExp(\"^\"+y.source+\"+\"),\"\")},O=function(t){return RegExp(\"^\"+y.source+\"*$\").test(t)},D=function(t){return/\\s$/.test(t)},f}(e.BasicObject)}.call(this),function(){var t,n,o,i,r=function(t,e){function n(){this.constructor=t}for(var o in e)s.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},s={}.hasOwnProperty,a=[].slice,u=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=e.arraysAreEqual,o=e.normalizeRange,i=e.rangeIsCollapsed,n=e.getBlockConfig,e.Document=function(s){function c(t){null==t&&(t=[]),c.__super__.constructor.apply(this,arguments),0===t.length&&(t=[new e.Block]),this.blockList=e.SplittableList.box(t)}var l;return r(c,s),c.fromJSON=function(t){var n,o;return o=function(){var o,i,r;for(r=[],o=0,i=t.length;i>o;o++)n=t[o],r.push(e.Block.fromJSON(n));return r}(),new this(o)},c.fromHTML=function(t,n){return e.HTMLParser.parse(t,n).getDocument()},c.fromString=function(t,n){var o;return o=e.Text.textForStringWithAttributes(t,n),new this([new e.Block(o)])},c.prototype.isEmpty=function(){var t;return 1===this.blockList.length&&(t=this.getBlockAtIndex(0),t.isEmpty()&&!t.hasAttributes())},c.prototype.copy=function(t){var e;return null==t&&(t={}),e=t.consolidateBlocks?this.blockList.consolidate().toArray():this.blockList.toArray(),new this.constructor(e)},c.prototype.copyUsingObjectsFromDocument=function(t){var n;return n=new e.ObjectMap(t.getObjects()),this.copyUsingObjectMap(n)},c.prototype.copyUsingObjectMap=function(t){var e,n,o;return n=function(){var n,i,r,s;for(r=this.getBlocks(),s=[],n=0,i=r.length;i>n;n++)e=r[n],s.push((o=t.find(e))?o:e.copyUsingObjectMap(t));return s}.call(this),new this.constructor(n)},c.prototype.copyWithBaseBlockAttributes=function(t){var e,n,o;return null==t&&(t=[]),o=function(){var o,i,r,s;for(r=this.getBlocks(),s=[],o=0,i=r.length;i>o;o++)n=r[o],e=t.concat(n.getAttributes()),s.push(n.copyWithAttributes(e));return s}.call(this),new this.constructor(o)},c.prototype.replaceBlock=function(t,e){var n;return n=this.blockList.indexOf(t),-1===n?this:new this.constructor(this.blockList.replaceObjectAtIndex(e,n))},c.prototype.insertDocumentAtRange=function(t,e){var n,r,s,a,u,c,l;return r=t.blockList,u=(e=o(e))[0],c=this.locationFromPosition(u),s=c.index,a=c.offset,l=this,n=this.getBlockAtPosition(u),i(e)&&n.isEmpty()&&!n.hasAttributes()?l=new this.constructor(l.blockList.removeObjectAtIndex(s)):n.getBlockBreakPosition()===a&&u++,l=l.removeTextAtRange(e),new this.constructor(l.blockList.insertSplittableListAtPosition(r,u))},c.prototype.mergeDocumentAtRange=function(e,n){var i,r,s,a,u,c,l,h,p,d,f,g;return f=(n=o(n))[0],d=this.locationFromPosition(f),r=this.getBlockAtIndex(d.index).getAttributes(),i=e.getBaseBlockAttributes(),g=r.slice(-i.length),t(i,g)?(l=r.slice(0,-i.length),c=e.copyWithBaseBlockAttributes(l)):c=e.copy({consolidateBlocks:!0}).copyWithBaseBlockAttributes(r),s=c.getBlockCount(),a=c.getBlockAtIndex(0),t(r,a.getAttributes())?(u=a.getTextWithoutBlockBreak(),p=this.insertTextAtRange(u,n),s>1&&(c=new this.constructor(c.getBlocks().slice(1)),h=f+u.getLength(),p=p.insertDocumentAtRange(c,h))):p=this.insertDocumentAtRange(c,n),p},c.prototype.insertTextAtRange=function(t,e){var n,i,r,s,a;return a=(e=o(e))[0],s=this.locationFromPosition(a),i=s.index,r=s.offset,n=this.removeTextAtRange(e),new this.constructor(n.blockList.editObjectAtIndex(i,function(e){return e.copyWithText(e.text.insertTextAtPosition(t,r))}))},c.prototype.removeTextAtRange=function(t){var e,n,r,s,a,u,c,l,h,p,d,f,g,m,y,v,b,A,C,w,x;return p=t=o(t),l=p[0],A=p[1],i(t)?this:(d=this.locationRangeFromRange(t),u=d[0],v=d[1],a=u.index,c=u.offset,s=this.getBlockAtIndex(a),y=v.index,b=v.offset,m=this.getBlockAtIndex(y),f=A-l===1&&s.getBlockBreakPosition()===c&&m.getBlockBreakPosition()!==b&&\"\\n\"===m.text.getStringAtPosition(b),f?r=this.blockList.editObjectAtIndex(y,function(t){return t.copyWithText(t.text.removeTextAtRange([b,b+1]))\n}):(h=s.text.getTextAtRange([0,c]),C=m.text.getTextAtRange([b,m.getLength()]),w=h.appendText(C),g=a!==y&&0===c,x=g&&s.getAttributeLevel()>=m.getAttributeLevel(),n=x?m.copyWithText(w):s.copyWithText(w),e=y+1-a,r=this.blockList.splice(a,e,n)),new this.constructor(r))},c.prototype.moveTextFromRangeToPosition=function(t,e){var n,i,r,s,u,c,l,h,p,d;if(c=t=o(t),p=c[0],r=c[1],e>=p&&r>=e)return this;if(i=this.getDocumentAtRange(t),h=this.removeTextAtRange(t),u=e>p,u&&(e-=i.getLength()),!h.firstBlockInRangeIsEntirelySelected(t)){if(l=i.getBlocks(),s=l[0],n=2<=l.length?a.call(l,1):[],0===n.length?(d=s.getTextWithoutBlockBreak(),u&&(e+=1)):d=s.text,h=h.insertTextAtRange(d,e),0===n.length)return h;i=new this.constructor(n),e+=d.getLength()}return h.insertDocumentAtRange(i,e)},c.prototype.addAttributeAtRange=function(t,e,o){var i;return i=this.blockList,this.eachBlockAtRange(o,function(o,r,s){return i=i.editObjectAtIndex(s,function(){return n(t)?o.addAttribute(t,e):r[0]===r[1]?o:o.copyWithText(o.text.addAttributeAtRange(t,e,r))})}),new this.constructor(i)},c.prototype.addAttribute=function(t,e){var n;return n=this.blockList,this.eachBlock(function(o,i){return n=n.editObjectAtIndex(i,function(){return o.addAttribute(t,e)})}),new this.constructor(n)},c.prototype.removeAttributeAtRange=function(t,e){var o;return o=this.blockList,this.eachBlockAtRange(e,function(e,i,r){return n(t)?o=o.editObjectAtIndex(r,function(){return e.removeAttribute(t)}):i[0]!==i[1]?o=o.editObjectAtIndex(r,function(){return e.copyWithText(e.text.removeAttributeAtRange(t,i))}):void 0}),new this.constructor(o)},c.prototype.updateAttributesForAttachment=function(t,e){var n,o,i,r;return i=(o=this.getRangeOfAttachment(e))[0],n=this.locationFromPosition(i).index,r=this.getTextAtIndex(n),new this.constructor(this.blockList.editObjectAtIndex(n,function(n){return n.copyWithText(r.updateAttributesForAttachment(t,e))}))},c.prototype.removeAttributeForAttachment=function(t,e){var n;return n=this.getRangeOfAttachment(e),this.removeAttributeAtRange(t,n)},c.prototype.insertBlockBreakAtRange=function(t){var n,i,r,s;return s=(t=o(t))[0],r=this.locationFromPosition(s).offset,i=this.removeTextAtRange(t),0===r&&(n=[new e.Block]),new this.constructor(i.blockList.insertSplittableListAtPosition(new e.SplittableList(n),s))},c.prototype.applyBlockAttributeAtRange=function(t,e,o){var i,r,s,a;return s=this.expandRangeToLineBreaksAndSplitBlocks(o),r=s.document,o=s.range,i=n(t),i.listAttribute?(r=r.removeLastListAttributeAtRange(o,{exceptAttributeName:t}),a=r.convertLineBreaksToBlockBreaksInRange(o),r=a.document,o=a.range):r=i.terminal?r.removeLastTerminalAttributeAtRange(o):r.consolidateBlocksAtRange(o),r.addAttributeAtRange(t,e,o)},c.prototype.removeLastListAttributeAtRange=function(t,e){var o;return null==e&&(e={}),o=this.blockList,this.eachBlockAtRange(t,function(t,i,r){var s;if((s=t.getLastAttribute())&&n(s).listAttribute&&s!==e.exceptAttributeName)return o=o.editObjectAtIndex(r,function(){return t.removeAttribute(s)})}),new this.constructor(o)},c.prototype.removeLastTerminalAttributeAtRange=function(t){var e;return e=this.blockList,this.eachBlockAtRange(t,function(t,o,i){var r;if((r=t.getLastAttribute())&&n(r).terminal)return e=e.editObjectAtIndex(i,function(){return t.removeAttribute(r)})}),new this.constructor(e)},c.prototype.firstBlockInRangeIsEntirelySelected=function(t){var e,n,i,r,s,a;return r=t=o(t),a=r[0],e=r[1],n=this.locationFromPosition(a),s=this.locationFromPosition(e),0===n.offset&&n.indexc.index?(i.index-=1,i.offset=e.getBlockAtIndex(i.index).getBlockBreakPosition()):(n=e.getBlockAtIndex(i.index),\"\\n\"===n.text.getStringAtRange([i.offset-1,i.offset])?i.offset-=1:i.offset=n.findLineBreakInDirectionFromPosition(\"forward\",i.offset),i.offset!==n.getBlockBreakPosition()&&(s=e.positionFromLocation(i),e=e.insertBlockBreakAtRange([s,s+1]))),l=e.positionFromLocation(c),r=e.positionFromLocation(i),t=o([l,r]),{document:e,range:t}},c.prototype.convertLineBreaksToBlockBreaksInRange=function(t){var e,n,i;return n=(t=o(t))[0],i=this.getStringAtRange(t).slice(0,-1),e=this,i.replace(/.*?\\n/g,function(t){return n+=t.length,e=e.insertBlockBreakAtRange([n-1,n])}),{document:e,range:t}},c.prototype.consolidateBlocksAtRange=function(t){var e,n,i,r,s;return i=t=o(t),s=i[0],n=i[1],r=this.locationFromPosition(s).index,e=this.locationFromPosition(n).index,new this.constructor(this.blockList.consolidateFromIndexToIndex(r,e))},c.prototype.getDocumentAtRange=function(t){var e;return t=o(t),e=this.blockList.getSplittableListInRange(t).toArray(),new this.constructor(e)},c.prototype.getStringAtRange=function(t){return this.getDocumentAtRange(t).toString()},c.prototype.getBlockAtIndex=function(t){return this.blockList.getObjectAtIndex(t)},c.prototype.getBlockAtPosition=function(t){var e;return e=this.locationFromPosition(t).index,this.getBlockAtIndex(e)},c.prototype.getTextAtIndex=function(t){var e;return null!=(e=this.getBlockAtIndex(t))?e.text:void 0},c.prototype.getTextAtPosition=function(t){var e;return e=this.locationFromPosition(t).index,this.getTextAtIndex(e)},c.prototype.getPieceAtPosition=function(t){var e,n,o;return o=this.locationFromPosition(t),e=o.index,n=o.offset,this.getTextAtIndex(e).getPieceAtPosition(n)},c.prototype.getCharacterAtPosition=function(t){var e,n,o;return o=this.locationFromPosition(t),e=o.index,n=o.offset,this.getTextAtIndex(e).getStringAtRange([n,n+1])},c.prototype.getLength=function(){return this.blockList.getEndPosition()},c.prototype.getBlocks=function(){return this.blockList.toArray()},c.prototype.getBlockCount=function(){return this.blockList.length},c.prototype.getEditCount=function(){return this.editCount},c.prototype.eachBlock=function(t){return this.blockList.eachObject(t)},c.prototype.eachBlockAtRange=function(t,e){var n,i,r,s,a,u,c,l,h,p,d,f;if(u=t=o(t),d=u[0],r=u[1],p=this.locationFromPosition(d),i=this.locationFromPosition(r),p.index===i.index)return n=this.getBlockAtIndex(p.index),f=[p.offset,i.offset],e(n,f,p.index);for(h=[],a=s=c=p.index,l=i.index;l>=c?l>=s:s>=l;a=l>=c?++s:--s)(n=this.getBlockAtIndex(a))?(f=function(){switch(a){case p.index:return[p.offset,n.text.getLength()];case i.index:return[0,i.offset];default:return[0,n.text.getLength()]}}(),h.push(e(n,f,a))):h.push(void 0);return h},c.prototype.getCommonAttributesAtRange=function(t){var n,r,s;return r=(t=o(t))[0],i(t)?this.getCommonAttributesAtPosition(r):(s=[],n=[],this.eachBlockAtRange(t,function(t,e){return e[0]!==e[1]?(s.push(t.text.getCommonAttributesAtRange(e)),n.push(l(t))):void 0}),e.Hash.fromCommonAttributesOfObjects(s).merge(e.Hash.fromCommonAttributesOfObjects(n)).toObject())},c.prototype.getCommonAttributesAtPosition=function(t){var n,o,i,r,s,a,c,h,p,d;if(p=this.locationFromPosition(t),s=p.index,h=p.offset,i=this.getBlockAtIndex(s),!i)return{};r=l(i),n=i.text.getAttributesAtPosition(h),o=i.text.getAttributesAtPosition(h-1),a=function(){var t,n;t=e.config.textAttributes,n=[];for(c in t)d=t[c],d.inheritable&&n.push(c);return n}();for(c in o)d=o[c],(d===n[c]||u.call(a,c)>=0)&&(r[c]=d);return r},c.prototype.getRangeOfCommonAttributeAtPosition=function(t,e){var n,i,r,s,a,u,c,l,h;return a=this.locationFromPosition(e),r=a.index,s=a.offset,h=this.getTextAtIndex(r),u=h.getExpandedRangeForAttributeAtOffset(t,s),l=u[0],i=u[1],c=this.positionFromLocation({index:r,offset:l}),n=this.positionFromLocation({index:r,offset:i}),o([c,n])},c.prototype.getBaseBlockAttributes=function(){var t,e,n,o,i,r,s;for(t=this.getBlockAtIndex(0).getAttributes(),n=o=1,s=this.getBlockCount();s>=1?s>o:o>s;n=s>=1?++o:--o)e=this.getBlockAtIndex(n).getAttributes(),r=Math.min(t.length,e.length),t=function(){var n,o,s;for(s=[],i=n=0,o=r;(o>=0?o>n:n>o)&&e[i]===t[i];i=o>=0?++n:--n)s.push(e[i]);return s}();return t},l=function(t){var e,n;return n={},(e=t.getLastAttribute())&&(n[e]=!0),n},c.prototype.getAttachmentById=function(t){var e,n,o,i;for(i=this.getAttachments(),n=0,o=i.length;o>n;n++)if(e=i[n],e.id===t)return e},c.prototype.getAttachmentPieces=function(){var t;return t=[],this.blockList.eachObject(function(e){var n;return n=e.text,t=t.concat(n.getAttachmentPieces())}),t},c.prototype.getAttachments=function(){var t,e,n,o,i;for(o=this.getAttachmentPieces(),i=[],t=0,e=o.length;e>t;t++)n=o[t],i.push(n.attachment);return i},c.prototype.getRangeOfAttachment=function(t){var e,n,i,r,s,a,u;for(r=0,s=this.blockList.toArray(),n=e=0,i=s.length;i>e;n=++e){if(a=s[n].text,u=a.getRangeOfAttachment(t))return o([r+u[0],r+u[1]]);r+=a.getLength()}},c.prototype.getLocationRangeOfAttachment=function(t){var e;return e=this.getRangeOfAttachment(t),this.locationRangeFromRange(e)},c.prototype.getAttachmentPieceForAttachment=function(t){var e,n,o,i;for(i=this.getAttachmentPieces(),e=0,n=i.length;n>e;e++)if(o=i[e],o.attachment===t)return o},c.prototype.locationFromPosition=function(t){var e,n;return n=this.blockList.findIndexAndOffsetAtPosition(Math.max(0,t)),null!=n.index?n:(e=this.getBlocks(),{index:e.length-1,offset:e[e.length-1].getLength()})},c.prototype.positionFromLocation=function(t){return this.blockList.findPositionAtIndexAndOffset(t.index,t.offset)},c.prototype.locationRangeFromPosition=function(t){return o(this.locationFromPosition(t))},c.prototype.locationRangeFromRange=function(t){var e,n,i,r;if(t=o(t))return r=t[0],n=t[1],i=this.locationFromPosition(r),e=this.locationFromPosition(n),o([i,e])},c.prototype.rangeFromLocationRange=function(t){var e,n;return t=o(t),e=this.positionFromLocation(t[0]),i(t)||(n=this.positionFromLocation(t[1])),o([e,n])},c.prototype.isEqualTo=function(t){return this.blockList.isEqualTo(null!=t?t.blockList:void 0)},c.prototype.getTexts=function(){var t,e,n,o,i;for(o=this.getBlocks(),i=[],e=0,n=o.length;n>e;e++)t=o[e],i.push(t.text);return i},c.prototype.getPieces=function(){var t,e,n,o,i;for(n=[],o=this.getTexts(),t=0,e=o.length;e>t;t++)i=o[t],n.push.apply(n,i.getPieces());return n},c.prototype.getObjects=function(){return this.getBlocks().concat(this.getTexts()).concat(this.getPieces())},c.prototype.toSerializableDocument=function(){var t;return t=[],this.blockList.eachObject(function(e){return t.push(e.copyWithText(e.text.toSerializableText()))}),new this.constructor(t)},c.prototype.toString=function(){return this.blockList.toString()},c.prototype.toJSON=function(){return this.blockList.toJSON()},c.prototype.toConsole=function(){var t;return JSON.stringify(function(){var e,n,o,i;for(o=this.blockList.toArray(),i=[],e=0,n=o.length;n>e;e++)t=o[e],i.push(JSON.parse(t.text.toConsole()));return i}.call(this))},c}(e.Object)}.call(this),function(){e.LineBreakInsertion=function(){function t(t){var e;this.composition=t,this.document=this.composition.document,e=this.composition.getSelectedRange(),this.startPosition=e[0],this.endPosition=e[1],this.startLocation=this.document.locationFromPosition(this.startPosition),this.endLocation=this.document.locationFromPosition(this.endPosition),this.block=this.document.getBlockAtIndex(this.endLocation.index),this.breaksOnReturn=this.block.breaksOnReturn(),this.previousCharacter=this.block.text.getStringAtPosition(this.endLocation.offset-1),this.nextCharacter=this.block.text.getStringAtPosition(this.endLocation.offset)}return t.prototype.shouldInsertBlockBreak=function(){return this.block.hasAttributes()&&this.block.isListItem()&&!this.block.isEmpty()?0!==this.startLocation.offset:this.breaksOnReturn&&\"\\n\"!==this.nextCharacter},t.prototype.shouldBreakFormattedBlock=function(){return this.block.hasAttributes()&&!this.block.isListItem()&&(this.breaksOnReturn&&\"\\n\"===this.nextCharacter||\"\\n\"===this.previousCharacter)},t.prototype.shouldDecreaseListLevel=function(){return this.block.hasAttributes()&&this.block.isListItem()&&this.block.isEmpty()},t.prototype.shouldPrependListItem=function(){return this.block.isListItem()&&0===this.startLocation.offset&&!this.block.isEmpty()},t.prototype.shouldRemoveLastBlockAttribute=function(){return this.block.hasAttributes()&&!this.block.isListItem()&&this.block.isEmpty()},t}()}.call(this),function(){var t,n,o,i,r,s,a,u,c,l,h=function(t,e){function n(){this.constructor=t}for(var o in e)p.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},p={}.hasOwnProperty;s=e.normalizeRange,c=e.rangesAreEqual,u=e.rangeIsCollapsed,a=e.objectsAreEqual,t=e.arrayStartsWith,l=e.summarizeArrayChange,o=e.getAllAttributeNames,i=e.getBlockConfig,r=e.getTextConfig,n=e.extend,e.Composition=function(p){function d(){this.document=new e.Document,this.attachments=[],this.currentAttributes={},this.revision=0}var f;return h(d,p),d.prototype.setDocument=function(t){var e;return t.isEqualTo(this.document)?void 0:(this.document=t,this.refreshAttachments(),this.revision++,null!=(e=this.delegate)&&\"function\"==typeof e.compositionDidChangeDocument?e.compositionDidChangeDocument(t):void 0)},d.prototype.getSnapshot=function(){return{document:this.document,selectedRange:this.getSelectedRange()}},d.prototype.loadSnapshot=function(t){var n,o,i,r;return n=t.document,r=t.selectedRange,null!=(o=this.delegate)&&\"function\"==typeof o.compositionWillLoadSnapshot&&o.compositionWillLoadSnapshot(),this.setDocument(null!=n?n:new e.Document),this.setSelection(null!=r?r:[0,0]),null!=(i=this.delegate)&&\"function\"==typeof i.compositionDidLoadSnapshot?i.compositionDidLoadSnapshot():void 0},d.prototype.insertText=function(t,e){var n,o,i,r;return r=(null!=e?e:{updatePosition:!0}).updatePosition,o=this.getSelectedRange(),this.setDocument(this.document.insertTextAtRange(t,o)),i=o[0],n=i+t.getLength(),r&&this.setSelection(n),this.notifyDelegateOfInsertionAtRange([i,n])},d.prototype.insertBlock=function(t){var n;return null==t&&(t=new e.Block),n=new e.Document([t]),this.insertDocument(n)},d.prototype.insertDocument=function(t){var n,o,i;return null==t&&(t=new e.Document),o=this.getSelectedRange(),this.setDocument(this.document.insertDocumentAtRange(t,o)),i=o[0],n=i+t.getLength(),this.setSelection(n),this.notifyDelegateOfInsertionAtRange([i,n])},d.prototype.insertString=function(t,n){var o,i;return o=this.getCurrentTextAttributes(),i=e.Text.textForStringWithAttributes(t,o),this.insertText(i,n)},d.prototype.insertBlockBreak=function(){var t,e,n;return e=this.getSelectedRange(),this.setDocument(this.document.insertBlockBreakAtRange(e)),n=e[0],t=n+1,this.setSelection(t),this.notifyDelegateOfInsertionAtRange([n,t])},d.prototype.insertLineBreak=function(){var t,n;return n=new e.LineBreakInsertion(this),n.shouldDecreaseListLevel()?(this.decreaseListLevel(),this.setSelection(n.startPosition)):n.shouldPrependListItem()?(t=new e.Document([n.block.copyWithoutText()]),this.insertDocument(t)):n.shouldInsertBlockBreak()?this.insertBlockBreak():n.shouldRemoveLastBlockAttribute()?this.removeLastBlockAttribute():n.shouldBreakFormattedBlock()?this.breakFormattedBlock(n):this.insertString(\"\\n\")},d.prototype.insertHTML=function(t){var n,o,i,r,s;return s=this.getPosition(),r=this.document.getLength(),n=e.Document.fromHTML(t),this.setDocument(this.document.mergeDocumentAtRange(n,this.getSelectedRange())),o=this.document.getLength(),i=s+(o-r),this.setSelection(i),this.notifyDelegateOfInsertionAtRange([i,i])},d.prototype.replaceHTML=function(t){var n,o,i;return n=e.Document.fromHTML(t).copyUsingObjectsFromDocument(this.document),o=this.getLocationRange({strict:!1}),i=this.document.rangeFromLocationRange(o),this.setDocument(n),this.setSelection(i)},d.prototype.insertFile=function(t){var n,o;return(null!=(o=this.delegate)?o.compositionShouldAcceptFile(t):void 0)?(n=e.Attachment.attachmentForFile(t),this.insertAttachment(n)):void 0},d.prototype.insertFiles=function(t){var n,o,i,r,s,a,u;for(u=new e.Text,r=0,s=t.length;s>r;r++)i=t[r],(null!=(a=this.delegate)?a.compositionShouldAcceptFile(i):void 0)&&(n=e.Attachment.attachmentForFile(i),o=e.Text.textForAttachmentWithAttributes(n,this.currentAttributes),u=u.appendText(o));return this.insertText(u)},d.prototype.insertAttachment=function(t){var n;return n=e.Text.textForAttachmentWithAttributes(t,this.currentAttributes),this.insertText(n)},d.prototype.deleteInDirection=function(t){var e,n,o,i,r,s,a;return i=this.getLocationRange(),r=this.getSelectedRange(),s=u(r),s?o=\"backward\"===t&&0===i[0].offset:a=i[0].index!==i[1].index,o&&this.canDecreaseBlockAttributeLevel()&&(n=this.getBlock(),n.isListItem()?this.decreaseListLevel():this.decreaseBlockAttributeLevel(),this.setSelection(r[0]),n.isEmpty())?!1:(s&&(r=this.getExpandedRangeInDirection(t),\"backward\"===t&&(e=this.getAttachmentAtRange(r))),e?(this.editAttachment(e),!1):(this.setDocument(this.document.removeTextAtRange(r)),this.setSelection(r[0]),o||a?!1:void 0))},d.prototype.moveTextFromRange=function(t){var e;return e=this.getSelectedRange()[0],this.setDocument(this.document.moveTextFromRangeToPosition(t,e)),this.setSelection(e)},d.prototype.removeAttachment=function(t){var e;return(e=this.document.getRangeOfAttachment(t))?(this.stopEditingAttachment(),this.setDocument(this.document.removeTextAtRange(e)),this.setSelection(e[0])):void 0},d.prototype.removeLastBlockAttribute=function(){var t,e,n,o;return n=this.getSelectedRange(),o=n[0],e=n[1],t=this.document.getBlockAtPosition(e),this.removeCurrentAttribute(t.getLastAttribute()),this.setSelection(o)},f=\" \",d.prototype.insertPlaceholder=function(){return this.placeholderPosition=this.getPosition(),this.insertString(f)},d.prototype.selectPlaceholder=function(){return null!=this.placeholderPosition?(this.setSelectedRange([this.placeholderPosition,this.placeholderPosition+f.length]),this.getSelectedRange()):void 0},d.prototype.forgetPlaceholder=function(){return this.placeholderPosition=null},d.prototype.hasCurrentAttribute=function(t){var e;return e=this.currentAttributes[t],null!=e&&e!==!1},d.prototype.toggleCurrentAttribute=function(t){var e;return(e=!this.currentAttributes[t])?this.setCurrentAttribute(t,e):this.removeCurrentAttribute(t)},d.prototype.canSetCurrentAttribute=function(t){return i(t)?this.canSetCurrentBlockAttribute(t):this.canSetCurrentTextAttribute(t)},d.prototype.canSetCurrentTextAttribute=function(t){switch(t){case\"href\":return!this.selectionContainsAttachmentWithAttribute(t);default:return!0}},d.prototype.canSetCurrentBlockAttribute=function(){var t;if(t=this.getBlock())return!t.isTerminalBlock()},d.prototype.setCurrentAttribute=function(t,e){return i(t)?this.setBlockAttribute(t,e):(this.setTextAttribute(t,e),this.currentAttributes[t]=e,this.notifyDelegateOfCurrentAttributesChange())},d.prototype.setTextAttribute=function(t,n){var o,i,r,s;if(i=this.getSelectedRange())return r=i[0],o=i[1],r!==o?this.setDocument(this.document.addAttributeAtRange(t,n,i)):\"href\"===t?(s=e.Text.textForStringWithAttributes(n,{href:n}),this.insertText(s)):void 0},d.prototype.setBlockAttribute=function(t,e){var n,o;if(o=this.getSelectedRange())return this.canSetCurrentAttribute(t)?(n=this.getBlock(),this.setDocument(this.document.applyBlockAttributeAtRange(t,e,o)),this.setSelection(o)):void 0},d.prototype.removeCurrentAttribute=function(t){return i(t)?(this.removeBlockAttribute(t),this.updateCurrentAttributes()):(this.removeTextAttribute(t),delete this.currentAttributes[t],this.notifyDelegateOfCurrentAttributesChange())},d.prototype.removeTextAttribute=function(t){var e;if(e=this.getSelectedRange())return this.setDocument(this.document.removeAttributeAtRange(t,e))},d.prototype.removeBlockAttribute=function(t){var e;if(e=this.getSelectedRange())return this.setDocument(this.document.removeAttributeAtRange(t,e))},d.prototype.canDecreaseNestingLevel=function(){var t;return(null!=(t=this.getBlock())?t.getNestingLevel():void 0)>0},d.prototype.canIncreaseNestingLevel=function(){var e,n,o;if(e=this.getBlock())return(null!=(o=i(e.getLastNestableAttribute()))?o.listAttribute:0)?(n=this.getPreviousBlock())?t(n.getListItemAttributes(),e.getListItemAttributes()):void 0:e.getNestingLevel()>0},d.prototype.decreaseNestingLevel=function(){var t;if(t=this.getBlock())return this.setDocument(this.document.replaceBlock(t,t.decreaseNestingLevel()))},d.prototype.increaseNestingLevel=function(){var t;if(t=this.getBlock())return this.setDocument(this.document.replaceBlock(t,t.increaseNestingLevel()))},d.prototype.canDecreaseBlockAttributeLevel=function(){var t;return(null!=(t=this.getBlock())?t.getAttributeLevel():void 0)>0},d.prototype.decreaseBlockAttributeLevel=function(){var t,e;return(t=null!=(e=this.getBlock())?e.getLastAttribute():void 0)?this.removeCurrentAttribute(t):void 0},d.prototype.decreaseListLevel=function(){var t,e,n,o,i,r;for(r=this.getSelectedRange()[0],i=this.document.locationFromPosition(r).index,n=i,t=this.getBlock().getAttributeLevel();(e=this.document.getBlockAtIndex(n+1))&&e.isListItem()&&e.getAttributeLevel()>t;)n++;return r=this.document.positionFromLocation({index:i,offset:0}),o=this.document.positionFromLocation({index:n,offset:0}),this.setDocument(this.document.removeLastListAttributeAtRange([r,o]))},d.prototype.updateCurrentAttributes=function(){var t,e,n,i,r,s;if(s=this.getSelectedRange({ignoreLock:!0})){for(e=this.document.getCommonAttributesAtRange(s),r=o(),n=0,i=r.length;i>n;n++)t=r[n],e[t]||this.canSetCurrentAttribute(t)||(e[t]=!1);if(!a(e,this.currentAttributes))return this.currentAttributes=e,this.notifyDelegateOfCurrentAttributesChange()}},d.prototype.getCurrentAttributes=function(){return n.call({},this.currentAttributes)},d.prototype.getCurrentTextAttributes=function(){var t,e,n,o;t={},n=this.currentAttributes;for(e in n)o=n[e],r(e)&&(t[e]=o);return t},d.prototype.freezeSelection=function(){return this.setCurrentAttribute(\"frozen\",!0)},d.prototype.thawSelection=function(){return this.removeCurrentAttribute(\"frozen\")},d.prototype.hasFrozenSelection=function(){return this.hasCurrentAttribute(\"frozen\")},d.proxyMethod(\"getSelectionManager().getPointRange\"),d.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\"),d.proxyMethod(\"getSelectionManager().locationIsCursorTarget\"),d.proxyMethod(\"getSelectionManager().selectionIsExpanded\"),d.proxyMethod(\"delegate?.getSelectionManager\"),d.prototype.setSelection=function(t){var e,n;return e=this.document.locationRangeFromRange(t),null!=(n=this.delegate)?n.compositionDidRequestChangingSelectionToLocationRange(e):void 0},d.prototype.getSelectedRange=function(){var t;return(t=this.getLocationRange())?this.document.rangeFromLocationRange(t):void 0},d.prototype.setSelectedRange=function(t){var e;return e=this.document.locationRangeFromRange(t),this.getSelectionManager().setLocationRange(e)},d.prototype.getPosition=function(){var t;return(t=this.getLocationRange())?this.document.positionFromLocation(t[0]):void 0},d.prototype.getLocationRange=function(t){var e;return null!=(e=this.getSelectionManager().getLocationRange(t))?e:s({index:0,offset:0})},d.prototype.getExpandedRangeInDirection=function(t){var e,n,o;return n=this.getSelectedRange(),o=n[0],e=n[1],\"backward\"===t?o=this.translateUTF16PositionFromOffset(o,-1):e=this.translateUTF16PositionFromOffset(e,1),s([o,e])},d.prototype.moveCursorInDirection=function(t){var e,n,o,i;return this.editingAttachment?o=this.document.getRangeOfAttachment(this.editingAttachment):(i=this.getSelectedRange(),o=this.getExpandedRangeInDirection(t),n=!c(i,o)),this.setSelectedRange(\"backward\"===t?o[0]:o[1]),n&&(e=this.getAttachmentAtRange(o))?this.editAttachment(e):void 0},d.prototype.expandSelectionInDirection=function(t){var e;return e=this.getExpandedRangeInDirection(t),this.setSelectedRange(e)},d.prototype.expandSelectionForEditing=function(){return this.hasCurrentAttribute(\"href\")?this.expandSelectionAroundCommonAttribute(\"href\"):void 0},d.prototype.expandSelectionAroundCommonAttribute=function(t){var e,n;return e=this.getPosition(),n=this.document.getRangeOfCommonAttributeAtPosition(t,e),this.setSelectedRange(n)},d.prototype.selectionContainsAttachmentWithAttribute=function(t){var e,n,o,i,r;if(r=this.getSelectedRange()){for(i=this.document.getDocumentAtRange(r).getAttachments(),n=0,o=i.length;o>n;n++)if(e=i[n],e.hasAttribute(t))return!0;return!1}},d.prototype.selectionIsInCursorTarget=function(){return this.editingAttachment||this.positionIsCursorTarget(this.getPosition())},d.prototype.positionIsCursorTarget=function(t){var e;return(e=this.document.locationFromPosition(t))?this.locationIsCursorTarget(e):void 0},d.prototype.positionIsBlockBreak=function(t){var e;return null!=(e=this.document.getPieceAtPosition(t))?e.isBlockBreak():void 0},d.prototype.getSelectedDocument=function(){var t;return(t=this.getSelectedRange())?this.document.getDocumentAtRange(t):void 0},d.prototype.getAttachments=function(){return this.attachments.slice(0)},d.prototype.refreshAttachments=function(){var t,e,n,o,i,r,s,a,u,c,h,p;for(n=this.document.getAttachments(),a=l(this.attachments,n),t=a.added,h=a.removed,this.attachments=n,o=0,r=h.length;r>o;o++)e=h[o],e.delegate=null,null!=(u=this.delegate)&&\"function\"==typeof u.compositionDidRemoveAttachment&&u.compositionDidRemoveAttachment(e);for(p=[],i=0,s=t.length;s>i;i++)e=t[i],e.delegate=this,p.push(null!=(c=this.delegate)&&\"function\"==typeof c.compositionDidAddAttachment?c.compositionDidAddAttachment(e):void 0);return p},d.prototype.attachmentDidChangeAttributes=function(t){var e;return this.revision++,null!=(e=this.delegate)&&\"function\"==typeof e.compositionDidEditAttachment?e.compositionDidEditAttachment(t):void 0},d.prototype.attachmentDidChangePreviewURL=function(t){var e;return this.revision++,null!=(e=this.delegate)&&\"function\"==typeof e.compositionDidChangeAttachmentPreviewURL?e.compositionDidChangeAttachmentPreviewURL(t):void 0},d.prototype.editAttachment=function(t){var e;if(t!==this.editingAttachment)return this.stopEditingAttachment(),this.editingAttachment=t,null!=(e=this.delegate)&&\"function\"==typeof e.compositionDidStartEditingAttachment?e.compositionDidStartEditingAttachment(this.editingAttachment):void 0},d.prototype.stopEditingAttachment=function(){var t;if(this.editingAttachment)return null!=(t=this.delegate)&&\"function\"==typeof t.compositionDidStopEditingAttachment&&t.compositionDidStopEditingAttachment(this.editingAttachment),this.editingAttachment=null},d.prototype.canEditAttachmentCaption=function(){var t;return null!=(t=this.editingAttachment)?t.isPreviewable():void 0},d.prototype.updateAttributesForAttachment=function(t,e){return this.setDocument(this.document.updateAttributesForAttachment(t,e))},d.prototype.removeAttributeForAttachment=function(t,e){return this.setDocument(this.document.removeAttributeForAttachment(t,e))},d.prototype.breakFormattedBlock=function(t){var n,o,i,r,s;return o=t.document,n=t.block,r=t.startPosition,s=[r-1,r],n.getBlockBreakPosition()===t.startLocation.offset?(n.breaksOnReturn()&&\"\\n\"===t.nextCharacter?r+=1:o=o.removeTextAtRange(s),s=[r,r]):\"\\n\"===t.nextCharacter?\"\\n\"===t.previousCharacter?s=[r-1,r+1]:(s=[r,r+1],r+=1):t.startLocation.offset-1!==0&&(r+=1),i=new e.Document([n.removeLastAttribute().copyWithoutText()]),this.setDocument(o.insertDocumentAtRange(i,s)),this.setSelection(r)},d.prototype.getPreviousBlock=function(){var t,e;return(e=this.getLocationRange())&&(t=e[0].index,t>0)?this.document.getBlockAtIndex(t-1):void 0},d.prototype.getBlock=function(){var t;return(t=this.getLocationRange())?this.document.getBlockAtIndex(t[0].index):void 0},d.prototype.getAttachmentAtRange=function(t){var n;return n=this.document.getDocumentAtRange(t),n.toString()===e.OBJECT_REPLACEMENT_CHARACTER+\"\\n\"?n.getAttachments()[0]:void 0},d.prototype.notifyDelegateOfCurrentAttributesChange=function(){var t;return null!=(t=this.delegate)&&\"function\"==typeof t.compositionDidChangeCurrentAttributes?t.compositionDidChangeCurrentAttributes(this.currentAttributes):void 0},d.prototype.notifyDelegateOfInsertionAtRange=function(t){var e;return null!=(e=this.delegate)&&\"function\"==typeof e.compositionDidPerformInsertionAtRange?e.compositionDidPerformInsertionAtRange(t):void 0},d.prototype.translateUTF16PositionFromOffset=function(t,e){var n,o;return o=this.document.toUTF16String(),n=o.offsetFromUCS2Offset(t),o.offsetToUCS2Offset(n+e)},d}(e.BasicObject)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.UndoManager=function(e){function n(t){this.composition=t,this.undoEntries=[],this.redoEntries=[]}var o;return t(n,e),n.prototype.recordUndoEntry=function(t,e){var n,i,r,s,a;return s=null!=e?e:{},i=s.context,n=s.consolidatable,r=this.undoEntries.slice(-1)[0],n&&o(r,t,i)?void 0:(a=this.createEntry({description:t,context:i}),this.undoEntries.push(a),this.redoEntries=[])},n.prototype.undo=function(){var t,e;return(e=this.undoEntries.pop())?(t=this.createEntry(e),this.redoEntries.push(t),this.composition.loadSnapshot(e.snapshot)):void 0},n.prototype.redo=function(){var t,e;return(t=this.redoEntries.pop())?(e=this.createEntry(t),this.undoEntries.push(e),this.composition.loadSnapshot(t.snapshot)):void 0},n.prototype.canUndo=function(){return this.undoEntries.length>0},n.prototype.canRedo=function(){return this.redoEntries.length>0},n.prototype.createEntry=function(t){var e,n,o;return o=null!=t?t:{},n=o.description,e=o.context,{description:null!=n?n.toString():void 0,context:JSON.stringify(e),snapshot:this.composition.getSnapshot()}},o=function(t,e,n){return(null!=t?t.description:void 0)===(null!=e?e.toString():void 0)&&(null!=t?t.context:void 0)===JSON.stringify(n)},n}(e.BasicObject)}.call(this),function(){e.Editor=function(){function t(t,n,o){this.composition=t,this.selectionManager=n,this.element=o,this.undoManager=new e.UndoManager(this.composition)}return t.prototype.loadDocument=function(t){return this.loadSnapshot({document:t,selectedRange:[0,0]})},t.prototype.loadHTML=function(t){return null==t&&(t=\"\"),this.loadDocument(e.Document.fromHTML(t,{referenceElement:this.element}))},t.prototype.loadJSON=function(t){var n,o;return n=t.document,o=t.selectedRange,n=e.Document.fromJSON(n),this.loadSnapshot({document:n,selectedRange:o})},t.prototype.loadSnapshot=function(t){return this.undoManager=new e.UndoManager(this.composition),this.composition.loadSnapshot(t)},t.prototype.getDocument=function(){return this.composition.document},t.prototype.getSelectedDocument=function(){return this.composition.getSelectedDocument()},t.prototype.getSnapshot=function(){return this.composition.getSnapshot()},t.prototype.toJSON=function(){return this.getSnapshot()},t.prototype.deleteInDirection=function(t){return this.composition.deleteInDirection(t)},t.prototype.insertAttachment=function(t){return this.composition.insertAttachment(t)},t.prototype.insertDocument=function(t){return this.composition.insertDocument(t)},t.prototype.insertFile=function(t){return this.composition.insertFile(t)},t.prototype.insertHTML=function(t){return this.composition.insertHTML(t)},t.prototype.insertString=function(t){return this.composition.insertString(t)},t.prototype.insertText=function(t){return this.composition.insertText(t)},t.prototype.insertLineBreak=function(){return this.composition.insertLineBreak()},t.prototype.getSelectedRange=function(){return this.composition.getSelectedRange()},t.prototype.getPosition=function(){return this.composition.getPosition()},t.prototype.getClientRectAtPosition=function(t){var e;return e=this.getDocument().locationRangeFromRange([t,t+1]),this.selectionManager.getClientRectAtLocationRange(e)},t.prototype.expandSelectionInDirection=function(t){return this.composition.expandSelectionInDirection(t)},t.prototype.moveCursorInDirection=function(t){return this.composition.moveCursorInDirection(t)},t.prototype.setSelectedRange=function(t){return this.composition.setSelectedRange(t)},t.prototype.activateAttribute=function(t,e){return null==e&&(e=!0),this.composition.setCurrentAttribute(t,e)},t.prototype.attributeIsActive=function(t){return this.composition.hasCurrentAttribute(t)},t.prototype.canActivateAttribute=function(t){return this.composition.canSetCurrentAttribute(t)},t.prototype.deactivateAttribute=function(t){return this.composition.removeCurrentAttribute(t)},t.prototype.canDecreaseNestingLevel=function(){return this.composition.canDecreaseNestingLevel()},t.prototype.canIncreaseNestingLevel=function(){return this.composition.canIncreaseNestingLevel()\n},t.prototype.decreaseNestingLevel=function(){return this.canDecreaseNestingLevel()?this.composition.decreaseNestingLevel():void 0},t.prototype.increaseNestingLevel=function(){return this.canIncreaseNestingLevel()?this.composition.increaseNestingLevel():void 0},t.prototype.canDecreaseIndentationLevel=function(){return this.canDecreaseNestingLevel()},t.prototype.canIncreaseIndentationLevel=function(){return this.canIncreaseNestingLevel()},t.prototype.decreaseIndentationLevel=function(){return this.decreaseNestingLevel()},t.prototype.increaseIndentationLevel=function(){return this.increaseNestingLevel()},t.prototype.canRedo=function(){return this.undoManager.canRedo()},t.prototype.canUndo=function(){return this.undoManager.canUndo()},t.prototype.recordUndoEntry=function(t,e){var n,o,i;return i=null!=e?e:{},o=i.context,n=i.consolidatable,this.undoManager.recordUndoEntry(t,{context:o,consolidatable:n})},t.prototype.redo=function(){return this.canRedo()?this.undoManager.redo():void 0},t.prototype.undo=function(){return this.canUndo()?this.undoManager.undo():void 0},t}()}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.ManagedAttachment=function(e){function n(t,e){var n;this.attachmentManager=t,this.attachment=e,n=this.attachment,this.id=n.id,this.file=n.file}return t(n,e),n.prototype.remove=function(){return this.attachmentManager.requestRemovalOfAttachment(this.attachment)},n.proxyMethod(\"attachment.getAttribute\"),n.proxyMethod(\"attachment.hasAttribute\"),n.proxyMethod(\"attachment.setAttribute\"),n.proxyMethod(\"attachment.getAttributes\"),n.proxyMethod(\"attachment.setAttributes\"),n.proxyMethod(\"attachment.isPending\"),n.proxyMethod(\"attachment.isPreviewable\"),n.proxyMethod(\"attachment.getURL\"),n.proxyMethod(\"attachment.getHref\"),n.proxyMethod(\"attachment.getFilename\"),n.proxyMethod(\"attachment.getFilesize\"),n.proxyMethod(\"attachment.getFormattedFilesize\"),n.proxyMethod(\"attachment.getExtension\"),n.proxyMethod(\"attachment.getContentType\"),n.proxyMethod(\"attachment.getFile\"),n.proxyMethod(\"attachment.setFile\"),n.proxyMethod(\"attachment.releaseFile\"),n.proxyMethod(\"attachment.getUploadProgress\"),n.proxyMethod(\"attachment.setUploadProgress\"),n}(e.BasicObject)}.call(this),function(){var t=function(t,e){function o(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return o.prototype=e.prototype,t.prototype=new o,t.__super__=e.prototype,t},n={}.hasOwnProperty;e.AttachmentManager=function(n){function o(t){var e,n,o;for(null==t&&(t=[]),this.managedAttachments={},n=0,o=t.length;o>n;n++)e=t[n],this.manageAttachment(e)}return t(o,n),o.prototype.getAttachments=function(){var t,e,n,o;n=this.managedAttachments,o=[];for(e in n)t=n[e],o.push(t);return o},o.prototype.manageAttachment=function(t){var n,o;return null!=(n=this.managedAttachments)[o=t.id]?n[o]:n[o]=new e.ManagedAttachment(this,t)},o.prototype.attachmentIsManaged=function(t){return t.id in this.managedAttachments},o.prototype.requestRemovalOfAttachment=function(t){var e;return this.attachmentIsManaged(t)&&null!=(e=this.delegate)&&\"function\"==typeof e.attachmentManagerDidRequestRemovalOfAttachment?e.attachmentManagerDidRequestRemovalOfAttachment(t):void 0},o.prototype.unmanageAttachment=function(t){var e;return e=this.managedAttachments[t.id],delete this.managedAttachments[t.id],e},o}(e.BasicObject)}.call(this),function(){var t,n,o,i,r,s,a,u,c,l,h;t=e.elementContainsNode,n=e.findChildIndexOfNode,r=e.nodeIsBlockStart,s=e.nodeIsBlockStartComment,i=e.nodeIsBlockContainer,a=e.nodeIsCursorTarget,u=e.nodeIsEmptyTextNode,c=e.nodeIsTextNode,o=e.nodeIsAttachmentElement,l=e.tagName,h=e.walkTree,e.LocationMapper=function(){function e(t){this.element=t}var p,d,f,g;return e.prototype.findLocationFromContainerAndOffset=function(e,o,i){var s,u,l,p,g,m,y;for(m=(null!=i?i:{strict:!0}).strict,u=0,l=!1,p={index:0,offset:0},(s=this.findAttachmentElementParentForNode(e))&&(e=s.parentNode,o=n(s)),y=h(this.element,{usingFilter:f});y.nextNode();){if(g=y.currentNode,g===e&&c(e)){a(g)||(p.offset+=o);break}if(g.parentNode===e){if(u++===o)break}else if(!t(e,g)&&u>0)break;r(g,{strict:m})?(l&&p.index++,p.offset=0,l=!0):p.offset+=d(g)}return p},e.prototype.findContainerAndOffsetFromLocation=function(t){var e,o,s,a,u,l;if(0===t.index&&0===t.offset){for(e=this.element,a=0;e.firstChild;)if(e=e.firstChild,i(e)){a=1;break}return[e,a]}if(u=this.findNodeAndOffsetFromLocation(t),o=u[0],s=u[1],o){if(c(o))e=o,l=o.textContent,a=t.offset-s;else{if(e=o.parentNode,!r(o.previousSibling)&&!i(e))for(;o===e.lastChild&&(o=e,e=e.parentNode,!i(e)););a=n(o),0!==t.offset&&a++}return[e,a]}},e.prototype.findNodeAndOffsetFromLocation=function(t){var e,n,o,i,r,s,u,l;for(u=0,l=this.getSignificantNodesForIndex(t.index),n=0,o=l.length;o>n;n++){if(e=l[n],i=d(e),t.offset<=u+i)if(c(e)){if(r=e,s=u,t.offset===s&&a(r))break}else r||(r=e,s=u);if(u+=i,u>t.offset)break}return[r,s]},e.prototype.findAttachmentElementParentForNode=function(t){for(;t&&t!==this.element;){if(o(t))return t;t=t.parentNode}},e.prototype.getSignificantNodesForIndex=function(t){var e,n,o,i,r;for(o=[],r=h(this.element,{usingFilter:p}),i=!1;r.nextNode();)if(n=r.currentNode,s(n)){if(\"undefined\"!=typeof e&&null!==e?e++:e=0,e===t)i=!0;else if(i)break}else i&&o.push(n);return o},d=function(t){var e;return t.nodeType===Node.TEXT_NODE?a(t)?0:(e=t.textContent,e.length):\"br\"===l(t)||o(t)?1:0},p=function(t){return g(t)===NodeFilter.FILTER_ACCEPT?f(t):NodeFilter.FILTER_REJECT},g=function(t){return u(t)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},f=function(t){return o(t.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},e}()}.call(this),function(){var t,n,o=[].slice;t=e.getDOMRange,n=e.setDOMRange,e.PointMapper=function(){function e(){}return e.prototype.createDOMRangeFromPoint=function(e){var o,i,r,s,a,u,c,l;if(c=e.x,l=e.y,document.caretPositionFromPoint)return a=document.caretPositionFromPoint(c,l),r=a.offsetNode,i=a.offset,o=document.createRange(),o.setStart(r,i),o;if(document.caretRangeFromPoint)return document.caretRangeFromPoint(c,l);if(document.body.createTextRange){s=t();try{u=document.body.createTextRange(),u.moveToPoint(c,l),u.select()}catch(h){}return o=t(),n(s),o}},e.prototype.getClientRectsForDOMRange=function(t){var e,n,i;return n=o.call(t.getClientRects()),i=n[0],e=n[n.length-1],[i,e]},e}()}.call(this),function(){var t,n=function(t,e){return function(){return t.apply(e,arguments)}},o=function(t,e){function n(){this.constructor=t}for(var o in e)i.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},i={}.hasOwnProperty,r=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=e.getDOMRange,e.SelectionChangeObserver=function(e){function i(){this.run=n(this.run,this),this.update=n(this.update,this),this.selectionManagers=[]}var s;return o(i,e),i.prototype.start=function(){return this.started?void 0:(this.started=!0,\"onselectionchange\"in document?document.addEventListener(\"selectionchange\",this.update,!0):this.run())},i.prototype.stop=function(){return this.started?(this.started=!1,document.removeEventListener(\"selectionchange\",this.update,!0)):void 0},i.prototype.registerSelectionManager=function(t){return r.call(this.selectionManagers,t)<0?(this.selectionManagers.push(t),this.start()):void 0},i.prototype.unregisterSelectionManager=function(t){var e;return this.selectionManagers=function(){var n,o,i,r;for(i=this.selectionManagers,r=[],n=0,o=i.length;o>n;n++)e=i[n],e!==t&&r.push(e);return r}.call(this),0===this.selectionManagers.length?this.stop():void 0},i.prototype.notifySelectionManagersOfSelectionChange=function(){var t,e,n,o,i;for(n=this.selectionManagers,o=[],t=0,e=n.length;e>t;t++)i=n[t],o.push(i.selectionDidChange());return o},i.prototype.update=function(){var e;return e=t(),s(e,this.domRange)?void 0:(this.domRange=e,this.notifySelectionManagersOfSelectionChange())},i.prototype.reset=function(){return this.domRange=null,this.update()},i.prototype.run=function(){return this.started?(this.update(),requestAnimationFrame(this.run)):void 0},s=function(t,e){return(null!=t?t.startContainer:void 0)===(null!=e?e.startContainer:void 0)&&(null!=t?t.startOffset:void 0)===(null!=e?e.startOffset:void 0)&&(null!=t?t.endContainer:void 0)===(null!=e?e.endContainer:void 0)&&(null!=t?t.endOffset:void 0)===(null!=e?e.endOffset:void 0)},i}(e.BasicObject),null==e.selectionChangeObserver&&(e.selectionChangeObserver=new e.SelectionChangeObserver)}.call(this),function(){var t,n,o,i,r,s,a,u,c,l,h=function(t,e){return function(){return t.apply(e,arguments)}},p=function(t,e){function n(){this.constructor=t}for(var o in e)d.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},d={}.hasOwnProperty;o=e.getDOMSelection,n=e.getDOMRange,l=e.setDOMRange,t=e.elementContainsNode,s=e.nodeIsCursorTarget,r=e.innerElementIsActive,i=e.handleEvent,a=e.normalizeRange,u=e.rangeIsCollapsed,c=e.rangesAreEqual,e.SelectionManager=function(d){function f(t){this.element=t,this.selectionDidChange=h(this.selectionDidChange,this),this.didMouseDown=h(this.didMouseDown,this),this.locationMapper=new e.LocationMapper(this.element),this.pointMapper=new e.PointMapper,this.lockCount=0,i(\"mousedown\",{onElement:this.element,withCallback:this.didMouseDown})}return p(f,d),f.prototype.getLocationRange=function(t){var e,o;return null==t&&(t={}),e=t.strict===!1?this.createLocationRangeFromDOMRange(n(),{strict:!1}):t.ignoreLock?this.currentLocationRange:null!=(o=this.lockedLocationRange)?o:this.currentLocationRange},f.prototype.setLocationRange=function(t){var e;if(!this.lockedLocationRange)return t=a(t),(e=this.createDOMRangeFromLocationRange(t))?(l(e),this.updateCurrentLocationRange(t)):void 0},f.prototype.setLocationRangeFromPointRange=function(t){var e,n;return t=a(t),n=this.getLocationAtPoint(t[0]),e=this.getLocationAtPoint(t[1]),this.setLocationRange([n,e])},f.prototype.getClientRectAtLocationRange=function(t){var e;return(e=this.createDOMRangeFromLocationRange(t))?this.getClientRectsForDOMRange(e)[1]:void 0},f.prototype.locationIsCursorTarget=function(t){var e,n,o;return o=this.findNodeAndOffsetFromLocation(t),e=o[0],n=o[1],s(e)},f.prototype.lock=function(){return 0===this.lockCount++?(this.updateCurrentLocationRange(),this.lockedLocationRange=this.getLocationRange()):void 0},f.prototype.unlock=function(){var t;return 0===--this.lockCount&&(t=this.lockedLocationRange,this.lockedLocationRange=null,null!=t)?this.setLocationRange(t):void 0},f.prototype.clearSelection=function(){var t;return null!=(t=o())?t.removeAllRanges():void 0},f.prototype.selectionIsCollapsed=function(){var t;return(null!=(t=n())?t.collapsed:void 0)===!0},f.prototype.selectionIsExpanded=function(){return!this.selectionIsCollapsed()},f.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\"),f.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\"),f.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\"),f.proxyMethod(\"pointMapper.createDOMRangeFromPoint\"),f.proxyMethod(\"pointMapper.getClientRectsForDOMRange\"),f.prototype.didMouseDown=function(){return this.pauseTemporarily()},f.prototype.pauseTemporarily=function(){var e,n,o,r;return this.paused=!0,n=function(e){return function(){var n,i,s;for(e.paused=!1,clearTimeout(r),i=0,s=o.length;s>i;i++)n=o[i],n.destroy();return t(document,e.element)?e.selectionDidChange():void 0}}(this),r=setTimeout(n,200),o=function(){var t,o,r,s;for(r=[\"mousemove\",\"keydown\"],s=[],t=0,o=r.length;o>t;t++)e=r[t],s.push(i(e,{onElement:document,withCallback:n}));return s}()},f.prototype.selectionDidChange=function(){return this.paused||r(this.element)?void 0:this.updateCurrentLocationRange()},f.prototype.updateCurrentLocationRange=function(t){var e;return(null!=t?t:t=this.createLocationRangeFromDOMRange(n()))&&!c(t,this.currentLocationRange)?(this.currentLocationRange=t,null!=(e=this.delegate)&&\"function\"==typeof e.locationRangeDidChange?e.locationRangeDidChange(this.currentLocationRange.slice(0)):void 0):void 0},f.prototype.createDOMRangeFromLocationRange=function(t){var e,n,o,i;return o=this.findContainerAndOffsetFromLocation(t[0]),n=u(t)?o:null!=(i=this.findContainerAndOffsetFromLocation(t[1]))?i:o,null!=o&&null!=n?(e=document.createRange(),e.setStart.apply(e,o),e.setEnd.apply(e,n),e):void 0},f.prototype.createLocationRangeFromDOMRange=function(t,e){var n,o;if(null!=t&&this.domRangeWithinElement(t)&&(o=this.findLocationFromContainerAndOffset(t.startContainer,t.startOffset,e)))return t.collapsed||(n=this.findLocationFromContainerAndOffset(t.endContainer,t.endOffset,e)),a([o,n])},f.prototype.getLocationAtPoint=function(t){var e,n;return(e=this.createDOMRangeFromPoint(t))&&null!=(n=this.createLocationRangeFromDOMRange(e))?n[0]:void 0},f.prototype.domRangeWithinElement=function(e){return e.collapsed?t(this.element,e.startContainer):t(this.element,e.startContainer)&&t(this.element,e.endContainer)},f}(e.BasicObject)}.call(this),function(){var t,n,o,i=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty,s=[].slice;n=e.rangeIsCollapsed,o=e.rangesAreEqual,t=e.objectsAreEqual,e.EditorController=function(r){function a(t){var n,o;this.editorElement=t.editorElement,n=t.document,o=t.html,this.selectionManager=new e.SelectionManager(this.editorElement),this.selectionManager.delegate=this,this.composition=new e.Composition,this.composition.delegate=this,this.attachmentManager=new e.AttachmentManager(this.composition.getAttachments()),this.attachmentManager.delegate=this,this.inputController=new e.InputController(this.editorElement),this.inputController.delegate=this,this.inputController.responder=this.composition,this.compositionController=new e.CompositionController(this.editorElement,this.composition),this.compositionController.delegate=this,this.toolbarController=new e.ToolbarController(this.editorElement.toolbarElement),this.toolbarController.delegate=this,this.editor=new e.Editor(this.composition,this.selectionManager,this.editorElement),null!=n?this.editor.loadDocument(n):this.editor.loadHTML(o)}return i(a,r),a.prototype.registerSelectionManager=function(){return e.selectionChangeObserver.registerSelectionManager(this.selectionManager)},a.prototype.unregisterSelectionManager=function(){return e.selectionChangeObserver.unregisterSelectionManager(this.selectionManager)},a.prototype.compositionDidChangeDocument=function(){return this.editorElement.notify(\"document-change\"),this.handlingInput?void 0:this.render()},a.prototype.compositionDidChangeCurrentAttributes=function(t){return this.currentAttributes=t,this.toolbarController.updateAttributes(this.currentAttributes),this.updateCurrentActions(),this.editorElement.notify(\"attributes-change\",{attributes:this.currentAttributes})},a.prototype.compositionDidPerformInsertionAtRange=function(t){return this.pasting?this.pastedRange=t:void 0},a.prototype.compositionShouldAcceptFile=function(t){return this.editorElement.notify(\"file-accept\",{file:t})},a.prototype.compositionDidAddAttachment=function(t){var e;return e=this.attachmentManager.manageAttachment(t),this.editorElement.notify(\"attachment-add\",{attachment:e})},a.prototype.compositionDidEditAttachment=function(t){var e;return this.compositionController.rerenderViewForObject(t),e=this.attachmentManager.manageAttachment(t),this.editorElement.notify(\"attachment-edit\",{attachment:e}),this.editorElement.notify(\"change\")},a.prototype.compositionDidChangeAttachmentPreviewURL=function(t){return this.compositionController.invalidateViewForObject(t),this.editorElement.notify(\"change\")},a.prototype.compositionDidRemoveAttachment=function(t){var e;return e=this.attachmentManager.unmanageAttachment(t),this.editorElement.notify(\"attachment-remove\",{attachment:e})},a.prototype.compositionDidStartEditingAttachment=function(t){return this.attachmentLocationRange=this.composition.document.getLocationRangeOfAttachment(t),this.compositionController.installAttachmentEditorForAttachment(t),this.selectionManager.setLocationRange(this.attachmentLocationRange)},a.prototype.compositionDidStopEditingAttachment=function(){return this.compositionController.uninstallAttachmentEditor(),this.attachmentLocationRange=null},a.prototype.compositionDidRequestChangingSelectionToLocationRange=function(t){return!this.loadingSnapshot||this.isFocused()?(this.requestedLocationRange=t,this.compositionRevisionWhenLocationRangeRequested=this.composition.revision,this.handlingInput?void 0:this.render()):void 0},a.prototype.compositionWillLoadSnapshot=function(){return this.loadingSnapshot=!0},a.prototype.compositionDidLoadSnapshot=function(){return this.compositionController.refreshViewCache(),this.render(),this.loadingSnapshot=!1},a.prototype.getSelectionManager=function(){return this.selectionManager},a.proxyMethod(\"getSelectionManager().setLocationRange\"),a.proxyMethod(\"getSelectionManager().getLocationRange\"),a.prototype.attachmentManagerDidRequestRemovalOfAttachment=function(t){return this.removeAttachment(t)},a.prototype.compositionControllerWillSyncDocumentView=function(){return this.inputController.editorWillSyncDocumentView(),this.selectionManager.lock(),this.selectionManager.clearSelection()},a.prototype.compositionControllerDidSyncDocumentView=function(){return this.inputController.editorDidSyncDocumentView(),this.selectionManager.unlock(),this.updateCurrentActions(),this.editorElement.notify(\"sync\")},a.prototype.compositionControllerDidRender=function(){return null!=this.requestedLocationRange&&(this.compositionRevisionWhenLocationRangeRequested===this.composition.revision&&this.selectionManager.setLocationRange(this.requestedLocationRange),this.requestedLocationRange=null,this.compositionRevisionWhenLocationRangeRequested=null),this.renderedCompositionRevision!==this.composition.revision&&(this.composition.updateCurrentAttributes(),this.editorElement.notify(\"render\")),this.renderedCompositionRevision=this.composition.revision},a.prototype.compositionControllerDidFocus=function(){return this.toolbarController.hideDialog(),this.editorElement.notify(\"focus\")},a.prototype.compositionControllerDidBlur=function(){return this.editorElement.notify(\"blur\")},a.prototype.compositionControllerDidSelectAttachment=function(t){return this.composition.editAttachment(t)},a.prototype.compositionControllerDidRequestDeselectingAttachment=function(t){var e,n;return e=null!=(n=this.attachmentLocationRange)?n:this.composition.document.getLocationRangeOfAttachment(t),this.selectionManager.setLocationRange(e[1])},a.prototype.compositionControllerWillUpdateAttachment=function(t){return this.editor.recordUndoEntry(\"Edit Attachment\",{context:t.id,consolidatable:!0})},a.prototype.compositionControllerDidRequestRemovalOfAttachment=function(t){return this.removeAttachment(t)},a.prototype.inputControllerWillHandleInput=function(){return this.handlingInput=!0,this.requestedRender=!1},a.prototype.inputControllerDidRequestRender=function(){return this.requestedRender=!0},a.prototype.inputControllerDidHandleInput=function(){return this.handlingInput=!1,this.requestedRender?(this.requestedRender=!1,this.render()):void 0},a.prototype.inputControllerDidAllowUnhandledInput=function(){return this.editorElement.notify(\"change\")},a.prototype.inputControllerDidRequestReparse=function(){return this.reparse()},a.prototype.inputControllerWillPerformTyping=function(){return this.recordTypingUndoEntry()},a.prototype.inputControllerWillCutText=function(){return this.editor.recordUndoEntry(\"Cut\")},a.prototype.inputControllerWillPasteText=function(){return this.editor.recordUndoEntry(\"Paste\"),this.pasting=!0},a.prototype.inputControllerDidPaste=function(t){var e;return e=this.pastedRange,this.pastedRange=null,this.pasting=null,this.editorElement.notify(\"paste\",{pasteData:t,range:e})},a.prototype.inputControllerWillMoveText=function(){return this.editor.recordUndoEntry(\"Move\")},a.prototype.inputControllerWillAttachFiles=function(){return this.editor.recordUndoEntry(\"Drop Files\")},a.prototype.inputControllerDidReceiveKeyboardCommand=function(t){return this.toolbarController.applyKeyboardCommand(t)},a.prototype.inputControllerDidStartDrag=function(){return this.locationRangeBeforeDrag=this.selectionManager.getLocationRange()},a.prototype.inputControllerDidReceiveDragOverPoint=function(t){return this.selectionManager.setLocationRangeFromPointRange(t)},a.prototype.inputControllerDidCancelDrag=function(){return this.selectionManager.setLocationRange(this.locationRangeBeforeDrag),this.locationRangeBeforeDrag=null},a.prototype.locationRangeDidChange=function(t){return this.composition.updateCurrentAttributes(),this.updateCurrentActions(),this.attachmentLocationRange&&!o(this.attachmentLocationRange,t)&&this.composition.stopEditingAttachment(),this.editorElement.notify(\"selection-change\")},a.prototype.toolbarDidClickButton=function(){return this.getLocationRange()?void 0:this.setLocationRange({index:0,offset:0})},a.prototype.toolbarDidInvokeAction=function(t){return this.invokeAction(t)},a.prototype.toolbarDidToggleAttribute=function(t){return this.recordFormattingUndoEntry(),this.composition.toggleCurrentAttribute(t),this.render(),this.selectionFrozen?void 0:this.editorElement.focus()},a.prototype.toolbarDidUpdateAttribute=function(t,e){return this.recordFormattingUndoEntry(),this.composition.setCurrentAttribute(t,e),this.render(),this.selectionFrozen?void 0:this.editorElement.focus()},a.prototype.toolbarDidRemoveAttribute=function(t){return this.recordFormattingUndoEntry(),this.composition.removeCurrentAttribute(t),this.render(),this.selectionFrozen?void 0:this.editorElement.focus()},a.prototype.toolbarWillShowDialog=function(){return this.composition.expandSelectionForEditing(),this.freezeSelection()},a.prototype.toolbarDidShowDialog=function(t){return this.editorElement.notify(\"toolbar-dialog-show\",{dialogName:t})},a.prototype.toolbarDidHideDialog=function(t){return this.thawSelection(),this.editorElement.focus(),this.editorElement.notify(\"toolbar-dialog-hide\",{dialogName:t})},a.prototype.freezeSelection=function(){return this.selectionFrozen?void 0:(this.selectionManager.lock(),this.composition.freezeSelection(),this.selectionFrozen=!0,this.render())},a.prototype.thawSelection=function(){return this.selectionFrozen?(this.composition.thawSelection(),this.selectionManager.unlock(),this.selectionFrozen=!1,this.render()):void 0},a.prototype.actions={undo:{test:function(){return this.editor.canUndo()},perform:function(){return this.editor.undo()}},redo:{test:function(){return this.editor.canRedo()},perform:function(){return this.editor.redo()}},link:{test:function(){return this.editor.canActivateAttribute(\"href\")}},increaseNestingLevel:{test:function(){return this.editor.canIncreaseNestingLevel()},perform:function(){return this.editor.increaseNestingLevel()&&this.render()}},decreaseNestingLevel:{test:function(){return this.editor.canDecreaseNestingLevel()},perform:function(){return this.editor.decreaseNestingLevel()&&this.render()}},increaseBlockLevel:{test:function(){return this.editor.canIncreaseNestingLevel()},perform:function(){return this.editor.increaseNestingLevel()&&this.render()}},decreaseBlockLevel:{test:function(){return this.editor.canDecreaseNestingLevel()},perform:function(){return this.editor.decreaseNestingLevel()&&this.render()}}},a.prototype.canInvokeAction=function(t){var e,n;return this.actionIsExternal(t)?!0:!!(null!=(e=this.actions[t])&&null!=(n=e.test)?n.call(this):void 0)},a.prototype.invokeAction=function(t){var e,n;return this.actionIsExternal(t)?this.editorElement.notify(\"action-invoke\",{actionName:t}):null!=(e=this.actions[t])&&null!=(n=e.perform)?n.call(this):void 0},a.prototype.actionIsExternal=function(t){return/^x-./.test(t)},a.prototype.getCurrentActions=function(){var t,e;e={};for(t in this.actions)e[t]=this.canInvokeAction(t);return e},a.prototype.updateCurrentActions=function(){var e;return e=this.getCurrentActions(),t(e,this.currentActions)?void 0:(this.currentActions=e,this.toolbarController.updateActions(this.currentActions),this.editorElement.notify(\"actions-change\",{actions:this.currentActions}))},a.prototype.reparse=function(){return this.composition.replaceHTML(this.editorElement.innerHTML)},a.prototype.render=function(){return this.compositionController.render()},a.prototype.removeAttachment=function(t){return this.editor.recordUndoEntry(\"Delete Attachment\"),this.composition.removeAttachment(t),this.render()},a.prototype.recordFormattingUndoEntry=function(){var t;return t=this.selectionManager.getLocationRange(),n(t)?void 0:this.editor.recordUndoEntry(\"Formatting\",{context:this.getUndoContext(),consolidatable:!0})},a.prototype.recordTypingUndoEntry=function(){return this.editor.recordUndoEntry(\"Typing\",{context:this.getUndoContext(this.currentAttributes),consolidatable:!0})},a.prototype.getUndoContext=function(){var t;return t=1<=arguments.length?s.call(arguments,0):[],[this.getLocationContext(),this.getTimeContext()].concat(s.call(t))},a.prototype.getLocationContext=function(){var t;return t=this.selectionManager.getLocationRange(),n(t)?t[0].index:t},a.prototype.getTimeContext=function(){return e.config.undoInterval>0?Math.floor((new Date).getTime()/e.config.undoInterval):0},a.prototype.isFocused=function(){var t;return this.editorElement===(null!=(t=this.editorElement.ownerDocument)?t.activeElement:void 0)},a}(e.Controller)}.call(this),function(){var t,n,o,i,r,s;i=e.makeElement,r=e.selectionElements,s=e.triggerEvent,n=e.handleEvent,o=e.handleEventOnce,t=e.AttachmentView.attachmentSelector,e.registerElement(\"trix-editor\",function(){var a,u,c,l,h,p;return l=0,a=function(t){return!document.querySelector(\":focus\")&&t.hasAttribute(\"autofocus\")&&document.querySelector(\"[autofocus]\")===t?t.focus():void 0},h=function(t){return t.hasAttribute(\"contenteditable\")?void 0:(t.setAttribute(\"contenteditable\",\"\"),o(\"focus\",{onElement:t,withCallback:function(){return u(t)}}))},u=function(t){return c(t),p(t)},c=function(t){return(\"function\"==typeof document.queryCommandSupported?document.queryCommandSupported(\"enableObjectResizing\"):void 0)?(document.execCommand(\"enableObjectResizing\",!1,!1),n(\"mscontrolselect\",{onElement:t,preventDefault:!0})):void 0},p=function(){var t;return(\"function\"==typeof document.queryCommandSupported?document.queryCommandSupported(\"DefaultParagraphSeparator\"):void 0)&&(t=e.config.blockAttributes[\"default\"].tagName,\"div\"===t||\"p\"===t)?document.execCommand(\"DefaultParagraphSeparator\",!1,t):void 0},{defaultCSS:\"%t:empty:not(:focus)::before {\\n content: attr(placeholder);\\n color: graytext;\\n}\\n\\n%t a[contenteditable=false] {\\n cursor: text;\\n}\\n\\n%t img {\\n max-width: 100%;\\n height: auto;\\n}\\n\\n%t \"+t+\" figcaption textarea {\\n resize: none;\\n}\\n\\n%t \"+t+\" figcaption textarea.trix-autoresize-clone {\\n position: absolute;\\n left: -9999px;\\n max-height: 0px;\\n}\\n\\n%t \"+t+'[data-trix-mutable] figcaption:empty::before {\\n content: \"'+e.config.lang.captionPrompt+'\";\\n color: graytext;\\n}\\n\\n%t '+r.selector+\" { \"+r.cssText+\" }\",trixId:{get:function(){return this.hasAttribute(\"trix-id\")?this.getAttribute(\"trix-id\"):(this.setAttribute(\"trix-id\",++l),this.trixId)}},toolbarElement:{get:function(){var t,e,n;return this.hasAttribute(\"toolbar\")?null!=(e=this.ownerDocument)?e.getElementById(this.getAttribute(\"toolbar\")):void 0:this.parentElement?(n=\"trix-toolbar-\"+this.trixId,this.setAttribute(\"toolbar\",n),t=i(\"trix-toolbar\",{id:n}),this.parentElement.insertBefore(t,this),t):void 0}},inputElement:{get:function(){var t,e,n;return this.hasAttribute(\"input\")?null!=(n=this.ownerDocument)?n.getElementById(this.getAttribute(\"input\")):void 0:this.parentElement?(e=\"trix-input-\"+this.trixId,this.setAttribute(\"input\",e),t=i(\"input\",{type:\"hidden\",id:e}),this.parentElement.insertBefore(t,this.nextElementSibling),t):void 0}},editor:{get:function(){var t;return null!=(t=this.editorController)?t.editor:void 0}},name:{get:function(){var t;return null!=(t=this.inputElement)?t.name:void 0}},value:{get:function(){var t;return null!=(t=this.inputElement)?t.value:void 0},set:function(t){var e;return this.defaultValue=t,null!=(e=this.editor)?e.loadHTML(this.defaultValue):void 0}},notify:function(t,n){var o;switch(t){case\"document-change\":this.documentChangedSinceLastRender=!0;break;case\"render\":this.documentChangedSinceLastRender&&(this.documentChangedSinceLastRender=!1,this.notify(\"change\"));break;case\"change\":case\"attachment-add\":case\"attachment-edit\":case\"attachment-remove\":null!=(o=this.inputElement)&&(o.value=e.serializeToContentType(this,\"text/html\"))}return this.editorController?s(\"trix-\"+t,{onElement:this,attributes:n}):void 0},createdCallback:function(){return h(this)},attachedCallback:function(){return this.hasAttribute(\"data-trix-internal\")?void 0:(null==this.editorController&&(this.editorController=new e.EditorController({editorElement:this,html:this.defaultValue=this.value})),this.editorController.registerSelectionManager(),this.registerResetListener(),a(this),requestAnimationFrame(function(t){return function(){return t.notify(\"initialize\")}}(this)))},detachedCallback:function(){var t;return null!=(t=this.editorController)&&t.unregisterSelectionManager(),this.unregisterResetListener()},registerResetListener:function(){return this.resetListener=this.resetBubbled.bind(this),window.addEventListener(\"reset\",this.resetListener,!1)},unregisterResetListener:function(){return window.removeEventListener(\"reset\",this.resetListener,!1)},resetBubbled:function(t){var e;return t.target!==(null!=(e=this.inputElement)?e.form:void 0)||t.defaultPrevented?void 0:this.reset()},reset:function(){return this.value=this.defaultValue}}}())}.call(this),function(){}.call(this)}).call(this),\"object\"==typeof module&&module.exports?module.exports=e:\"function\"==typeof define&&define.amd&&define(e)}.call(this);\n/*! angular-trix - v1.0.0 - 2015-12-09\n* https://github.com/sachinchoolur/angular-trix\n* Copyright (c) 2015 Sachin; Licensed MIT */\n(function() {\n 'use strict';\n angular.module('angularTrix', []).directive('angularTrix', function() {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n trixInitialize: '&',\n trixChange: '&',\n trixSelectionChange: '&',\n trixFocus: '&',\n trixBlur: '&',\n trixFileAccept: '&',\n trixAttachmentAdd: '&',\n trixAttachmentRemove: '&'\n },\n link: function(scope, element, attrs, ngModel) {\n\n element.on('trix-initialize', function() {\n if (ngModel.$modelValue) {\n element[0].editor.loadHTML(ngModel.$modelValue);\n }\n });\n\n ngModel.$render = function() {\n if (element[0].editor) {\n element[0].editor.loadHTML(ngModel.$modelValue);\n }\n\n element.on('trix-change', function() {\n ngModel.$setViewValue(element.html());\n });\n };\n\n var registerEvents = function(type, method) {\n element[0].addEventListener(type, function(e) {\n if (type === 'trix-file-accept' && attrs.preventTrixFileAccept === 'true') {\n e.preventDefault();\n }\n\n scope[method]({\n e: e,\n editor: element[0].editor\n });\n });\n };\n\n registerEvents('trix-initialize', 'trixInitialize');\n registerEvents('trix-change', 'trixChange');\n registerEvents('trix-selection-change', 'trixSelectionChange');\n registerEvents('trix-focus', 'trixFocus');\n registerEvents('trix-blur', 'trixBlur');\n registerEvents('trix-file-accept', 'trixFileAccept');\n registerEvents('trix-attachment-add', 'trixAttachmentAdd');\n registerEvents('trix-attachment-remove', 'trixAttachmentRemove');\n\n }\n };\n });\n\n}());\n\n(function(window, undefined) {\n\n 'use strict';\n\n /* istanbul ignore next */\n //http://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\n window._arrayBufferToBase64 = function(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n\n for (var i = 0; i < len; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n };\n\n\n var mod = window.angular.module('naif.base64', []);\n\n mod.directive('baseSixtyFourInput', [\n '$window',\n '$q',\n function($window, $q) {\n\n var isolateScope = {\n onChange: '&',\n onAfterValidate: '&',\n parser: '&'\n };\n\n var FILE_READER_EVENTS = ['onabort', 'onerror', 'onloadstart', 'onloadend', 'onprogress', 'onload'];\n\n FILE_READER_EVENTS.forEach(function(e) {\n isolateScope[e] = '&';\n });\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: isolateScope,\n link: function(scope, elem, attrs, ngModel) {\n\n var rawFiles = [];\n var fileObjects = [];\n\n /* istanbul ignore if */\n if (!ngModel) {\n return;\n }\n\n // VALIDATIONS =========================================================\n\n function _maxnum(val) {\n if (attrs.maxnum && attrs.multiple && val) {\n var valid = val.length <= parseInt(attrs.maxnum);\n ngModel.$setValidity('maxnum', valid);\n }\n return val;\n }\n\n function _minnum(val) {\n if (attrs.minnum && attrs.multiple && val) {\n var valid = val.length >= parseInt(attrs.minnum);\n ngModel.$setValidity('minnum', valid);\n }\n return val;\n }\n\n function _maxsize(val) {\n var valid = true;\n\n if (attrs.maxsize && val) {\n var max = parseFloat(attrs.maxsize) * 1000;\n\n if (attrs.multiple) {\n for (var i = 0; i < val.length; i++) {\n var file = val[i];\n if (file.filesize > max) {\n valid = false;\n break;\n }\n }\n } else {\n valid = val.filesize <= max;\n }\n ngModel.$setValidity('maxsize', valid);\n }\n\n return val;\n }\n\n function _minsize(val) {\n var valid = true;\n var min = parseFloat(attrs.minsize) * 1000;\n\n if (attrs.minsize && val) {\n if (attrs.multiple) {\n for (var i = 0; i < val.length; i++) {\n var file = val[i];\n if (file.filesize < min) {\n valid = false;\n break;\n }\n }\n } else {\n valid = val.filesize >= min;\n }\n ngModel.$setValidity('minsize', valid);\n }\n\n return val;\n }\n\n function _accept(val) {\n var valid = true;\n var regExp, exp, fileExt;\n if (attrs.accept) {\n exp = attrs.accept.trim().replace(/[,\\s]+/gi, \"|\").replace(/\\./g, \"\\\\.\").replace(/\\/\\*/g, \"/.*\");\n regExp = new RegExp(exp);\n }\n\n if (attrs.accept && val) {\n if (attrs.multiple) {\n for (var i = 0; i < val.length; i++) {\n var file = val[i];\n fileExt = \".\" + file.filename.split('.').pop();\n valid = regExp.test(file.filetype) || regExp.test(fileExt);\n\n if (!valid) {\n break;\n }\n }\n } else {\n fileExt = \".\" + val.filename.split('.').pop();\n valid = regExp.test(val.filetype) || regExp.test(fileExt);\n }\n ngModel.$setValidity('accept', valid);\n }\n\n return val;\n }\n\n //end validations ===============\n\n function _setViewValue() {\n var newVal = attrs.multiple ? fileObjects : fileObjects[0];\n ngModel.$setViewValue(newVal);\n _maxsize(newVal);\n _minsize(newVal);\n _maxnum(newVal);\n _minnum(newVal);\n _accept(newVal);\n }\n\n function _attachHandlerForEvent(eventName, handler, fReader, file, fileObject) {\n fReader[eventName] = function(e) {\n handler()(e, fReader, file, rawFiles, fileObjects, fileObject);\n };\n }\n\n function _readerOnLoad(fReader, file, fileObject) {\n\n return function(e) {\n\n var buffer = e.target.result;\n var promise;\n\n // do not convert the image to base64 if it exceeds the maximum\n // size to prevent the browser from freezing\n var exceedsMaxSize = attrs.maxsize && file.size > attrs.maxsize * 1024;\n if (attrs.doNotParseIfOversize !== undefined && exceedsMaxSize) {\n fileObject.base64 = null;\n } else {\n fileObject.base64 = $window._arrayBufferToBase64(buffer);\n }\n\n if (attrs.parser) {\n promise = $q.when(scope.parser()(file, fileObject));\n } else {\n promise = $q.when(fileObject);\n }\n\n promise.then(function(fileObj) {\n fileObjects.push(fileObj);\n // fulfill the promise here.\n file.deferredObj.resolve();\n });\n\n if (attrs.onload) {\n if (scope.onload && typeof scope.onload() === \"function\") {\n scope.onload()(e, fReader, file, rawFiles, fileObjects, fileObject);\n } else {\n scope.onload(e, rawFiles);\n }\n }\n\n };\n\n }\n\n function _attachEventHandlers(fReader, file, fileObject) {\n\n for (var i = FILE_READER_EVENTS.length - 1; i >= 0; i--) {\n var e = FILE_READER_EVENTS[i];\n if (attrs[e] && e !== 'onload') { // don't attach handler to onload yet\n _attachHandlerForEvent(e, scope[e], fReader, file, fileObject);\n }\n }\n\n fReader.onload = _readerOnLoad(fReader, file, fileObject);\n }\n\n function _readFiles() {\n var promises = [];\n var i;\n for (i = rawFiles.length - 1; i >= 0; i--) {\n // append file a new promise, that waits until resolved\n rawFiles[i].deferredObj = $q.defer();\n promises.push(rawFiles[i].deferredObj.promise);\n // TODO: Make sure all promises are resolved even during file reader error, otherwise view value wont be updated\n }\n\n // set view value once all files are read\n $q.all(promises).then(_setViewValue);\n\n for (i = rawFiles.length - 1; i >= 0; i--) {\n var reader = new $window.FileReader();\n var file = rawFiles[i];\n var fileObject = {};\n\n fileObject.filetype = file.type;\n fileObject.filename = file.name;\n fileObject.filesize = file.size;\n\n _attachEventHandlers(reader, file, fileObject);\n reader.readAsArrayBuffer(file);\n }\n }\n\n function _onChange(e) {\n if (attrs.onChange) {\n if (scope.onChange && typeof scope.onChange() === \"function\") {\n scope.onChange()(e, rawFiles);\n } else {\n scope.onChange(e, rawFiles);\n }\n }\n }\n\n function _onAfterValidate(e) {\n if (attrs.onAfterValidate) {\n // wait for all promises, in rawFiles,\n // then call onAfterValidate\n var promises = [];\n for (var i = rawFiles.length - 1; i >= 0; i--) {\n promises.push(rawFiles[i].deferredObj.promise);\n }\n $q.all(promises).then(function() {\n if (scope.onAfterValidate && typeof scope.onAfterValidate() === \"function\") {\n scope.onAfterValidate()(e, fileObjects, rawFiles);\n } else {\n scope.onAfterValidate(e, fileObjects, rawFiles);\n }\n });\n }\n }\n\n ngModel.$isEmpty = function(val) {\n return !val || (angular.isArray(val) ? val.length === 0 : !val.base64);\n };\n\n // http://stackoverflow.com/questions/1703228/how-can-i-clear-an-html-file-input-with-javascript\n scope._clearInput = function() {\n elem[0].value = '';\n };\n\n scope.$watch(function() {\n return ngModel.$viewValue;\n }, function(val) {\n if (ngModel.$isEmpty(val) && ngModel.$dirty) {\n scope._clearInput();\n // Remove validation errors\n ngModel.$setValidity('maxnum', true);\n ngModel.$setValidity('minnum', true);\n ngModel.$setValidity('maxsize', true);\n ngModel.$setValidity('minsize', true);\n ngModel.$setValidity('accept', true);\n }\n });\n\n elem.on('change', function(e) {\n\n fileObjects = [];\n fileObjects = angular.copy(fileObjects);\n\n if (e.target.files.length === 0) {\n rawFiles = [];\n _setViewValue();\n } else {\n rawFiles = e.target.files; // use event target so we can mock the files from test\n _readFiles();\n _onChange(e);\n _onAfterValidate(e);\n }\n\n scope._clearInput();\n\n });\n\n }\n };\n\n }\n ]);\n\n})(window);\n"],"sourceRoot":"/source/"}